#include #include #include"qca.h" #include //#define USE_FILE TQCA::RSAKey readKeyFile(const TQString &name) { TQCA::RSAKey k; TQFile f(name); if(!f.open(IO_ReadOnly)) { printf("Unable to open %s\n", name.latin1()); return k; } TQByteArray der = f.readAll(); f.close(); printf("Read %s [%d bytes]\n", name.latin1(), der.size()); if(!k.fromDER(der)) { printf("%s: Error importing DER format.\n", name.latin1()); return k; } char *yes = "yes"; char *no = "no"; printf("Successfully imported %s (enc=%s, dec=%s)\n", name.latin1(), k.havePublic() ? yes : no, k.havePrivate() ? yes : no); printf("Converting to DER: %d bytes\n", k.toDER().size()); printf("Converting to PEM:\n%s\n", k.toPEM().latin1()); return k; } int main(int argc, char **argv) { TQCA::init(); TQCString cs = (argc >= 2) ? argv[1] : "hello"; if(!TQCA::isSupported(TQCA::CAP_RSA)) printf("RSA not supported!\n"); else { #ifdef USE_FILE TQCA::RSAKey pubkey = readKeyFile("keypublic.der"); if(pubkey.isNull()) return 1; TQCA::RSAKey seckey = readKeyFile("keyprivate.der"); if(seckey.isNull()) return 1; #else TQCA::RSAKey seckey = TQCA::RSA::generateKey(1024); if(seckey.isNull()) return 1; TQCA::RSAKey pubkey = seckey; #endif // encrypt some data TQByteArray a(cs.length()); memcpy(a.data(), cs.data(), a.size()); TQCA::RSA op; op.setKey(pubkey); TQByteArray result; if(!op.encrypt(a, &result)) { printf("Error encrypting.\n"); return 1; } TQString rstr = TQCA::arrayToHex(result); printf(">rsa(\"%s\") = [%s]\n", cs.data(), rstr.latin1()); // now decrypt it op.setKey(seckey); TQByteArray dec; if(!op.decrypt(result, &dec)) { printf("Error decrypting.\n"); return 1; } TQCString dstr; dstr.resize(dec.size()+1); memcpy(dstr.data(), dec.data(), dec.size()); printf("