Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
default:
throw new Error("SSL: SetupCipher: unkown encryption algorithm");
}
switch (cipher.encryptionMode) {
case SSL.cipherSuite.CBC:
case SSL.cipherSuite.NONE:
let h;
switch (cipher.hashAlgorithm) {
case SSL.cipherSuite.MD5: h = new Crypt.MD5(); break;
case SSL.cipherSuite.SHA1: h = new Crypt.SHA1(); break;
case SSL.cipherSuite.SHA256: h = new Crypt.SHA256(); break;
case SSL.cipherSuite.SHA384: h = new Crypt.SHA384(); break;
default:
throw new Error("SSL: SetupCipher: unknown hash algorithm");
}
o.hmac = new Crypt.HMAC(h, o.macSecret);
if (cipher.encryptionMode == SSL.cipherSuite.CBC)
o.enc = new Crypt.CBC(enc, o.iv); // no padding -- SSL 3.2 requires padding process beyond RFC2630
else
o.enc = enc;
break;
case SSL.cipherSuite.GCM:
let Arith = require.weak("arith");
o.enc = new Crypt.GCM(enc);
o.nonce = new Arith.Integer(1);
break;
default:
o.enc = enc;
break;
}
}
function p_hash(hash, secret, seed, sz)
{
var hmac = new Crypt.HMAC(hash, secret);
var niter = iceil(sz, hash.outputSize);
var A = hmac.process(seed); // start from A(1) = hmac(seed)
var p = new SSLStream();
while (--niter >= 0) {
var c = hmac.process(A, seed);
p.writeChunk(c);
if (niter > 0)
A = hmac.process(A);
}
return p.getChunk();
}
process(len, info) {
var hmac = new Crypt.HMAC(this.hash, this.prk);
var res = new ArrayBuffer(0);
var counter = new Uint8Array(1);
var hashlen = this.hash.outputSize;
var block = "";
for (var i = 1, l = len; l > 0; l -= hashlen, i++) {
hmac.reset();
hmac.update(block);
hmac.update(info);
counter[0] = i & 0xff;
hmac.update(counter.buffer);
block = hmac.close();
res = res.concat(block);
}
return len % hashlen == 0 ? res : res.slice(0, len);
};
};
constructor(key, salt, digest) {
this.hash = new digest();
if (!salt) {
salt = new Uint8Array(this.hash.outputSize);
salt.fill(0);
salt = salt.buffer;
}
var hmac = new Crypt.HMAC(this.hash, salt);
hmac.update(key);
this.prk = hmac.close();
};
process(len, info) {