Skip to content

Instantly share code, notes, and snippets.

@itsazzad
Created September 7, 2020 10:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save itsazzad/8533f9e216f8f0f293be198538bc7450 to your computer and use it in GitHub Desktop.
Save itsazzad/8533f9e216f8f0f293be198538bc7450 to your computer and use it in GitHub Desktop.
exports.createAuthorizationHeader=function(m,c,e,b,n,l,k,f,i){var h=exports.createSignedHeaders(e);var a=exports.createCanonicalRequest(b,n,{},e,l);var g=exports.createStringToSign(i,k,f,a);var d=exports.createSignature(c,i,k,f,g);var j=exports.createAuthorizationHeaders(i,m,k,f,h,d);return j};exports.createAuthorizationHeaders=function(d,c,e,a,f,b){return("AWS4-HMAC-SHA256 Credential="+c+"/"+exports.createCredentialScope(d,e,a)+", SignedHeaders="+f+", Signature="+b)};exports.createCanonicalRequest=function(f,d,b,e,c){var a=JSON.stringify(c);return[f.toUpperCase(),d,exports.createCanonicalQueryString(b),exports.createCanonicalHeaders(e),exports.createSignedHeaders(e),hexEncodedHash(String(a))].join("\n")};exports.createCanonicalQueryString=function(a){return Object.keys(a).sort().map(function(b){return encodeURIComponent(b)+"="+encodeURIComponent(a[b])}).join("&")};exports.createCanonicalHeaders=function(a){return Object.keys(a).sort().map(function(b){return b.toLowerCase().trim()+":"+a[b].toString().trim()+"\n"}).join("")};exports.createSignedHeaders=function(a){return Object.keys(a).sort().map(function(b){return b.toLowerCase().trim()}).join(";")};exports.createCredentialScope=function(c,b,a){return[toDate(c),b,a,"aws4_request"].join("/")};exports.createStringToSign=function(d,c,a,b){return["AWS4-HMAC-SHA256",toTime(d),exports.createCredentialScope(d,c,a),hexEncodedHash(b)].join("\n")};exports.createSignature=function(b,a,i,d,e){var h=hmac("AWS4"+b,toDate(a));var g=hmac(h,i);var f=hmac(g,d);var c=hmac(f,"aws4_request");return hmac(c,e).toString(crypto.enc.Hex)};exports.toAmzDate=function(a){return new Date(a).toISOString().replace(/[:\-]|\.\d{3}/g,"")};function toTime(a){return new Date(a).toISOString().replace(/[:\-]|\.\d{3}/g,"")}function toDate(a){return toTime(a).substring(0,8)}function hmac(a,b){return crypto.HmacSHA256(b,a)}function hexEncodedHash(a){return crypto.SHA256(a).toString(crypto.enc.Hex)};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment