aboutsummaryrefslogtreecommitdiffstats
path: root/library/sodium-plus/test/cryptography-key-test.js
diff options
context:
space:
mode:
Diffstat (limited to 'library/sodium-plus/test/cryptography-key-test.js')
-rw-r--r--library/sodium-plus/test/cryptography-key-test.js83
1 files changed, 83 insertions, 0 deletions
diff --git a/library/sodium-plus/test/cryptography-key-test.js b/library/sodium-plus/test/cryptography-key-test.js
new file mode 100644
index 000000000..5dd45d716
--- /dev/null
+++ b/library/sodium-plus/test/cryptography-key-test.js
@@ -0,0 +1,83 @@
+const assert = require('assert');
+const crypto = require('crypto');
+const { describe, it } = require('mocha');
+const { expect } = require('chai');
+const {
+ CryptographyKey,
+ Ed25519PublicKey,
+ Ed25519SecretKey,
+ X25519PublicKey,
+ X25519SecretKey
+} = require('../index');
+
+let sodium;
+describe('CryptographyKey', () => {
+ it('Internal buffer is hidden from stack traces and iterators', async () => {
+ let bytes = await crypto.randomBytes(32);
+ let key = new CryptographyKey(bytes);
+ assert(Object.keys(key).length === 0, 'There should be no keys when you dump an object!');
+ expect(bytes.toString('hex')).to.be.equals(key.getBuffer().toString('hex'));
+ expect(bytes.toString('hex')).to.be.equals(key.toString('hex'));
+ });
+ it('constructor rejects invalid types', async () => {
+ let bytes = await crypto.randomBytes(32);
+ let key = new CryptographyKey(bytes);
+ // For test coverage
+ expect(bytes.toString('hex')).to.be.equal(key.slice().toString('hex'));
+ expect(false).to.be.equal(key.isPublicKey());
+ });
+ it('constructor rejects invalid types', () => {
+ expect(() => {
+ new CryptographyKey(new Uint8Array(32))
+ }).to.throw('Argument 1 must be an instance of Buffer.');
+ });
+
+ it('from()', async () => {
+ let key = CryptographyKey.from('808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f', 'hex');
+ expect(key.getBuffer().toString('hex')).to.be.equals('808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f');
+
+ let ed25519sk = Ed25519SecretKey.from(
+ '88c6102ed8b3278ae7e95ebcd4ed3f1a513d2fd3c1a88f5ecbda5f95209ce709' +
+ '324095af3d25e0f205d1a1297d01e810940063d05fc247d2042f6fc2f98a55c2',
+ 'hex'
+ );
+ expect(ed25519sk instanceof Ed25519SecretKey).to.be.equals(true);
+ let ed25519pk = Ed25519PublicKey.from(
+ '324095af3d25e0f205d1a1297d01e810940063d05fc247d2042f6fc2f98a55c2',
+ 'hex'
+ );
+ expect(ed25519pk instanceof Ed25519PublicKey).to.be.equals(true);
+ let x25519sk = X25519SecretKey.from(
+ 'fcb38e648f61e145c96be1a89776754b0a2e28ba57d3024ecae892dc5d93ec26',
+ 'hex'
+ );
+ expect(x25519sk instanceof X25519SecretKey).to.be.equals(true);
+ let x25519pk = X25519PublicKey.from(
+ '81149890dc709032327ab8d2628df8c0c8163f59bbb92a6fc3a83cb34864d503',
+ 'hex'
+ );
+ expect(x25519pk instanceof X25519PublicKey).to.be.equals(true);
+
+ expect(ed25519sk.isPublicKey()).to.be.equals(false);
+ expect(ed25519pk.isPublicKey()).to.be.equals(true);
+ expect(ed25519sk.isEd25519Key()).to.be.equals(true);
+ expect(ed25519pk.isEd25519Key()).to.be.equals(true);
+ expect(ed25519sk.isX25519Key()).to.be.equals(false);
+ expect(ed25519pk.isX25519Key()).to.be.equals(false);
+
+ expect(x25519sk.isPublicKey()).to.be.equals(false);
+ expect(x25519pk.isPublicKey()).to.be.equals(true);
+ expect(x25519sk.isEd25519Key()).to.be.equals(false);
+ expect(x25519pk.isEd25519Key()).to.be.equals(false);
+ expect(x25519sk.isX25519Key()).to.be.equals(true);
+ expect(x25519pk.isX25519Key()).to.be.equals(true);
+
+ expect(() => {
+ new Ed25519SecretKey(Buffer.alloc(32))
+ }).to.throw('Ed25519 secret keys must be 64 bytes long');
+
+ expect(() => {
+ new Ed25519PublicKey(Buffer.alloc(64))
+ }).to.throw('Ed25519 public keys must be 32 bytes long');
+ });
+});