source: psi/trunk/cutestuff/enctest.cpp@ 82

Last change on this file since 82 was 2, checked in by dmik, 19 years ago

Imported original Psi 0.10 sources from Affinix

File size: 2.4 KB
Line 
1#include<qdom.h>
2#include<qtextstream.h>
3#include<stdio.h>
4
5#include"util/cipher.h"
6#include"xmlsec/xmlenc.h"
7
8static QCString elemToString(const QDomElement &e)
9{
10 QString out;
11 QTextStream ts(&out, IO_WriteOnly);
12 e.save(ts, 1);
13 return out.utf8();
14}
15
16int main()
17{
18 QDomDocument doc;
19 QDomElement order = doc.createElement("order");
20 doc.appendChild(order);
21
22 QDomElement e = doc.createElement("creditcard");
23 e.appendChild(doc.createTextNode("1234 5678 9012 3456"));
24 order.appendChild(e);
25 printf("---- Original\n%s----\n\n", elemToString(order).data());
26
27 Cipher::Type mainKeyType = Cipher::TripleDES;
28 Cipher::Type subKeyType = Cipher::AES_256;
29
30 RSAKey rsa = generateRSAKey();
31 if(rsa.isNull()) {
32 printf("RSA key generation failed!\n");
33 return 0;
34 }
35 bool ok;
36 QCString cs = "Hello.";
37 printf("cs[%d]\n", cs.size());
38 QByteArray result = encryptRSA2(cs, rsa, &ok);
39 if(!ok) {
40 printf("Unable to RSA encrypt!\n");
41 return 0;
42 }
43 printf("result[%d]\n", result.size());
44 QByteArray result2 = decryptRSA2(result, rsa, &ok);
45 if(!ok) {
46 printf("Unable to RSA decrypt!\n");
47 return 0;
48 }
49 printf("result2[%d]\n", result2.size());
50 printf("{%s}\n", result2.data());
51
52 QByteArray iv = Cipher::generateIV(mainKeyType);
53 printf("ivsize=[%d]\n", iv.size());
54 Cipher::Key key1 = Cipher::generateKey(mainKeyType);
55 printf("keysize=[%d]\n", key1.data().size());
56 Cipher::Key key = Cipher::generateKey(subKeyType);
57 printf("Key: { ");
58 for(int n = 0; n < (int)key.data().size(); ++n)
59 printf("%02x", (unsigned char)key.data()[n]);
60 printf(" }\n\n");
61
62 XmlEnc::Encrypted dat;
63 dat.encryptKey(key, key1);
64 QDomElement encKey = dat.toXml(&doc);
65
66 //printf("---- Encrypted Key\n%s----\n\n", elemToString(encKey).data());
67
68 XmlEnc::KeyInfo ki;
69 ki.setName("My Key");
70 //ki.attachEncryptedKey(encKey);
71 ki.setValue(key.data());
72
73 dat.setKeyInfo(ki);
74 dat.encryptElement(e, key);
75 QDomElement enc = dat.toXml(&doc);
76 order.replaceChild(enc, e);
77 printf("---- Encrypt\n%s----\n\n", elemToString(order).data());
78
79 XmlEnc::Encrypted de;
80 if(!de.fromXml(encKey))
81 printf("Error: could not read encrypted xml!\n");
82 QByteArray r = de.decryptKey(key1);
83
84 Cipher::Key realKey;
85 realKey.setData(r);
86 realKey.setType(subKeyType);
87
88 if(!de.fromXml(enc))
89 printf("Error: could not read encrypted xml!\n");
90
91 QDomElement dec = de.decryptElement(&doc, realKey);
92 order.replaceChild(dec, enc);
93 printf("---- Decrypt\n%s----\n\n", elemToString(order).data());
94}
Note: See TracBrowser for help on using the repository browser.