scram_sha_256
Version:
A framework for using scram-sha-256 in javascript
27 lines (26 loc) • 904 B
JavaScript
const { createHmac } = require('node:crypto');
;
/*** client_calculate_proof(random_nonce, client_key, client_key_hash)
* @brief calculates client proof
*
* @param {Buffer} random_nonce random_nonce
* @param {Buffer} client_key client_key
* @param {Buffer} client_key_hash client_key_hash
* @returns {Buffer} on false: undefined, on success: client_proof
*/
module.exports = function client_calculate_proof(random_nonce, client_key, client_key_hash) {
if (!Buffer.isBuffer(random_nonce))
return undefined;
if (!Buffer.isBuffer(client_key_hash))
return undefined;
let hmac = createHmac('sha256', client_key_hash);
hmac.update(random_nonce);
let client_proof = hmac.digest();
if (client_proof.length != client_key.length)
return undefined;
for (let i=0;i<client_proof.length;i++)
{
client_proof[i] ^= client_key[i];
}
return client_proof;
};