You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
1.9 KiB
87 lines
1.9 KiB
13 years ago
|
#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;
|
||
|
}
|
||
|
|