langbung01 icon

init script

langbung01 | PRO | 11/01/22 04:59:01 AM UTC | 0 ⭐ | 442 👁️ | Never ⏰ | []
JavaScript |

3.73 KB

|

None

|

0 👍

/

0 👎

window = {};
// (new Function(pm.globals.get('dayjs')))();
eval(pm.globals.get('nodeforge'))
function init(){
    let libs = {}
    libs.getSecret = function(access_token){
        return new Promise((resolve, reject) => {
            pm.sendRequest({
                url: `${pm.environment.get('baseUrl')}/auth/v1/secret`,
                method: 'GET',
                header: {
                  'Content-Type': 'application/json',
                  'Authorization': `Bearer ${access_token}`
                }
              }, (err, res) => {
                if (err) {
                    return reject(err);
                } else {
                    return resolve(res);
                }
            });
        });
    }
    libs.pef1Encrypt = function (plainText, secret) {
        
        // let iv = crypto.randomBytes(12);
        let iv =  forge.random.getBytesSync(12);
    
        // let salt = crypto.randomBytes(16);
        let salt = forge.random.getBytesSync(16);
    
        // let key = crypto.createHmac('sha256', secret).update(salt).digest();
        const hmac = forge.hmac.create();
        hmac.start('sha256', secret);
        hmac.update(salt);
        let key = hmac.digest();
        
        // let cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
        let cipher = forge.cipher.createCipher('AES-GCM', key);
        cipher.start({
            iv: iv, // should be a 12-byte binary-encoded string or byte buffer
            tagLength: 128 // optional, defaults to 128 bits
            });
    
        // let cipherText = cipher.update(plainText, 'utf8', 'base64') + cipher.final('base64');
        cipher.update(forge.util.createBuffer(plainText,'utf8'));
    
        cipher.finish();
        let cipherText = forge.util.encode64(cipher.output.getBytes()) ;
    
    
        // let tag = cipher.getAuthTag();
        let tag = cipher.mode.tag;
        
        let msg = {
            f: 'pef1',
            s: forge.util.encode64(salt),
            i: forge.util.encode64(iv),
            t: forge.util.encode64(tag.getBytes()),
            d: cipherText
        };
        return JSON.stringify(msg);
    }
    libs.pef1Decrypt = function(encryptedText, secret) {
        try {
            let msg = JSON.parse(encryptedText);
            let salt = forge.util.decode64(msg.s, 'base64');
            let iv = forge.util.decode64(msg.i, 'base64');
            let tag = new forge.util.ByteStringBuffer(forge.util.decode64(msg.t, 'base64'));
            let cipherText = forge.util.decode64(msg.d);
            // let key = crypto.createHmac('sha256', secret).update(salt).digest();
            const hmac = forge.hmac.create();
            hmac.start('sha256', secret);
            hmac.update(salt);
            let key = hmac.digest();
            // let decipher = crypto.createDecipheriv('aes-256-gcm', key, iv);
            // decipher.setAuthTag(tag);
            let decipher = forge.cipher.createDecipher('AES-GCM', key);
            decipher.start({
                iv: iv,
                // additionalData: 'binary-encoded string', // optional
                tagLength: 128, // optional, defaults to 128 bits
                tag: tag // authentication tag from encryption
            });
        
            decipher.update(new forge.util.ByteStringBuffer(cipherText));
            decipher.finish()
            return forge.util.encodeUtf8(decipher.output.getBytes())
            // return decipher.update(cipherText, 'base64', 'utf8') + decipher.final('utf8');
        } catch (e) {
            // will return null if cipherText is not in pef1 format or authentication tag validation fails
            return null;
        }
    }
    return libs
}
init();

Comments