-
-
Save mrpinghe/f44479f2270ea36bf3b7cc958cc76cc0 to your computer and use it in GitHub Desktop.
var crypto = require('crypto'); | |
const id = process.env.API_ID; // your API ID, reading from environment variable | |
const key = process.env.KEY; // your API key, reading from environment variable | |
const preFix = "VERACODE-HMAC-SHA-256"; | |
const verStr = "vcode_request_version_1"; | |
var resthost = "api.veracode.com"; // rest host | |
var xmlhost = "analysiscenter.veracode.com"; // xml host | |
var hmac256 = (data, key, format) => { | |
var hash = crypto.createHmac('sha256', key).update(data); | |
// no format = Buffer / byte array | |
return hash.digest(format); | |
} | |
var getByteArray = (hex) => { | |
var bytes = []; | |
for(var i = 0; i < hex.length-1; i+=2){ | |
bytes.push(parseInt(hex.substr(i, 2), 16)); | |
} | |
// signed 8-bit integer array (byte array) | |
return Int8Array.from(bytes); | |
} | |
var getHost = (xml) => { | |
if (xml) { | |
return xmlhost; | |
} | |
return resthost; | |
} | |
var generateHeader = (url, method, xml) => { | |
var host = getHost(xml); | |
var data = `id=${id}&host=${host}&url=${url}&method=${method}`; | |
var timestamp = (new Date().getTime()).toString(); | |
var nonce = crypto.randomBytes(16).toString("hex"); | |
// calculate signature | |
var hashedNonce = hmac256(getByteArray(nonce), getByteArray(key)); | |
var hashedTimestamp = hmac256(timestamp, hashedNonce); | |
var hashedVerStr = hmac256(verStr, hashedTimestamp); | |
var signature = hmac256(data, hashedVerStr, 'hex'); | |
return `${preFix} id=${id},ts=${timestamp},nonce=${nonce},sig=${signature}`; | |
} | |
module.exports = { | |
getHost, | |
generateHeader | |
} |
Hi @mrpinghe Im trying to use this and kinda confused on
"Then in command line
$ export API_ID=YOUR_API_ID_VALUE && export KEY=YOUR_KEY_VALUE && node test.js"
I cant seem to get it to work as i paste it in my terminal and get this error Uncaught SyntaxError: Unexpected token 'export'
$ export
$ export
What am I doing wrong?
@falcond20 could you paste a screenshot of your terminal showing how you ran the command and the output, with your ID and Key values redacted?
Here is the screenshot @mrpinghe
Ah PowerShell. You want to use Set-Variable to set those variables I believe (I'm not too familiar with PowerShell) https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/set-variable?view=powershell-7.3
FYI - For those interested in using the Web Crypto API (e.g. browser) instead of the Node.js Crypto module, https://gist.github.com/ThibaudLopez/fe1baeaa4461cbf0bfa8fd258ff43243 (based on @mrpinghe work here)
Ah glad to see it worked out!