var should = require('chai').should();
var AESCBC = require('../lib/expmt/aescbc');

describe('AESCBC', function() {

  describe('@encrypt', function() {

    it('should return encrypt one block', function() {
      var password = "password";
      var messagebuf = new Buffer(128 / 8 - 1);
      messagebuf.fill(0);
      var encbuf = AESCBC.encrypt(messagebuf, password);
      encbuf.length.should.equal(128 / 8 + 128 / 8);
    });

  });

  describe('@decrypt', function() {

    it('should decrypt that which was encrypted', function() {
      var password = "password";
      var messagebuf = new Buffer(128 / 8 - 1);
      messagebuf.fill(0);
      var encbuf = AESCBC.encrypt(messagebuf, password);
      var messagebuf2 = AESCBC.decrypt(encbuf, password);
      messagebuf2.toString('hex').should.equal(messagebuf.toString('hex'));
    });

  });

  describe('@encryptCipherkey', function() {

    it('should return encrypt one block', function() {
      var cipherkeybuf = new Buffer(256 / 8);
      cipherkeybuf.fill(0x10);
      var ivbuf = new Buffer(128 / 8);
      ivbuf.fill(0);
      var messagebuf = new Buffer(128 / 8 - 1);
      messagebuf.fill(0);
      var encbuf = AESCBC.encryptCipherkey(messagebuf, cipherkeybuf, ivbuf);
      encbuf.length.should.equal(128 / 8 + 128 / 8);
    });

    it('should return encrypt two blocks', function() {
      var cipherkeybuf = new Buffer(256 / 8);
      cipherkeybuf.fill(0x10);
      var ivbuf = new Buffer(128 / 8);
      ivbuf.fill(0);
      var messagebuf = new Buffer(128 / 8);
      messagebuf.fill(0);
      var encbuf = AESCBC.encryptCipherkey(messagebuf, cipherkeybuf, ivbuf);
      encbuf.length.should.equal(128 / 8 + 128 / 8 + 128 / 8);
    });

  });

  describe('@decryptCipherkey', function() {
    
    it('should decrypt that which was encrypted', function() {
      var cipherkeybuf = new Buffer(256 / 8);
      cipherkeybuf.fill(0x10);
      var ivbuf = new Buffer(128 / 8);
      ivbuf.fill(0);
      var messagebuf = new Buffer(128 / 8);
      messagebuf.fill(0);
      var encbuf = AESCBC.encryptCipherkey(messagebuf, cipherkeybuf, ivbuf);
      var messagebuf2 = AESCBC.decryptCipherkey(encbuf, cipherkeybuf);
      messagebuf2.toString('hex').should.equal(messagebuf.toString('hex'));
    });

  });

});