summaryrefslogtreecommitdiffstats
path: root/examples/rsatest
diff options
context:
space:
mode:
Diffstat (limited to 'examples/rsatest')
-rw-r--r--examples/rsatest/rsatest.cpp86
-rw-r--r--examples/rsatest/rsatest.pro6
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)