diff options
Diffstat (limited to 'examples/rsatest')
-rw-r--r-- | examples/rsatest/rsatest.cpp | 86 | ||||
-rw-r--r-- | examples/rsatest/rsatest.pro | 6 |
2 files changed, 92 insertions, 0 deletions
diff --git a/examples/rsatest/rsatest.cpp b/examples/rsatest/rsatest.cpp new file mode 100644 index 0000000..bd513fd --- /dev/null +++ b/examples/rsatest/rsatest.cpp @@ -0,0 +1,86 @@ +#include<tqfile.h> +#include<tqfileinfo.h> +#include"qca.h" +#include<stdio.h> + +//#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("<rsa(\"%s\") = [%s]\n", rstr.latin1(), dstr.data()); + } + + return 0; +} + diff --git a/examples/rsatest/rsatest.pro b/examples/rsatest/rsatest.pro new file mode 100644 index 0000000..fc293ad --- /dev/null +++ b/examples/rsatest/rsatest.pro @@ -0,0 +1,6 @@ +TEMPLATE = app +CONFIG += thread console +TARGET = rsatest + +SOURCES += rsatest.cpp +include(../examples.pri) |