AWS SDK <-> CryptoJS

node v4.9.1
version: 1.0.0
endpointsharetweet
Map cryptographic functions of CryptoJS and the AWS SDK. Useful for converting code from one library to the other.
const AWS = require('aws-sdk'); const cryptoJs = require('crypto-js'); const secretKey = 'abc123'; const AWSUtils = { hmac: (input) => AWS.util.crypto.lib.createHmac('sha256', secretKey) .update(input) .digest(), hmacHex: (input) => AWS.util.crypto.lib.createHmac('sha256', secretKey) .update(input) .digest('hex'), md5: (input) => AWS.util.crypto.md5(input, 'base64'), sha: (input) => AWS.util.crypto.sha256(input, 'hex'), }; const CryptoJsUtils = { hmac: (input) => { // From https://gist.github.com/getify/7325764 const convertWordArrayToUint8Array = (wordArray) => { var len = wordArray.words.length, u8_array = new Uint8Array(len << 2), offset = 0, word, i ; for (i=0; i<len; i++) { word = wordArray.words[i]; u8_array[offset++] = word >> 24; u8_array[offset++] = (word >> 16) & 0xff; u8_array[offset++] = (word >> 8) & 0xff; u8_array[offset++] = word & 0xff; } return u8_array; }; // Perform some tedious conversions to return a Buffer like the AWS SDK const wordArray = cryptoJs.HmacSHA256(input, secretKey); const uint8Array = convertWordArrayToUint8Array(wordArray); return new Buffer(uint8Array); }, hmacHex: (input) => cryptoJs.HmacSHA256(input, secretKey).toString(cryptoJs.enc.Hex), md5: (input) => cryptoJs.MD5(input).toString(cryptoJs.enc.Base64), sha: (input) => cryptoJs.SHA256(input).toString(cryptoJs.enc.Hex), }; const randomInput = ((new Date).getTime()).toString(); console.log('hmac', AWSUtils.hmac(randomInput).equals(CryptoJsUtils.hmac(randomInput))); console.log('hmacHex', AWSUtils.hmacHex(randomInput) === CryptoJsUtils.hmacHex(randomInput)); console.log('md5', AWSUtils.md5(randomInput) === CryptoJsUtils.md5(randomInput)); console.log('sha', AWSUtils.sha(randomInput) === CryptoJsUtils.sha(randomInput));
Loading…

no comments

    sign in to comment