UNPKG

tweetnacl-es6

Version:

Port of TweetNaCl cryptographic library to JavaScript es6

81 lines (75 loc) 4.07 kB
import nacl from './../nacl-fast-es.js'; import test from './helpers/tap-esm.js'; import util from './helpers/nacl-util.js'; test('nacl.sign.keyPair', function(t) { var keys = nacl.sign.keyPair(); t.ok(keys.secretKey && keys.secretKey.length === nacl.sign.secretKeyLength, 'has secret key'); t.ok(keys.publicKey && keys.publicKey.length === nacl.sign.publicKeyLength, 'has public key'); t.notOk(util.encodeBase64(keys.secretKey) === util.encodeBase64(keys.publicKey)); var newKeys = nacl.sign.keyPair(); t.notOk(util.encodeBase64(newKeys.secretKey) === util.encodeBase64(keys.secretKey), 'two keys differ'); t.end(); }); test('nacl.sign.keyPair.fromSecretKey', function(t) { var k1 = nacl.sign.keyPair(); var k2 = nacl.sign.keyPair.fromSecretKey(k1.secretKey); t.equal(util.encodeBase64(k2.secretKey), util.encodeBase64(k1.secretKey)); t.equal(util.encodeBase64(k2.publicKey), util.encodeBase64(k1.publicKey)); t.end(); }); test('nacl.sign.keyPair.fromSeed', function(t) { var seed = nacl.randomBytes(nacl.sign.seedLength); var k1 = nacl.sign.keyPair.fromSeed(seed); var k2 = nacl.sign.keyPair.fromSeed(seed); t.equal(k1.secretKey.length, nacl.sign.secretKeyLength); t.equal(k1.publicKey.length, nacl.sign.publicKeyLength); t.equal(k2.secretKey.length, nacl.sign.secretKeyLength); t.equal(k2.publicKey.length, nacl.sign.publicKeyLength); t.equal(util.encodeBase64(k2.secretKey), util.encodeBase64(k1.secretKey)); t.equal(util.encodeBase64(k2.publicKey), util.encodeBase64(k1.publicKey)); var seed2 = nacl.randomBytes(nacl.sign.seedLength); var k3 = nacl.sign.keyPair.fromSeed(seed2); t.equal(k3.secretKey.length, nacl.sign.secretKeyLength); t.equal(k3.publicKey.length, nacl.sign.publicKeyLength); t.notOk(util.encodeBase64(k3.secretKey) === util.encodeBase64(k1.secretKey)); t.notOk(util.encodeBase64(k3.publicKey) === util.encodeBase64(k1.publicKey)); t.throws(function() { nacl.sign.keyPair.fromSeed(seed2.subarray(0, 16)); }, Error, 'should throw error for wrong seed size'); t.end(); }); test('nacl.sign and nacl.sign.open', function(t) { var k = nacl.sign.keyPair(); var m = new Uint8Array(100); var i; for (i = 0; i < m.length; i++) m[i] = i & 0xff; var sm = nacl.sign(m, k.secretKey); t.ok(sm.length > m.length, 'signed message length should be greater than message length'); var om = nacl.sign.open(sm, k.publicKey); t.arrayEqual(om, m); t.throws(function() { nacl.sign.open(sm, k.publicKey.subarray(1)); }, Error, 'throws error for wrong public key size'); var badPublicKey = new Uint8Array(k.publicKey.length); om = nacl.sign.open(sm, badPublicKey); t.equal(om, null, 'opened message must be null when using wrong public key'); for (i = 80; i < 90; i++) sm[i] = 0; om = nacl.sign.open(sm, k.publicKey); t.equal(om, null, 'opened message must be null when opening bad signed message'); t.end(); }); test('nacl.sign.detached and nacl.sign.detached.verify', function(t) { var k = nacl.sign.keyPair(); var m = new Uint8Array(100); var i; for (i = 0; i < m.length; i++) m[i] = i & 0xff; var sig = nacl.sign.detached(m, k.secretKey); t.ok(sig.length === nacl.sign.signatureLength, 'signature must have correct length'); var result = nacl.sign.detached.verify(m, sig, k.publicKey); t.ok(result, 'signature must be verified'); t.throws(function() { nacl.sign.detached.verify(m, sig, k.publicKey.subarray(1)); }, Error, 'throws error for wrong public key size'); t.throws(function() { nacl.sign.detached.verify(m, sig.subarray(1), k.publicKey); }, Error, 'throws error for wrong signature size'); var badPublicKey = new Uint8Array(k.publicKey.length); result = nacl.sign.detached.verify(m, sig, badPublicKey); t.equal(result, false, 'signature must not be verified with wrong public key'); for (i = 0; i < 10; i++) sig[i] = 0; result = nacl.sign.detached.verify(m, sig, k.publicKey); t.equal(result, false, 'bad signature must not be verified'); t.end(); });