sodium
Version:
Lib Sodium port for node.js
310 lines (224 loc) • 11.8 kB
JavaScript
var assert = require('assert');
var sodium = require('../build/Release/sodium');
var assert = require('assert');
describe("AEAD", function () {
it("aes256gcm should encrypt and decrypt to the same string", function (done) {
var message = Buffer.from("This is a plain text message");
var additionalData = Buffer.from("this is metadata");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_KEYBYTES);
sodium.randombytes_buf(key);
// If CPU does not support AES256gcm don't test
if( !sodium.crypto_aead_aes256gcm_is_available() ) {
console.log('AES 256 gcm not supported by CPU');
done();
return;
}
// Encrypt data
var cipherText = sodium.crypto_aead_aes256gcm_encrypt(message, additionalData, nonce, key);
// Decrypt Data
var plainText = sodium.crypto_aead_aes256gcm_decrypt(cipherText, additionalData, nonce, key);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
it("aes256gcm should encrypt and decrypt to the same string with null additional data", function (done) {
var message = Buffer.from("This is a plain text message");
var additionalData = Buffer.from("this is metadata");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_KEYBYTES);
sodium.randombytes_buf(key);
// If CPU does not support AES256gcm don't test
if( !sodium.crypto_aead_aes256gcm_is_available() ) {
console.log('AES 256 gcm not supported by CPU');
done();
return;
}
// Encrypt data
var cipherText = sodium.crypto_aead_aes256gcm_encrypt(message, null, nonce, key);
// Decrypt Data
var plainText = sodium.crypto_aead_aes256gcm_decrypt(cipherText, null, nonce, key);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
it("chacha20poly1305 should encrypt and decrypt to the same string", function (done) {
var message = Buffer.from("This is a plain text message");
var additionalData = Buffer.from("this is metadata");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_KEYBYTES);
sodium.randombytes_buf(key);
// Encrypt data
var cipherText = sodium.crypto_aead_chacha20poly1305_encrypt(message, additionalData, nonce, key);
// Decrypt Data
var plainText = sodium.crypto_aead_chacha20poly1305_decrypt(cipherText, additionalData, nonce, key);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
it("chacha20poly1305 should encrypt and decrypt to the same string with null additional data", function (done) {
var message = Buffer.from("This is a plain text message");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_KEYBYTES);
sodium.randombytes_buf(key);
// Encrypt data
var cipherText = sodium.crypto_aead_chacha20poly1305_encrypt(message, null, nonce, key);
// Decrypt Data
var plainText = sodium.crypto_aead_chacha20poly1305_decrypt(cipherText, null, nonce, key);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
it("chacha20poly1305_ietf should encrypt and decrypt to the same string", function (done) {
var message = Buffer.from("This is a plain text message");
var additionalData = Buffer.from("this is metadata");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_ietf_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_ietf_KEYBYTES);
sodium.randombytes_buf(key);
// Encrypt data
var cipherText = sodium.crypto_aead_chacha20poly1305_ietf_encrypt(message, additionalData, nonce, key);
// Decrypt Data
var plainText = sodium.crypto_aead_chacha20poly1305_ietf_decrypt(cipherText, additionalData, nonce, key);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
it("chacha20poly1305_ietf should encrypt and decrypt to the same string with null additional data", function (done) {
var message = Buffer.from("This is a plain text message");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_ietf_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_ietf_KEYBYTES);
sodium.randombytes_buf(key);
// Encrypt data
var cipherText = sodium.crypto_aead_chacha20poly1305_ietf_encrypt(message, null, nonce, key);
// Decrypt Data
var plainText = sodium.crypto_aead_chacha20poly1305_ietf_decrypt(cipherText, null, nonce, key);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
it("aes256gcm should encrypt and decrypt to the same string detached", function (done) {
var message = Buffer.from("This is a plain text message");
var additionalData = Buffer.from("this is metadata");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_KEYBYTES);
sodium.randombytes_buf(key);
// If CPU does not support AES256gcm don't test
if( !sodium.crypto_aead_aes256gcm_is_available() ) {
console.log('AES 256 gcm not supported by CPU');
done();
return;
}
// Encrypt data
var c = sodium.crypto_aead_aes256gcm_encrypt_detached(message, additionalData, nonce, key);
// Decrypt Data
var plainText = sodium.crypto_aead_aes256gcm_decrypt_detached(c.cipherText, c.mac, additionalData, nonce, key);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
it("chacha20poly1305 should encrypt and decrypt to the same string detached", function (done) {
var message = Buffer.from("This is a plain text message");
var additionalData = Buffer.from("this is metadata");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_KEYBYTES);
sodium.randombytes_buf(key);
// Encrypt data
var c = sodium.crypto_aead_chacha20poly1305_encrypt_detached(message, additionalData, nonce, key);
// Decrypt Data
var plainText = sodium.crypto_aead_chacha20poly1305_decrypt_detached(c.cipherText, c.mac, additionalData, nonce, key);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
it("chacha20poly1305_ietf should encrypt and decrypt to the same string detached", function (done) {
var message = Buffer.from("This is a plain text message");
var additionalData = Buffer.from("this is metadata");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_ietf_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_chacha20poly1305_ietf_KEYBYTES);
sodium.randombytes_buf(key);
// Encrypt data
var c = sodium.crypto_aead_chacha20poly1305_ietf_encrypt_detached(message, additionalData, nonce, key);
// Decrypt Data
var plainText = sodium.crypto_aead_chacha20poly1305_ietf_decrypt_detached(c.cipherText, c.mac, additionalData, nonce, key);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
});
describe("AEAD Precompute Interface", function () {
it("aes256gcm should encrypt and decrypt to the same string", function (done) {
var message = Buffer.from("This is a plain text message");
var additionalData = Buffer.from("this is metadata");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_KEYBYTES);
sodium.randombytes_buf(key);
var ctx = sodium.crypto_aead_aes256gcm_beforenm(key);
// If CPU does not support AES256gcm don't test
if( !sodium.crypto_aead_aes256gcm_is_available() ) {
console.log('AES 256 gcm not supported by CPU');
done();
return;
}
// Encrypt data
var cipherText = sodium.crypto_aead_aes256gcm_encrypt_afternm(message, additionalData, nonce, ctx);
// Decrypt Data
var plainText = sodium.crypto_aead_aes256gcm_decrypt_afternm(cipherText, additionalData, nonce, ctx);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
it("aes256gcm should encrypt and decrypt to the same string with null additional data", function (done) {
var message = Buffer.from("This is a plain text message");
var additionalData = Buffer.from("this is metadata");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_KEYBYTES);
sodium.randombytes_buf(key);
var ctx = sodium.crypto_aead_aes256gcm_beforenm(key);
// If CPU does not support AES256gcm don't test
if( !sodium.crypto_aead_aes256gcm_is_available() ) {
console.log('AES 256 gcm not supported by CPU');
done();
return;
}
// Encrypt data
var cipherText = sodium.crypto_aead_aes256gcm_encrypt_afternm(message, null, nonce, ctx);
// Decrypt Data
var plainText = sodium.crypto_aead_aes256gcm_decrypt_afternm(cipherText, null, nonce, ctx);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
it("aes256gcm should encrypt and decrypt to the same string detached", function (done) {
var message = Buffer.from("This is a plain text message");
var additionalData = Buffer.from("this is metadata");
var nonce = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_NPUBBYTES);
sodium.randombytes_buf(nonce);
var key = Buffer.allocUnsafe(sodium.crypto_aead_aes256gcm_KEYBYTES);
sodium.randombytes_buf(key);
var ctx = sodium.crypto_aead_aes256gcm_beforenm(key);
// If CPU does not support AES256gcm don't test
if( !sodium.crypto_aead_aes256gcm_is_available() ) {
console.log('AES 256 gcm not supported by CPU');
done();
return;
}
// Encrypt data
var c = sodium.crypto_aead_aes256gcm_encrypt_detached_afternm(message, additionalData, nonce, ctx);
// Decrypt Data
var plainText = sodium.crypto_aead_aes256gcm_decrypt_detached_afternm(c.cipherText, c.mac, additionalData, nonce, ctx);
// Test equality
assert(sodium.compare(plainText, message)==0);
done();
});
});