123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- 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();
- });
- });
|