import * as asmCrypto from '../asmcrypto.all.es8'; import chai from 'chai'; const expect = chai.expect; describe('SHA512', () => { const sha512_vectors = [ [ 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e', asmCrypto.string_to_bytes(''), ], [ 'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f', asmCrypto.string_to_bytes('abc'), ], [ '8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909', asmCrypto.string_to_bytes( 'abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu', ), ], [ '07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6', asmCrypto.string_to_bytes('The quick brown fox jumps over the lazy dog'), ], [ '91ea1245f20d46ae9a037a989f54f1f790f0a47607eeb8a14d12890cea77a1bbc6c7ed9cf205e67b7f2b8fd4c7dfd3a7a8617e45f3c463d481c7e586c39ac1ed', asmCrypto.string_to_bytes('The quick brown fox jumps over the lazy dog.'), ], ]; it('asmCrypto.SHA512.hex', function() { for (let i = 0; i < sha512_vectors.length; ++i) { const sha512 = new asmCrypto.Sha512(); expect(asmCrypto.bytes_to_hex(sha512.process(sha512_vectors[i][1]).finish().result), 'vector ' + i).to.equal( sha512_vectors[i][0], ); } }); }); describe('HMAC-SHA512', () => { const hmac_sha512_vectors = [ [ '87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854', asmCrypto.hex_to_bytes('0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b'), asmCrypto.string_to_bytes('Hi There'), ], [ '164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737', asmCrypto.string_to_bytes('Jefe'), asmCrypto.string_to_bytes('what do ya want for nothing?'), ], [ '80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f3526b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598', asmCrypto.hex_to_bytes( 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', ), asmCrypto.string_to_bytes('Test Using Larger Than Block-Size Key - Hash Key First'), ], ]; it('asmCrypto.HMAC_SHA512.hex', function() { for (let i = 0; i < hmac_sha512_vectors.length; ++i) { const hmacSha512 = new asmCrypto.HmacSha512(hmac_sha512_vectors[i][1]); expect( asmCrypto.bytes_to_hex(hmacSha512.process(hmac_sha512_vectors[i][2]).finish().result), 'vector ' + i, ).to.equal(hmac_sha512_vectors[i][0]); } }); }); describe('PBKDF2-HMAC-SHA512', () => { const pbkdf2_hmac_sha512_vectors = [ [ '867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fce', asmCrypto.string_to_bytes('password'), asmCrypto.string_to_bytes('salt'), 1, 64, ], [ '867f70cf1ade02cff3752599a3a53dc4af34c7a669815ae5d513554e1c8cf252c02d470a285a0501bad999bfe943c08f050235d7d68b1da55e63f73b60a57fce', asmCrypto.string_to_bytes('password'), asmCrypto.string_to_bytes('salt'), 1, 64, ], [ 'e1d9c16aa681708a45f5c7c4e215ceb66e011a2e9f0040713f18aefdb866d53cf76cab2868a39b9f7840edce4fef5a82be67335c77a6068e04112754f27ccf4e', asmCrypto.string_to_bytes('password'), asmCrypto.string_to_bytes('salt'), 2, 64, ], [ 'd197b1b33db0143e018b12f3d1d1479e6cdebdcc97c5c0f87f6902e072f457b5143f30602641b3d55cd335988cb36b84376060ecd532e039b742a239434af2d5', asmCrypto.string_to_bytes('password'), asmCrypto.string_to_bytes('salt'), 4096, 64, ], [ '8c0511f4c6e597c6ac6315d8f0362e225f3c501495ba23b868c005174dc4ee71115b59f9e60cd9532fa33e0f75aefe30225c583a186cd82bd4daea9724a3d3b8', asmCrypto.string_to_bytes('passwordPASSWORDpassword'), asmCrypto.string_to_bytes('saltSALTsaltSALTsaltSALTsaltSALTsalt'), 4096, 64, ], ]; it('asmCrypto.PBKDF2_HMAC_SHA512.hex', function() { for (let i = 0; i < pbkdf2_hmac_sha512_vectors.length; ++i) { expect( // got asmCrypto.bytes_to_hex( asmCrypto.Pbkdf2HmacSha512( pbkdf2_hmac_sha512_vectors[i][1], // password pbkdf2_hmac_sha512_vectors[i][2], // salt pbkdf2_hmac_sha512_vectors[i][3], // count pbkdf2_hmac_sha512_vectors[i][4], // dklen ), ), "asmCrypto.PBKDF2_HMAC_SHA512.hex('" + pbkdf2_hmac_sha512_vectors[i][1] + "', '" + pbkdf2_hmac_sha512_vectors[i][2] + "', '" + pbkdf2_hmac_sha512_vectors[i][3] + "', '" + pbkdf2_hmac_sha512_vectors[i][4] + "') is expect to '" + pbkdf2_hmac_sha512_vectors[i][0] + "'", ).to.equal(pbkdf2_hmac_sha512_vectors[i][0]); } }); });