// from  http://www.movable-type.co.uk/scripts/aes.html
var Aes = require("aes-ctr");


var password   = "L0ck it up saf3";
var plaintext  = "pssst ... đon’t tell anyøne!";
var ciphertext = Aes.Ctr.encrypt(plaintext, password, 256);
var origtext   = Aes.Ctr.decrypt(ciphertext, password, 256);


// from Appendix C of  http://csrc.nist.gov/archive/aes/index.html
var cipher = [], key = [], i;

for(i=0x1f; i>=0x10; --i) { key[i] = i; }
for(i=0x0f; i>=0x00; --i) { key[i] = i; cipher[i] = i*0x11; }


session.output.write(
                               "\n"+
  "     Password: "+password  +"\n"+
  "    Plaintext: "+plaintext +"\n"+
  "Encrypted ...: "+ciphertext+"\n"+
  "... Decrypted: "+origtext  +"\n"+
                               "\n"+
  "128-bit: "+_(Aes.cipher(cipher,Aes.keyExpansion(key.slice(0,16))))+"\n"+
  "192-bit: "+_(Aes.cipher(cipher,Aes.keyExpansion(key.slice(0,24))))+"\n"+
  "256-bit: "+_(Aes.cipher(cipher,Aes.keyExpansion(key            )))+"\n"+
  "\n"
);


// convert byte array to hex string
function _(a,  /* aux. var */ b) {
  return (b = a.shift()) ? ("0"+b.toString(16)+' ').slice(b>=0x10) + _(a) : "";
}