diff options
author | beck <> | 2000-03-19 11:13:58 +0000 |
---|---|---|
committer | beck <> | 2000-03-19 11:13:58 +0000 |
commit | 796d609550df3a33fc11468741c5d2f6d3df4c11 (patch) | |
tree | 6c6d539061caa20372dad0ac4ddb1dfae2fbe7fe /src/lib/libcrypto/rsa/rsa_test.c | |
parent | 5be3114c1fd7e0dfea1e38d3abb4cbba75244419 (diff) | |
download | openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.gz openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.bz2 openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.zip |
OpenSSL 0.9.5 merge
*warning* this bumps shared lib minors for libssl and libcrypto from 2.1 to 2.2
if you are using the ssl26 packages for ssh and other things to work you will
need to get new ones (see ~beck/libsslsnap/<arch>) on cvs or ~beck/src-patent.tar.gz on cvs
Diffstat (limited to 'src/lib/libcrypto/rsa/rsa_test.c')
-rw-r--r-- | src/lib/libcrypto/rsa/rsa_test.c | 314 |
1 files changed, 314 insertions, 0 deletions
diff --git a/src/lib/libcrypto/rsa/rsa_test.c b/src/lib/libcrypto/rsa/rsa_test.c new file mode 100644 index 0000000000..e5ae0c1f69 --- /dev/null +++ b/src/lib/libcrypto/rsa/rsa_test.c | |||
@@ -0,0 +1,314 @@ | |||
1 | /* test vectors from p1ovect1.txt */ | ||
2 | |||
3 | #include <stdio.h> | ||
4 | #include <string.h> | ||
5 | |||
6 | #include "openssl/e_os.h" | ||
7 | |||
8 | #include <openssl/crypto.h> | ||
9 | #include <openssl/err.h> | ||
10 | #include <openssl/rand.h> | ||
11 | #ifdef NO_RSA | ||
12 | int main(int argc, char *argv[]) | ||
13 | { | ||
14 | printf("No RSA support\n"); | ||
15 | return(0); | ||
16 | } | ||
17 | #else | ||
18 | #include <openssl/rsa.h> | ||
19 | |||
20 | #define SetKey \ | ||
21 | key->n = BN_bin2bn(n, sizeof(n)-1, key->n); \ | ||
22 | key->e = BN_bin2bn(e, sizeof(e)-1, key->e); \ | ||
23 | key->d = BN_bin2bn(d, sizeof(d)-1, key->d); \ | ||
24 | key->p = BN_bin2bn(p, sizeof(p)-1, key->p); \ | ||
25 | key->q = BN_bin2bn(q, sizeof(q)-1, key->q); \ | ||
26 | key->dmp1 = BN_bin2bn(dmp1, sizeof(dmp1)-1, key->dmp1); \ | ||
27 | key->dmq1 = BN_bin2bn(dmq1, sizeof(dmq1)-1, key->dmq1); \ | ||
28 | key->iqmp = BN_bin2bn(iqmp, sizeof(iqmp)-1, key->iqmp); \ | ||
29 | memcpy(c, ctext_ex, sizeof(ctext_ex) - 1); \ | ||
30 | return (sizeof(ctext_ex) - 1); | ||
31 | |||
32 | static int key1(RSA *key, unsigned char *c) | ||
33 | { | ||
34 | static unsigned char n[] = | ||
35 | "\x00\xAA\x36\xAB\xCE\x88\xAC\xFD\xFF\x55\x52\x3C\x7F\xC4\x52\x3F" | ||
36 | "\x90\xEF\xA0\x0D\xF3\x77\x4A\x25\x9F\x2E\x62\xB4\xC5\xD9\x9C\xB5" | ||
37 | "\xAD\xB3\x00\xA0\x28\x5E\x53\x01\x93\x0E\x0C\x70\xFB\x68\x76\x93" | ||
38 | "\x9C\xE6\x16\xCE\x62\x4A\x11\xE0\x08\x6D\x34\x1E\xBC\xAC\xA0\xA1" | ||
39 | "\xF5"; | ||
40 | |||
41 | static unsigned char e[] = "\x11"; | ||
42 | |||
43 | static unsigned char d[] = | ||
44 | "\x0A\x03\x37\x48\x62\x64\x87\x69\x5F\x5F\x30\xBC\x38\xB9\x8B\x44" | ||
45 | "\xC2\xCD\x2D\xFF\x43\x40\x98\xCD\x20\xD8\xA1\x38\xD0\x90\xBF\x64" | ||
46 | "\x79\x7C\x3F\xA7\xA2\xCD\xCB\x3C\xD1\xE0\xBD\xBA\x26\x54\xB4\xF9" | ||
47 | "\xDF\x8E\x8A\xE5\x9D\x73\x3D\x9F\x33\xB3\x01\x62\x4A\xFD\x1D\x51"; | ||
48 | |||
49 | static unsigned char p[] = | ||
50 | "\x00\xD8\x40\xB4\x16\x66\xB4\x2E\x92\xEA\x0D\xA3\xB4\x32\x04\xB5" | ||
51 | "\xCF\xCE\x33\x52\x52\x4D\x04\x16\xA5\xA4\x41\xE7\x00\xAF\x46\x12" | ||
52 | "\x0D"; | ||
53 | |||
54 | static unsigned char q[] = | ||
55 | "\x00\xC9\x7F\xB1\xF0\x27\xF4\x53\xF6\x34\x12\x33\xEA\xAA\xD1\xD9" | ||
56 | "\x35\x3F\x6C\x42\xD0\x88\x66\xB1\xD0\x5A\x0F\x20\x35\x02\x8B\x9D" | ||
57 | "\x89"; | ||
58 | |||
59 | static unsigned char dmp1[] = | ||
60 | "\x59\x0B\x95\x72\xA2\xC2\xA9\xC4\x06\x05\x9D\xC2\xAB\x2F\x1D\xAF" | ||
61 | "\xEB\x7E\x8B\x4F\x10\xA7\x54\x9E\x8E\xED\xF5\xB4\xFC\xE0\x9E\x05"; | ||
62 | |||
63 | static unsigned char dmq1[] = | ||
64 | "\x00\x8E\x3C\x05\x21\xFE\x15\xE0\xEA\x06\xA3\x6F\xF0\xF1\x0C\x99" | ||
65 | "\x52\xC3\x5B\x7A\x75\x14\xFD\x32\x38\xB8\x0A\xAD\x52\x98\x62\x8D" | ||
66 | "\x51"; | ||
67 | |||
68 | static unsigned char iqmp[] = | ||
69 | "\x36\x3F\xF7\x18\x9D\xA8\xE9\x0B\x1D\x34\x1F\x71\xD0\x9B\x76\xA8" | ||
70 | "\xA9\x43\xE1\x1D\x10\xB2\x4D\x24\x9F\x2D\xEA\xFE\xF8\x0C\x18\x26"; | ||
71 | |||
72 | static unsigned char ctext_ex[] = | ||
73 | "\x1b\x8f\x05\xf9\xca\x1a\x79\x52\x6e\x53\xf3\xcc\x51\x4f\xdb\x89" | ||
74 | "\x2b\xfb\x91\x93\x23\x1e\x78\xb9\x92\xe6\x8d\x50\xa4\x80\xcb\x52" | ||
75 | "\x33\x89\x5c\x74\x95\x8d\x5d\x02\xab\x8c\x0f\xd0\x40\xeb\x58\x44" | ||
76 | "\xb0\x05\xc3\x9e\xd8\x27\x4a\x9d\xbf\xa8\x06\x71\x40\x94\x39\xd2"; | ||
77 | |||
78 | SetKey; | ||
79 | } | ||
80 | |||
81 | static int key2(RSA *key, unsigned char *c) | ||
82 | { | ||
83 | static unsigned char n[] = | ||
84 | "\x00\xA3\x07\x9A\x90\xDF\x0D\xFD\x72\xAC\x09\x0C\xCC\x2A\x78\xB8" | ||
85 | "\x74\x13\x13\x3E\x40\x75\x9C\x98\xFA\xF8\x20\x4F\x35\x8A\x0B\x26" | ||
86 | "\x3C\x67\x70\xE7\x83\xA9\x3B\x69\x71\xB7\x37\x79\xD2\x71\x7B\xE8" | ||
87 | "\x34\x77\xCF"; | ||
88 | |||
89 | static unsigned char e[] = "\x3"; | ||
90 | |||
91 | static unsigned char d[] = | ||
92 | "\x6C\xAF\xBC\x60\x94\xB3\xFE\x4C\x72\xB0\xB3\x32\xC6\xFB\x25\xA2" | ||
93 | "\xB7\x62\x29\x80\x4E\x68\x65\xFC\xA4\x5A\x74\xDF\x0F\x8F\xB8\x41" | ||
94 | "\x3B\x52\xC0\xD0\xE5\x3D\x9B\x59\x0F\xF1\x9B\xE7\x9F\x49\xDD\x21" | ||
95 | "\xE5\xEB"; | ||
96 | |||
97 | static unsigned char p[] = | ||
98 | "\x00\xCF\x20\x35\x02\x8B\x9D\x86\x98\x40\xB4\x16\x66\xB4\x2E\x92" | ||
99 | "\xEA\x0D\xA3\xB4\x32\x04\xB5\xCF\xCE\x91"; | ||
100 | |||
101 | static unsigned char q[] = | ||
102 | "\x00\xC9\x7F\xB1\xF0\x27\xF4\x53\xF6\x34\x12\x33\xEA\xAA\xD1\xD9" | ||
103 | "\x35\x3F\x6C\x42\xD0\x88\x66\xB1\xD0\x5F"; | ||
104 | |||
105 | static unsigned char dmp1[] = | ||
106 | "\x00\x8A\x15\x78\xAC\x5D\x13\xAF\x10\x2B\x22\xB9\x99\xCD\x74\x61" | ||
107 | "\xF1\x5E\x6D\x22\xCC\x03\x23\xDF\xDF\x0B"; | ||
108 | |||
109 | static unsigned char dmq1[] = | ||
110 | "\x00\x86\x55\x21\x4A\xC5\x4D\x8D\x4E\xCD\x61\x77\xF1\xC7\x36\x90" | ||
111 | "\xCE\x2A\x48\x2C\x8B\x05\x99\xCB\xE0\x3F"; | ||
112 | |||
113 | static unsigned char iqmp[] = | ||
114 | "\x00\x83\xEF\xEF\xB8\xA9\xA4\x0D\x1D\xB6\xED\x98\xAD\x84\xED\x13" | ||
115 | "\x35\xDC\xC1\x08\xF3\x22\xD0\x57\xCF\x8D"; | ||
116 | |||
117 | static unsigned char ctext_ex[] = | ||
118 | "\x14\xbd\xdd\x28\xc9\x83\x35\x19\x23\x80\xe8\xe5\x49\xb1\x58\x2a" | ||
119 | "\x8b\x40\xb4\x48\x6d\x03\xa6\xa5\x31\x1f\x1f\xd5\xf0\xa1\x80\xe4" | ||
120 | "\x17\x53\x03\x29\xa9\x34\x90\x74\xb1\x52\x13\x54\x29\x08\x24\x52" | ||
121 | "\x62\x51"; | ||
122 | |||
123 | SetKey; | ||
124 | } | ||
125 | |||
126 | static int key3(RSA *key, unsigned char *c) | ||
127 | { | ||
128 | static unsigned char n[] = | ||
129 | "\x00\xBB\xF8\x2F\x09\x06\x82\xCE\x9C\x23\x38\xAC\x2B\x9D\xA8\x71" | ||
130 | "\xF7\x36\x8D\x07\xEE\xD4\x10\x43\xA4\x40\xD6\xB6\xF0\x74\x54\xF5" | ||
131 | "\x1F\xB8\xDF\xBA\xAF\x03\x5C\x02\xAB\x61\xEA\x48\xCE\xEB\x6F\xCD" | ||
132 | "\x48\x76\xED\x52\x0D\x60\xE1\xEC\x46\x19\x71\x9D\x8A\x5B\x8B\x80" | ||
133 | "\x7F\xAF\xB8\xE0\xA3\xDF\xC7\x37\x72\x3E\xE6\xB4\xB7\xD9\x3A\x25" | ||
134 | "\x84\xEE\x6A\x64\x9D\x06\x09\x53\x74\x88\x34\xB2\x45\x45\x98\x39" | ||
135 | "\x4E\xE0\xAA\xB1\x2D\x7B\x61\xA5\x1F\x52\x7A\x9A\x41\xF6\xC1\x68" | ||
136 | "\x7F\xE2\x53\x72\x98\xCA\x2A\x8F\x59\x46\xF8\xE5\xFD\x09\x1D\xBD" | ||
137 | "\xCB"; | ||
138 | |||
139 | static unsigned char e[] = "\x11"; | ||
140 | |||
141 | static unsigned char d[] = | ||
142 | "\x00\xA5\xDA\xFC\x53\x41\xFA\xF2\x89\xC4\xB9\x88\xDB\x30\xC1\xCD" | ||
143 | "\xF8\x3F\x31\x25\x1E\x06\x68\xB4\x27\x84\x81\x38\x01\x57\x96\x41" | ||
144 | "\xB2\x94\x10\xB3\xC7\x99\x8D\x6B\xC4\x65\x74\x5E\x5C\x39\x26\x69" | ||
145 | "\xD6\x87\x0D\xA2\xC0\x82\xA9\x39\xE3\x7F\xDC\xB8\x2E\xC9\x3E\xDA" | ||
146 | "\xC9\x7F\xF3\xAD\x59\x50\xAC\xCF\xBC\x11\x1C\x76\xF1\xA9\x52\x94" | ||
147 | "\x44\xE5\x6A\xAF\x68\xC5\x6C\x09\x2C\xD3\x8D\xC3\xBE\xF5\xD2\x0A" | ||
148 | "\x93\x99\x26\xED\x4F\x74\xA1\x3E\xDD\xFB\xE1\xA1\xCE\xCC\x48\x94" | ||
149 | "\xAF\x94\x28\xC2\xB7\xB8\x88\x3F\xE4\x46\x3A\x4B\xC8\x5B\x1C\xB3" | ||
150 | "\xC1"; | ||
151 | |||
152 | static unsigned char p[] = | ||
153 | "\x00\xEE\xCF\xAE\x81\xB1\xB9\xB3\xC9\x08\x81\x0B\x10\xA1\xB5\x60" | ||
154 | "\x01\x99\xEB\x9F\x44\xAE\xF4\xFD\xA4\x93\xB8\x1A\x9E\x3D\x84\xF6" | ||
155 | "\x32\x12\x4E\xF0\x23\x6E\x5D\x1E\x3B\x7E\x28\xFA\xE7\xAA\x04\x0A" | ||
156 | "\x2D\x5B\x25\x21\x76\x45\x9D\x1F\x39\x75\x41\xBA\x2A\x58\xFB\x65" | ||
157 | "\x99"; | ||
158 | |||
159 | static unsigned char q[] = | ||
160 | "\x00\xC9\x7F\xB1\xF0\x27\xF4\x53\xF6\x34\x12\x33\xEA\xAA\xD1\xD9" | ||
161 | "\x35\x3F\x6C\x42\xD0\x88\x66\xB1\xD0\x5A\x0F\x20\x35\x02\x8B\x9D" | ||
162 | "\x86\x98\x40\xB4\x16\x66\xB4\x2E\x92\xEA\x0D\xA3\xB4\x32\x04\xB5" | ||
163 | "\xCF\xCE\x33\x52\x52\x4D\x04\x16\xA5\xA4\x41\xE7\x00\xAF\x46\x15" | ||
164 | "\x03"; | ||
165 | |||
166 | static unsigned char dmp1[] = | ||
167 | "\x54\x49\x4C\xA6\x3E\xBA\x03\x37\xE4\xE2\x40\x23\xFC\xD6\x9A\x5A" | ||
168 | "\xEB\x07\xDD\xDC\x01\x83\xA4\xD0\xAC\x9B\x54\xB0\x51\xF2\xB1\x3E" | ||
169 | "\xD9\x49\x09\x75\xEA\xB7\x74\x14\xFF\x59\xC1\xF7\x69\x2E\x9A\x2E" | ||
170 | "\x20\x2B\x38\xFC\x91\x0A\x47\x41\x74\xAD\xC9\x3C\x1F\x67\xC9\x81"; | ||
171 | |||
172 | static unsigned char dmq1[] = | ||
173 | "\x47\x1E\x02\x90\xFF\x0A\xF0\x75\x03\x51\xB7\xF8\x78\x86\x4C\xA9" | ||
174 | "\x61\xAD\xBD\x3A\x8A\x7E\x99\x1C\x5C\x05\x56\xA9\x4C\x31\x46\xA7" | ||
175 | "\xF9\x80\x3F\x8F\x6F\x8A\xE3\x42\xE9\x31\xFD\x8A\xE4\x7A\x22\x0D" | ||
176 | "\x1B\x99\xA4\x95\x84\x98\x07\xFE\x39\xF9\x24\x5A\x98\x36\xDA\x3D"; | ||
177 | |||
178 | static unsigned char iqmp[] = | ||
179 | "\x00\xB0\x6C\x4F\xDA\xBB\x63\x01\x19\x8D\x26\x5B\xDB\xAE\x94\x23" | ||
180 | "\xB3\x80\xF2\x71\xF7\x34\x53\x88\x50\x93\x07\x7F\xCD\x39\xE2\x11" | ||
181 | "\x9F\xC9\x86\x32\x15\x4F\x58\x83\xB1\x67\xA9\x67\xBF\x40\x2B\x4E" | ||
182 | "\x9E\x2E\x0F\x96\x56\xE6\x98\xEA\x36\x66\xED\xFB\x25\x79\x80\x39" | ||
183 | "\xF7"; | ||
184 | |||
185 | static unsigned char ctext_ex[] = | ||
186 | "\xb8\x24\x6b\x56\xa6\xed\x58\x81\xae\xb5\x85\xd9\xa2\x5b\x2a\xd7" | ||
187 | "\x90\xc4\x17\xe0\x80\x68\x1b\xf1\xac\x2b\xc3\xde\xb6\x9d\x8b\xce" | ||
188 | "\xf0\xc4\x36\x6f\xec\x40\x0a\xf0\x52\xa7\x2e\x9b\x0e\xff\xb5\xb3" | ||
189 | "\xf2\xf1\x92\xdb\xea\xca\x03\xc1\x27\x40\x05\x71\x13\xbf\x1f\x06" | ||
190 | "\x69\xac\x22\xe9\xf3\xa7\x85\x2e\x3c\x15\xd9\x13\xca\xb0\xb8\x86" | ||
191 | "\x3a\x95\xc9\x92\x94\xce\x86\x74\x21\x49\x54\x61\x03\x46\xf4\xd4" | ||
192 | "\x74\xb2\x6f\x7c\x48\xb4\x2e\xe6\x8e\x1f\x57\x2a\x1f\xc4\x02\x6a" | ||
193 | "\xc4\x56\xb4\xf5\x9f\x7b\x62\x1e\xa1\xb9\xd8\x8f\x64\x20\x2f\xb1"; | ||
194 | |||
195 | SetKey; | ||
196 | } | ||
197 | |||
198 | static int pad_unknown(void) | ||
199 | { | ||
200 | unsigned long l; | ||
201 | while ((l = ERR_get_error()) != 0) | ||
202 | if (ERR_GET_REASON(l) == RSA_R_UNKNOWN_PADDING_TYPE) | ||
203 | return(1); | ||
204 | return(0); | ||
205 | } | ||
206 | |||
207 | static const char rnd_seed[] = "string to make the random number generator think it has entropy"; | ||
208 | |||
209 | int main(int argc, char *argv[]) | ||
210 | { | ||
211 | int err=0; | ||
212 | int v; | ||
213 | RSA *key; | ||
214 | unsigned char ptext[256]; | ||
215 | unsigned char ctext[256]; | ||
216 | static unsigned char ptext_ex[] = "\x54\x85\x9b\x34\x2c\x49\xea\x2a"; | ||
217 | unsigned char ctext_ex[256]; | ||
218 | int plen; | ||
219 | int clen = 0; | ||
220 | int num; | ||
221 | |||
222 | RAND_seed(rnd_seed, sizeof rnd_seed); /* or OAEP may fail */ | ||
223 | |||
224 | CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); | ||
225 | |||
226 | plen = sizeof(ptext_ex) - 1; | ||
227 | |||
228 | for (v = 0; v < 3; v++) | ||
229 | { | ||
230 | key = RSA_new(); | ||
231 | switch (v) { | ||
232 | case 0: | ||
233 | clen = key1(key, ctext_ex); | ||
234 | break; | ||
235 | case 1: | ||
236 | clen = key2(key, ctext_ex); | ||
237 | break; | ||
238 | case 2: | ||
239 | clen = key3(key, ctext_ex); | ||
240 | break; | ||
241 | } | ||
242 | |||
243 | num = RSA_public_encrypt(plen, ptext_ex, ctext, key, | ||
244 | RSA_PKCS1_PADDING); | ||
245 | if (num != clen) | ||
246 | { | ||
247 | printf("PKCS#1 v1.5 encryption failed!\n"); | ||
248 | err=1; | ||
249 | goto oaep; | ||
250 | } | ||
251 | |||
252 | num = RSA_private_decrypt(num, ctext, ptext, key, | ||
253 | RSA_PKCS1_PADDING); | ||
254 | if (num != plen || memcmp(ptext, ptext_ex, num) != 0) | ||
255 | { | ||
256 | printf("PKCS#1 v1.5 decryption failed!\n"); | ||
257 | err=1; | ||
258 | } | ||
259 | else | ||
260 | printf("PKCS #1 v1.5 encryption/decryption ok\n"); | ||
261 | |||
262 | oaep: | ||
263 | ERR_clear_error(); | ||
264 | num = RSA_public_encrypt(plen, ptext_ex, ctext, key, | ||
265 | RSA_PKCS1_OAEP_PADDING); | ||
266 | if (num == -1 && pad_unknown()) | ||
267 | { | ||
268 | printf("No OAEP support\n"); | ||
269 | goto next; | ||
270 | } | ||
271 | if (num != clen) | ||
272 | { | ||
273 | printf("OAEP encryption failed!\n"); | ||
274 | err=1; | ||
275 | goto next; | ||
276 | } | ||
277 | |||
278 | num = RSA_private_decrypt(num, ctext, ptext, key, | ||
279 | RSA_PKCS1_OAEP_PADDING); | ||
280 | if (num != plen || memcmp(ptext, ptext_ex, num) != 0) | ||
281 | { | ||
282 | printf("OAEP decryption (encrypted data) failed!\n"); | ||
283 | err=1; | ||
284 | } | ||
285 | else if (memcmp(ctext, ctext_ex, num) == 0) | ||
286 | { | ||
287 | printf("OAEP test vector %d passed!\n", v); | ||
288 | goto next; | ||
289 | } | ||
290 | |||
291 | /* Different ciphertexts (rsa_oaep.c without -DPKCS_TESTVECT). | ||
292 | Try decrypting ctext_ex */ | ||
293 | |||
294 | num = RSA_private_decrypt(clen, ctext_ex, ptext, key, | ||
295 | RSA_PKCS1_OAEP_PADDING); | ||
296 | |||
297 | if (num != plen || memcmp(ptext, ptext_ex, num) != 0) | ||
298 | { | ||
299 | printf("OAEP decryption (test vector data) failed!\n"); | ||
300 | err=1; | ||
301 | } | ||
302 | else | ||
303 | printf("OAEP encryption/decryption ok\n"); | ||
304 | next: | ||
305 | RSA_free(key); | ||
306 | } | ||
307 | |||
308 | ERR_remove_state(0); | ||
309 | |||
310 | CRYPTO_mem_leaks_fp(stdout); | ||
311 | |||
312 | return err; | ||
313 | } | ||
314 | #endif | ||