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));