#include"qca.h" #include static TQCString arrayToCString(const TQByteArray &); static TQByteArray cstringToArray(const TQCString &); static void doDynTest(TQCA::Cipher *c, const TQString &name, const TQCString &cs); int main(int argc, char **argv) { TQCA::init(); TQCString cs = (argc >= 2) ? argv[1] : "hello"; // AES128 test if(!TQCA::isSupported(TQCA::CAP_AES128)) printf("AES128 not supported!\n"); else { // encrypt TQByteArray key = TQCA::AES128::generateKey(); TQByteArray iv = TQCA::AES128::generateIV(); printf("aes128:key:%s\n", TQCA::arrayToHex(key).latin1()); printf("aes128:iv:%s\n", TQCA::arrayToHex(iv).latin1()); TQCA::AES128 c(TQCA::Encrypt, TQCA::CBC, key, iv); c.update(cstringToArray(cs)); TQByteArray f = c.final(); TQString result = TQCA::arrayToHex(f); printf(">aes128(\"%s\") = [%s]\n", cs.data(), result.latin1()); // decrypt TQCA::AES128 d(TQCA::Decrypt, TQCA::CBC, key, iv); d.update(f); TQCString dec = arrayToCString(d.final()); printf("dyn_generateKey(); TQByteArray iv = c->dyn_generateIV(); printf("%s:key:%s\n", name.latin1(), TQCA::arrayToHex(key).latin1()); printf("%s:iv:%s\n", name.latin1(), TQCA::arrayToHex(iv).latin1()); c->reset(TQCA::Encrypt, TQCA::CBC, key, iv); c->update(cstringToArray(cs)); TQByteArray f = c->final(); TQString result = TQCA::arrayToHex(f); printf(">%s(\"%s\") = [%s]\n", name.latin1(), cs.data(), result.latin1()); // decrypt c->reset(TQCA::Decrypt, TQCA::CBC, key, iv); c->update(f); TQCString dec = arrayToCString(c->final()); printf("<%s(\"%s\") = [%s]\n", name.latin1(), result.latin1(), dec.data()); delete c; }