import nimAES import std/sysrand import strutils, unittest proc ECBC(text:(string | seq[byte]) , iv:(string | seq[byte]) , key:(string | seq[byte]) ):string = var ctx = initAES() Utext:string Uiv:string Ukey:string Utext=cast[string](text) Uiv=cast[string](iv) Ukey=cast[string](key) assert Uiv.len==16 assert Ukey.len==32 assert ctx.setEncodeKey(Ukey) return ctx.encryptCBC(Uiv,Utext) proc DCBC(text:(string | seq[byte]) , iv:(string | seq[byte]) , key:(string | seq[byte]) ):string = var ctx = initAES() Utext:string Uiv:string Ukey:string Utext=cast[string](text) Uiv=cast[string](iv) Ukey=cast[string](key) assert Uiv.len==16 assert Ukey.len==32 assert ctx.setDecodeKey(Ukey) return ctx.encryptCBC(Uiv,Utext) echo "Input Text:" let txt=stdin.readLine() let iv = urandom(16) let key = urandom(32) var Uiv = iv let EC = ECBC(txt,Uiv,key) let DC = DCBC(EC,Uiv,key) echo DC,txt echo "DC TYPE: ", typeOf(DC), "TXT TYPE: ", typeOf(txt) echo "DC LEN: ", DC.len, "TXT LEN: ", txt.len