summaryrefslogtreecommitdiff
path: root/plugins/CryptoPP/cpp_rsau.h
blob: 0e30629079125e05186e1428f6142fb39d451d82 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#ifndef __CPP_RSAU_H__
#define __CPP_RSAU_H__

class TLV {
private:
	map<u_char,string> data;

public:
	TLV();
	TLV(const string& b) { decode(b); };

	string encode() {
		map<u_char,string>::const_iterator i;
		string b;
		for ( i=data.begin(); i!=data.end(); ++i ) {
			b += tlv(i->first,i->second);
		}
		return b;
	};
	void decode(const string& b) {
		u_char t;
		string v;
		string r = b;
		while( r.length() ) {
			t = un_tlv(r,v);
			if ( t==-1 ) {
				break;
			}
			data[t] = v;
		}
	};

	u_int count() { return data.size(); };
	bool exist(u_char t) { return (data.find(t) != data.end()); };
	string get(u_char t) { return data[t]; };
	void put(u_char t, string& v) { data[t]=v; };

private:
	string tlv(u_int t, const string& v) {
		string b;
		t |= v.length()<<8;
		b.assign((const char*)&t,3);
		b += v;
		return b;
	};
	u_char un_tlv(string& b, string& v) {
		string r; v = r;
		u_int t = 0;
		if ( b.length() > 3 ) {
			b.copy((char*)&t,3);
			u_int l = t>>8;
			t &= 0xFF;
			if ( b.length() >= 3+l ) {
		  		v = b.substr(3,l);
		  		r = b.substr(3+l);
			}
		}
		if ( !v.length() ) {
			return -1;
		}
		b = r;
		return t;
	};
};

string pad256(string&);

string& add_delim(string&,const string&,int);
string& del_delim(string&,const string&);

string tlv(int,const string&);
string tlv(int,const char*);
string tlv(int,int);
string& un_tlv(string&,int&,string&);
string& un_tlv(string&,int&,int&);

int str2int(string&);

string hash(string&);
string hash(PBYTE,int);

string hash128(string&);
string hash128(LPSTR);
string hash128(PBYTE,int);

string hash256(string&);
string hash256(LPSTR);
string hash256(PBYTE,int);

Integer BinaryToInteger(const string&);
string  IntegerToBinary(const Integer&);

AutoSeededRandomPool& GlobalRNG();

void	GenerateRSAKey(unsigned int,string&,string&);
string	RSAEncryptString(const RSA::PublicKey&,const string&);
string  RSADecryptString(const RSA::PrivateKey&,const string&);
string	RSASignString(const RSA::PrivateKey&,const string&);
BOOL	RSAVerifyString(const RSA::PublicKey&,const string&,const string&);

#endif