Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
init(iv, aad) {
let h = this.block.encrypt(new ArrayBuffer(this.block.blockSize));
this.ghash = new GHASH(h, aad);
if (iv.byteLength == 12) {
let one = new DataView(new ArrayBuffer(4));
one.setUint32(0, 1); // big endian
iv = iv.concat(one.buffer);
}
else {
let ghash = new GHASH(h);
iv = ghash.process(iv);
}
this.y0 = iv;
// start with y1
let y1 = BigInt.fromArrayBuffer(iv);
y1++;
this.ctr.setIV(ArrayBuffer.fromBigInt(y1));
}
encrypt(data, buf) {
init(iv, aad) {
let h = this.block.encrypt(new ArrayBuffer(this.block.blockSize));
this.ghash = new GHASH(h, aad);
if (iv.byteLength == 12) {
let one = new DataView(new ArrayBuffer(4));
one.setUint32(0, 1); // big endian
iv = iv.concat(one.buffer);
}
else {
let ghash = new GHASH(h);
iv = ghash.process(iv);
}
this.y0 = iv;
// start with y1
let y1 = BigInt.fromArrayBuffer(iv);
y1++;
this.ctr.setIV(ArrayBuffer.fromBigInt(y1));
}
encrypt(data, buf) {
let sha1 = new Digest("SHA1");
sha1.write("dGhlIHNhbXBsZSBub25jZQ==");
sha1.write("258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
let result = Base64.encode(sha1.close());
trace(`Calculated hash: ${result}\n`);
let expect = "s3pPLMBiTxaQ9kYGzzhZRbK+xOo=";
trace(`Expected hash: ${expect}\n`);
if (result == expect)
trace("PASS\n");
else
trace("FAIL\n");
let ghash = new GHASH(H2B("0x66e94bd4ef8a2c3b884cfa59ca342b2e"));
ghash.write(H2B("0x0388dace60b6a392f328c2b971b2fe78"));
result = ghash.close();
let expected = H2B("0xf38cbb1ad69223dcc3457ae5b6b0f885");
if (Bin.comp(result, expected) == 0)
trace("PASS\n");
else {
trace("FAIL\n");
trace("result: " + B2H(result) + "\n");
trace("expected: " + B2H(expected) + "\n");
debugger
}
ghash = new GHASH(H2B("0xb83b533708bf535d0aa6e52980d53b78"),
H2B("0xfeedfacedeadbeeffeedfacedeadbeefabaddad2"));
ghash.write(H2B("0x42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091"));
result = ghash.close();
trace("FAIL\n");
let ghash = new GHASH(H2B("0x66e94bd4ef8a2c3b884cfa59ca342b2e"));
ghash.write(H2B("0x0388dace60b6a392f328c2b971b2fe78"));
result = ghash.close();
let expected = H2B("0xf38cbb1ad69223dcc3457ae5b6b0f885");
if (Bin.comp(result, expected) == 0)
trace("PASS\n");
else {
trace("FAIL\n");
trace("result: " + B2H(result) + "\n");
trace("expected: " + B2H(expected) + "\n");
debugger
}
ghash = new GHASH(H2B("0xb83b533708bf535d0aa6e52980d53b78"),
H2B("0xfeedfacedeadbeeffeedfacedeadbeefabaddad2"));
ghash.write(H2B("0x42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091"));
result = ghash.close();
expected = H2B("0x698e57f70e6ecc7fd9463b7260a9ae5f");
if (Bin.comp(result, expected) == 0)
trace("PASS\n");
else {
trace("FAIL\n");
trace("result: " + B2H(result) + "\n");
trace("expected: " + B2H(expected) + "\n");
debugger
}