AES
This commit is contained in:
parent
a0ad59fbac
commit
1dead4cbc4
|
@ -0,0 +1,47 @@
|
|||
var aes = require('aes');
|
||||
|
||||
var AES = function AES() {
|
||||
};
|
||||
|
||||
AES.encrypt = function(messagebuf, keybuf) {
|
||||
var key = AES.buf2words(keybuf);
|
||||
var message = AES.buf2words(messagebuf);
|
||||
var a = new aes(key);
|
||||
var enc = a.encrypt(message);
|
||||
var encbuf = AES.words2buf(enc);
|
||||
return encbuf;
|
||||
};
|
||||
|
||||
AES.decrypt = function(encbuf, keybuf) {
|
||||
var enc = AES.buf2words(encbuf);
|
||||
var key = AES.buf2words(keybuf);
|
||||
var a = new aes(key);
|
||||
var message = a.decrypt(enc);
|
||||
var messagebuf = AES.words2buf(message);
|
||||
return messagebuf;
|
||||
};
|
||||
|
||||
AES.buf2words = function(buf) {
|
||||
if (buf.length % 4)
|
||||
throw new Error('buf length must be a multiple of 4');
|
||||
|
||||
var words = [];
|
||||
|
||||
for (var i = 0; i < buf.length / 4; i++) {
|
||||
words.push(buf.readUInt32BE(i * 4));
|
||||
};
|
||||
|
||||
return words;
|
||||
};
|
||||
|
||||
AES.words2buf = function(words) {
|
||||
var buf = new Buffer(words.length * 4);
|
||||
|
||||
for (var i = 0; i < words.length; i++) {
|
||||
buf.writeUInt32BE(words[i], i * 4);
|
||||
};
|
||||
|
||||
return buf;
|
||||
};
|
||||
|
||||
module.exports = AES;
|
|
@ -16,6 +16,7 @@
|
|||
"multisig"
|
||||
],
|
||||
"dependencies": {
|
||||
"aes": "=0.1.0",
|
||||
"bn.js": "=0.13.3",
|
||||
"bs58": "=1.2.1",
|
||||
"elliptic": "=0.15.7",
|
||||
|
|
|
@ -0,0 +1,85 @@
|
|||
var should = require('chai').should();
|
||||
var Hash = require('../lib/hash');
|
||||
var AES = require('../lib/expmt/aes');
|
||||
|
||||
describe('AES', function() {
|
||||
var m128 = Hash.sha256(new Buffer('test1')).slice(0, 128 / 8);
|
||||
|
||||
var k128 = Hash.sha256(new Buffer('test2')).slice(0, 128 / 8);
|
||||
var k192 = Hash.sha256(new Buffer('test2')).slice(0, 192 / 8);
|
||||
var k256 = Hash.sha256(new Buffer('test2')).slice(0, 256 / 8);
|
||||
|
||||
var e128 = new Buffer('3477e13884125038f4dc24e9d2cfbbc7', 'hex');
|
||||
var e192 = new Buffer('b670954c0e2da1aaa5f9063de04eb961', 'hex');
|
||||
var e256 = new Buffer('dd2ce24581183a4a7c0b1068f8bc79f0', 'hex');
|
||||
|
||||
|
||||
describe('@encrypt', function() {
|
||||
|
||||
it('should encrypt with a 128 bit key', function() {
|
||||
var encbuf = AES.encrypt(m128, k128);
|
||||
encbuf.toString('hex').should.equal(e128.toString('hex'));
|
||||
});
|
||||
|
||||
it('should encrypt with a 192 bit key', function() {
|
||||
var encbuf = AES.encrypt(m128, k192);
|
||||
encbuf.toString('hex').should.equal(e192.toString('hex'));
|
||||
});
|
||||
|
||||
it('should encrypt with a 256 bit key', function() {
|
||||
var encbuf = AES.encrypt(m128, k256);
|
||||
encbuf.toString('hex').should.equal(e256.toString('hex'));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('@decrypt', function() {
|
||||
|
||||
it('should encrypt/decrypt with a 128 bit key', function() {
|
||||
var encbuf = AES.encrypt(m128, k128);
|
||||
var m = AES.decrypt(encbuf, k128);
|
||||
m.toString('hex').should.equal(m128.toString('hex'));
|
||||
});
|
||||
|
||||
it('should encrypt/decrypt with a 192 bit key', function() {
|
||||
var encbuf = AES.encrypt(m128, k192);
|
||||
var m = AES.decrypt(encbuf, k192);
|
||||
m.toString('hex').should.equal(m128.toString('hex'));
|
||||
});
|
||||
|
||||
it('should encrypt/decrypt with a 256 bit key', function() {
|
||||
var encbuf = AES.encrypt(m128, k256);
|
||||
var m = AES.decrypt(encbuf, k256);
|
||||
m.toString('hex').should.equal(m128.toString('hex'));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('@buf2words', function() {
|
||||
|
||||
it('should convert this 4 length buffer into an array', function() {
|
||||
var buf = new Buffer([0, 0, 0, 0]);
|
||||
var words = AES.buf2words(buf);
|
||||
words.length.should.equal(1);
|
||||
});
|
||||
|
||||
it('should throw an error on this 5 length buffer', function() {
|
||||
var buf = new Buffer([0, 0, 0, 0, 0]);
|
||||
(function() {
|
||||
var words = AES.buf2words(buf);
|
||||
}).should.throw();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('@words2buf', function() {
|
||||
|
||||
it('should convert this array into a buffer', function() {
|
||||
var a = [100, 0];
|
||||
var buf = AES.words2buf(a);
|
||||
buf.length.should.equal(8);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
});
|
Loading…
Reference in New Issue