]>
git.saurik.com Git - apple/network_cmds.git/blob - eaytest.tproj/eaytest.c
0f046d437b9f866a7132881348ab3e762295741a
1 /* $KAME: eaytest.c,v 1.38 2001/11/16 04:12:59 sakane Exp $ */
4 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the project nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 #include <sys/types.h>
34 #include <sys/socket.h>
36 #include <netinet/in.h>
47 #include <openssl/bio.h>
48 #include <openssl/pem.h>
58 #include "crypto_openssl.h"
60 #define PVDUMP(var) hexdump((var)->v, (var)->l)
62 u_int32_t loglevel
= 4;
66 void rsatest
__P((int, char **));
67 static vchar_t
*pem_read_buf
__P((char *));
68 void certtest
__P((int, char **));
69 static char **getcerts
__P((char *));
70 void ciphertest
__P((int, char **));
71 void hmactest
__P((int, char **));
72 void sha2test
__P((int, char **));
73 void sha1test
__P((int, char **));
74 void md5test
__P((int, char **));
75 void dhtest
__P((int, char **));
76 void bntest
__P((int, char **));
77 void Usage
__P((void));
86 char *text
= "this is test.";
88 vchar_t
*priv
, *pub
, *sig
;
92 "-----BEGIN RSA PRIVATE KEY-----\n"
93 "MIICXQIBAAKBgQChe5/Fzk9SA0vCKBOcu9jBcLb9oLv50PeuEfQojhakY+OH8A3Q\n"
94 "M8A0qIDG6uhTNGPvzCWb/+mKeOB48n5HJpLxlDFyP3kyd2yXHIZ/MN8g1nh4FsB0\n"
95 "iTkk8QUCJkkan6FCOBrIeLEsGA5AdodzuR+khnCMt8vO+NFHZYKAQeynyQIDAQAB\n"
96 "AoGAOfDcnCHxjhDGrwyoNNWl6Yqi7hAtQm67YAbrH14UO7nnmxAENM9MyNgpFLaW\n"
97 "07v5m8IZQIcradcDXAJOUwNBN8E06UflwEYCaScIwndvr5UpVlN3e2NC6Wyg2yC7\n"
98 "GarxQput3zj35XNR5bK42UneU0H6zDxpHWqI1SwE+ToAHu0CQQDNl9gUJTpg0L09\n"
99 "HkbE5jeb8bA5I20nKqBOBP0v5tnzpwu41umQwk9I7Ru0ucD7j+DW4k8otadW+FnI\n"
100 "G1M1MpSjAkEAyRMt4bN8otfpOpsOQWzw4jQtouohOxRFCrQTntHhU20PrQnQLZWs\n"
101 "pOVzqCjRytYtkPEUA1z8QK5gGcVPcOQsowJBALmt2rwPB1NrEo5Bat7noO+Zb3Ob\n"
102 "WDiYWeE8xkHd95gDlSWiC53ur9aINo6ZeP556jGIgL+el/yHHecJLrQL84sCQH48\n"
103 "zUxq/C/cb++8UzneJGlPqusiJNTLiAENR1gpmlZfHT1c8Nb9phMsfu0vG29GAfuC\n"
104 "bzchVLljALCNQK+2gRMCQQCNIgN+R9mRWZhFAcC1sq++YnuSBlw4VwdL/fd1Yg9e\n"
105 "Ul+U98yPl/NXt8Rs4TRBFcOZjkFI8xv0hQtevTgTmgz+\n"
106 "-----END RSA PRIVATE KEY-----\n\n";
108 "-----BEGIN PUBLIC KEY-----\n"
109 "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChe5/Fzk9SA0vCKBOcu9jBcLb9\n"
110 "oLv50PeuEfQojhakY+OH8A3QM8A0qIDG6uhTNGPvzCWb/+mKeOB48n5HJpLxlDFy\n"
111 "P3kyd2yXHIZ/MN8g1nh4FsB0iTkk8QUCJkkan6FCOBrIeLEsGA5AdodzuR+khnCM\n"
112 "t8vO+NFHZYKAQeynyQIDAQAB\n"
113 "-----END PUBLIC KEY-----\n\n";
115 priv
= pem_read_buf(pkcs1
);
118 src
.l
= strlen(text
);
121 sig
= eay_rsa_sign(&src
, priv
);
123 printf("sign failed. %s\n", eay_strerror());
124 printf("RSA signed data.\n");
128 pub
= pem_read_buf(pubkey
);
129 error
= eay_rsa_verify(&src
, sig
, pub
);
131 printf("verifying failed.\n");
133 printf("verified.\n");
141 char *nm
= NULL
, *header
= NULL
;
142 unsigned char *data
= NULL
;
147 bio
= BIO_new_mem_buf(buf
, strlen(buf
));
148 error
= PEM_read_bio(bio
, &nm
, &header
, &data
, &len
);
150 errx(1, "%s", eay_strerror());
154 memcpy(ret
->v
, data
, len
);
169 printf("\n**Test for Certificate.**\n");
172 char dnstr
[] = "C=JP, ST=Kanagawa, L=Fujisawa, O=WIDE Project, OU=KAME Project, CN=Shoichi Sakane/Email=sakane@kame.net";
173 vchar_t
*asn1dn
= NULL
, asn1dn0
;
175 0x30,0x81,0x9a,0x31,0x0b,0x30,0x09,0x06,
176 0x03,0x55,0x04,0x06,0x13,0x02,0x4a,0x50,
177 0x31,0x11,0x30,0x0f,0x06,0x03,0x55,0x04,
178 0x08,0x13,0x08,0x4b,0x61,0x6e,0x61,0x67,
179 0x61,0x77,0x61,0x31,0x11,0x30,0x0f,0x06,
180 0x03,0x55,0x04,0x07,0x13,0x08,0x46,0x75,
181 0x6a,0x69,0x73,0x61,0x77,0x61,0x31,0x15,
182 0x30,0x13,0x06,0x03,0x55,0x04,0x0a,0x13,
183 0x0c,0x57,0x49,0x44,0x45,0x20,0x50,0x72,
184 0x6f,0x6a,0x65,0x63,0x74,0x31,0x15,0x30,
185 0x13,0x06,0x03,0x55,0x04,0x0b,0x13,0x0c,
186 0x4b,0x41,0x4d,0x45,0x20,0x50,0x72,0x6f,
187 0x6a,0x65,0x63,0x74,0x31,0x17,0x30,0x15,
188 0x06,0x03,0x55,0x04,0x03,0x13,0x0e,0x53,
189 0x68,0x6f,0x69,0x63,0x68,0x69,0x20,0x53,
190 0x61,0x6b,0x61,0x6e,0x65,0x31,0x1e,0x30,
191 0x1c,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,
195 0x6b,0x61,0x6e,0x65,0x40,0x6b,0x61,0x6d,
196 0x65,0x2e,0x6e,0x65,0x74,
199 printf("check to convert the string into subjectName.\n");
200 printf("%s\n", dnstr
);
203 asn1dn0
.l
= sizeof(dn0
);
205 asn1dn
= eay_str2asn1dn(dnstr
, sizeof(dnstr
));
206 if (asn1dn
== NULL
|| asn1dn
->l
!= asn1dn0
.l
)
207 errx(1, "asn1dn length mismatched.\n");
210 * NOTE: The value pointed by "<==" above is different from the
211 * return of eay_str2asn1dn(). but eay_cmp_asn1dn() can distinguish
212 * both of the names are same name.
214 if (eay_cmp_asn1dn(&asn1dn0
, asn1dn
))
215 errx(1, "asn1dn mismatched.\n");
218 printf("succeed.\n");
225 certpath
= *(av
+ 1);
226 certs
= getcerts(certpath
);
228 printf("\nCAUTION: These certificates are probably invalid "
229 "on your environment because you don't have their "
230 "issuer's certs in your environment.\n\n");
232 certpath
= "/usr/local/openssl/certs";
233 certs
= getcerts(NULL
);
236 while (*certs
!= NULL
) {
242 printf("===CERT===\n");
245 c
.l
= strlen(*certs
);
248 str
= eay_get_x509text(&c
);
252 /* print ASN.1 of subject name */
253 vstr
= eay_get_x509asn1subjectname(&c
);
260 /* print subject alt name */
263 for (pos
= 1; ; pos
++) {
264 error
= eay_get_x509subjectaltname(&c
, &str
, &type
, pos
);
266 printf("no subjectaltname found.\n");
271 printf("SubjectAltName: %d: %s\n", type
, str
);
276 error
= eay_check_x509cert(&c
, certpath
);
278 printf("ERROR: cert is invalid.\n");
289 char **certs
= NULL
, **p
;
298 static char *samplecerts
[] = {
300 "-----BEGIN CERTIFICATE-----\n"
301 "MIICpTCCAg4CAQAwDQYJKoZIhvcNAQEEBQAwgZoxCzAJBgNVBAYTAkpQMREwDwYD\n"
302 "VQQIEwhLYW5hZ2F3YTERMA8GA1UEBxMIRnVqaXNhd2ExFTATBgNVBAoTDFdJREUg\n"
303 "UHJvamVjdDEVMBMGA1UECxMMS0FNRSBQcm9qZWN0MRcwFQYDVQQDEw5TaG9pY2hp\n"
304 "IFNha2FuZTEeMBwGCSqGSIb3DQEJARYPc2FrYW5lQGthbWUubmV0MB4XDTAwMDgy\n"
305 "NDAxMzc0NFoXDTAwMDkyMzAxMzc0NFowgZoxCzAJBgNVBAYTAkpQMREwDwYDVQQI\n"
306 "EwhLYW5hZ2F3YTERMA8GA1UEBxMIRnVqaXNhd2ExFTATBgNVBAoTDFdJREUgUHJv\n"
307 "amVjdDEVMBMGA1UECxMMS0FNRSBQcm9qZWN0MRcwFQYDVQQDEw5TaG9pY2hpIFNh\n"
308 "a2FuZTEeMBwGCSqGSIb3DQEJARYPc2FrYW5lQGthbWUubmV0MIGfMA0GCSqGSIb3\n"
309 "DQEBAQUAA4GNADCBiQKBgQCpIQG/H3zn4czAmPBcbkDrYxE1A9vcpghpib3Of0Op\n"
310 "SsiWIBOyIMiVAzK/I/JotWp3Vdn5fzGp/7DGAbWXAALas2xHkNmTMPpu6qhmNQ57\n"
311 "kJHZHal24mgc1hwbrI9fb5olvIexx9a1riNPnKMRVHzXYizsyMbf+lJJmZ8QFhWN\n"
312 "twIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACKs6X/BYycuHI3iop403R3XWMHHnNBN\n"
313 "5XTHVWiWgR1cMWkq/dp51gn+nPftpdAaYGpqGkiHGhZcXLoBaX9uON3p+7av+sQN\n"
314 "plXwnvUf2Zsgu+fojskS0gKcDlYiq1O8TOaBgJouFZgr1q6PiYjVEJGogAP28+HN\n"
316 "-----END CERTIFICATE-----\n\n",
317 /* signed by SSH testing CA + CA1 + CA2 */
318 "-----BEGIN X509 CERTIFICATE-----\n"
319 "MIICtTCCAj+gAwIBAgIEOaR8NjANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJG\n"
320 "STEkMCIGA1UEChMbU1NIIENvbW11bmljYXRpb25zIFNlY3VyaXR5MREwDwYDVQQL\n"
321 "EwhXZWIgdGVzdDEbMBkGA1UEAxMSVGVzdCBDQSAxIHN1YiBjYSAyMB4XDTAwMDgy\n"
322 "NDAwMDAwMFoXDTAwMTAwMTAwMDAwMFowgZoxCzAJBgNVBAYTAkpQMREwDwYDVQQI\n"
323 "EwhLYW5hZ2F3YTERMA8GA1UEBxMIRnVqaXNhd2ExFTATBgNVBAoTDFdJREUgUHJv\n"
324 "amVjdDEVMBMGA1UECxMMS0FNRSBQcm9qZWN0MRcwFQYDVQQDEw5TaG9pY2hpIFNh\n"
325 "a2FuZTEeMBwGCSqGSIb3DQEJAQwPc2FrYW5lQGthbWUubmV0MIGfMA0GCSqGSIb3\n"
326 "DQEBAQUAA4GNADCBiQKBgQCpIQG/H3zn4czAmPBcbkDrYxE1A9vcpghpib3Of0Op\n"
327 "SsiWIBOyIMiVAzK/I/JotWp3Vdn5fzGp/7DGAbWXAALas2xHkNmTMPpu6qhmNQ57\n"
328 "kJHZHal24mgc1hwbrI9fb5olvIexx9a1riNPnKMRVHzXYizsyMbf+lJJmZ8QFhWN\n"
329 "twIDAQABo18wXTALBgNVHQ8EBAMCBaAwGgYDVR0RBBMwEYEPc2FrYW5lQGthbWUu\n"
330 "bmV0MDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9sZGFwLnNzaC5maS9jcmxzL2Nh\n"
331 "MS0yLmNybDANBgkqhkiG9w0BAQUFAANhADtaqual41OWshF/rwCTuR6zySBJysGp\n"
332 "+qjkp5efCiYKhAu1L4WXlMsV/SNdzspui5tHasPBvUw8gzFsU/VW/B2zuQZkimf1\n"
333 "u6ZPjUb/vt8vLOPScP5MeH7xrTk9iigsqQ==\n"
334 "-----END X509 CERTIFICATE-----\n\n",
336 "-----BEGIN CERTIFICATE-----\n"
337 "MIICXzCCAcigAwIBAgIEOXGBIzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJG\n"
338 "STEkMCIGA1UEChMbU1NIIENvbW11bmljYXRpb25zIFNlY3VyaXR5MREwDwYDVQQL\n"
339 "EwhXZWIgdGVzdDESMBAGA1UEAxMJVGVzdCBDQSAxMB4XDTAwMDcxNjAwMDAwMFoX\n"
340 "DTAwMDkwMTAwMDAwMFowNTELMAkGA1UEBhMCanAxETAPBgNVBAoTCHRhaGl0ZXN0\n"
341 "MRMwEQYDVQQDEwpmdXJ1a2F3YS0xMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKB\n"
342 "gQDUmI2RaAuoLvtRDbASwRhbkj/Oq0BBIKgAqbFknc/EanJSQwZQu82gD88nf7gG\n"
343 "VEioWmKPLDuEjz5JCuM+k5f7HYHI1wWmz1KFr7UA+avZm4Kp6YKnhuH7soZp7kBL\n"
344 "hTiZEpL0jdmCWLW3ZXoro55rmPrBsCd+bt8VU6tRZm5dUwIBKaNZMFcwCwYDVR0P\n"
345 "BAQDAgWgMBYGA1UdEQQPMA2CBVZQMTAwhwQKFIaFMDAGA1UdHwQpMCcwJaAjoCGG\n"
346 "H2h0dHA6Ly9sZGFwLnNzaC5maS9jcmxzL2NhMS5jcmwwDQYJKoZIhvcNAQEFBQAD\n"
347 "gYEAKJ/2Co/KYW65mwpGG3CBvsoRL8xyUMHGt6gQpFLHiiHuAdix1ADTL6uoFuYi\n"
348 "4sE5omQm1wKVv2ZhS03zDtUfKoVEv0HZ7IY3AU/FZT/M5gQvbt43Dki/ma3ock2I\n"
349 "PPhbLsvXm+GCVh3jvkYGk1zr7VERVeTPtmT+hW63lcxfFp4=\n"
350 "-----END CERTIFICATE-----\n\n",
352 "-----BEGIN CERTIFICATE-----\n"
353 "MIIEFTCCA7+gAwIBAgIKYU5X6AAAAAAACTANBgkqhkiG9w0BAQUFADCBljEpMCcG\n"
354 "CSqGSIb3DQEJARYaeS13YXRhbmFAc2RsLmhpdGFjaGkuY28uanAxCzAJBgNVBAYT\n"
355 "AkpQMREwDwYDVQQIEwhLQU5BR0FXQTERMA8GA1UEBxMIWW9rb2hhbWExEDAOBgNV\n"
356 "BAoTB0hJVEFDSEkxDDAKBgNVBAsTA1NETDEWMBQGA1UEAxMNSVBzZWMgVGVzdCBD\n"
357 "QTAeFw0wMDA3MTUwMjUxNDdaFw0wMTA3MTUwMzAxNDdaMEUxCzAJBgNVBAYTAkpQ\n"
358 "MREwDwYDVQQIEwhLQU5BR0FXQTEQMA4GA1UEChMHSElUQUNISTERMA8GA1UEAxMI\n"
359 "V0FUQU5BQkUwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA6Wja5A7Ldzrtx+rMWHEB\n"
360 "Cyt+/ZoG0qdFQbuuUiU1vOSq+1f+ZSCYAdTq13Lrr6Xfz3jDVFEZLPID9PSTFwq+\n"
361 "yQIDAQABo4ICPTCCAjkwDgYDVR0PAQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUF\n"
362 "CAICMB0GA1UdDgQWBBTkv7/MH5Ra+S1zBAmnUIH5w8ZTUTCB0gYDVR0jBIHKMIHH\n"
363 "gBQsF2qoaTl5F3GFLKrttaxPJ8j4faGBnKSBmTCBljEpMCcGCSqGSIb3DQEJARYa\n"
364 "eS13YXRhbmFAc2RsLmhpdGFjaGkuY28uanAxCzAJBgNVBAYTAkpQMREwDwYDVQQI\n"
365 "EwhLQU5BR0FXQTERMA8GA1UEBxMIWW9rb2hhbWExEDAOBgNVBAoTB0hJVEFDSEkx\n"
366 "DDAKBgNVBAsTA1NETDEWMBQGA1UEAxMNSVBzZWMgVGVzdCBDQYIQeccIf4GYDIBA\n"
367 "rS6HSUt8XjB7BgNVHR8EdDByMDagNKAyhjBodHRwOi8vZmxvcmEyMjAvQ2VydEVu\n"
368 "cm9sbC9JUHNlYyUyMFRlc3QlMjBDQS5jcmwwOKA2oDSGMmZpbGU6Ly9cXGZsb3Jh\n"
369 "MjIwXENlcnRFbnJvbGxcSVBzZWMlMjBUZXN0JTIwQ0EuY3JsMIGgBggrBgEFBQcB\n"
370 "AQSBkzCBkDBFBggrBgEFBQcwAoY5aHR0cDovL2Zsb3JhMjIwL0NlcnRFbnJvbGwv\n"
371 "ZmxvcmEyMjBfSVBzZWMlMjBUZXN0JTIwQ0EuY3J0MEcGCCsGAQUFBzAChjtmaWxl\n"
372 "Oi8vXFxmbG9yYTIyMFxDZXJ0RW5yb2xsXGZsb3JhMjIwX0lQc2VjJTIwVGVzdCUy\n"
373 "MENBLmNydDANBgkqhkiG9w0BAQUFAANBAG8yZAWHb6g3zba453Hw5loojVDZO6fD\n"
374 "9lCsyaxeo9/+7x1JEEcdZ6qL7KKqe7ZBwza+hIN0ITkp2WEWo22gTz4=\n"
375 "-----END CERTIFICATE-----\n\n",
377 "-----BEGIN CERTIFICATE-----\n"
378 "MIIDXTCCAsagAwIBAgIEOb6khTANBgkqhkiG9w0BAQUFADA4MQswCQYDVQQGEwJV\n"
379 "UzEQMA4GA1UEChMHRW50cnVzdDEXMBUGA1UECxMOVlBOIEludGVyb3AgUk8wHhcN\n"
380 "MDAwOTE4MjMwMDM3WhcNMDMwOTE4MjMzMDM3WjBTMQswCQYDVQQGEwJVUzEQMA4G\n"
381 "A1UEChMHRW50cnVzdDEXMBUGA1UECxMOVlBOIEludGVyb3AgUk8xGTAXBgNVBAMT\n"
382 "EFNob2ljaGkgU2FrYW5lIDIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKj3\n"
383 "eXSt1qXxFXzpa265B/NQYk5BZN7pNJg0tlTKBTVV3UgpQ92Bx5DoNfZh11oIv0Sw\n"
384 "6YnG5p9F9ma36U9HDoD3hVTjAvQKy4ssCsnU1y6v5XOU1QvYQo6UTzgsXUTaIau4\n"
385 "Lrccl+nyoiNzy3lG51tLR8CxuA+3OOAK9xPjszClAgMBAAGjggFXMIIBUzBABgNV\n"
386 "HREEOTA3gQ9zYWthbmVAa2FtZS5uZXSHBM6vIHWCHjIwNi0xNzUtMzItMTE3LnZw\n"
387 "bndvcmtzaG9wLmNvbTATBgNVHSUEDDAKBggrBgEFBQgCAjALBgNVHQ8EBAMCAKAw\n"
388 "KwYDVR0QBCQwIoAPMjAwMDA5MTgyMzAwMzdagQ8yMDAyMTAyNTExMzAzN1owWgYD\n"
389 "VR0fBFMwUTBPoE2gS6RJMEcxCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFbnRydXN0\n"
390 "MRcwFQYDVQQLEw5WUE4gSW50ZXJvcCBSTzENMAsGA1UEAxMEQ1JMMTAfBgNVHSME\n"
391 "GDAWgBTzVmhu0tBoWKwkZE5mXpooE9630DAdBgNVHQ4EFgQUEgBHPtXggJqei5Xz\n"
392 "92CrWXTJxfAwCQYDVR0TBAIwADAZBgkqhkiG9n0HQQAEDDAKGwRWNS4wAwIEsDAN\n"
393 "BgkqhkiG9w0BAQUFAAOBgQCIFriNGMUE8GH5LuDrTJfA8uGx8vLy2seljuo694TR\n"
394 "et/ojp9QnfOJ1PF9iAdGaEaSLfkwhY4fZNZzxic5HBoHLeo9BXLP7i7FByXjvOZC\n"
395 "Y8++0dC8NVvendIILcJBM5nbDq1TqIbb8K3SP80XhO5JLVJkoZiQftAMjo0peZPO\n"
397 "-----END CERTIFICATE-----\n\n",
402 return (char **)&samplecerts
;
405 if (!(sb
.st_mode
& S_IFDIR
)) {
406 printf("ERROR: %s is not directory.\n", path
);
410 dirp
= opendir(path
);
412 printf("opendir failed.\n");
417 while ((dp
= readdir(dirp
)) != NULL
) {
418 if (dp
->d_type
!= DT_REG
)
420 if (strcmp(dp
->d_name
+ dp
->d_namlen
- 4, "cert"))
422 snprintf(buf
, sizeof(buf
), "%s/%s", path
, dp
->d_name
);
425 p
= (char **)realloc(certs
, (n
+ 1) * sizeof(certs
));
430 certs
[n
] = malloc(sb
.st_size
+ 1);
431 if (certs
[n
] == NULL
)
434 fd
= open(buf
, O_RDONLY
);
437 len
= read(fd
, certs
[n
], sb
.st_size
);
440 if (len
!= sb
.st_size
)
441 errx(1, "read: length mismatch");
442 certs
[n
][sb
.st_size
] = '\0';
445 printf("%s: %d\n", dp
->d_name
, (int)sb
.st_size
);
450 p
= (char **)realloc(certs
, (n
+ 1) * sizeof(certs
));
467 vchar_t
*res1
, *res2
, *iv
;
469 printf("\n**Test for CIPHER.**\n");
472 06000017 03000000 73616b61 6e65406b 616d652e 6e657409 0002c104 308202b8 \
475 key
.v
= str2val("f59bd70f 81b9b9cc 2a32c7fd 229a4b37", 16, &key
.l
);
476 iv0
.v
= str2val("26b68c90 9467b4ab 7ec29fa0 0b696b55", 16, &iv0
.l
);
485 memcpy(iv
->v
, iv0
.v
, 8);
486 res1
= eay_des_encrypt(&data
, &key
, iv
);
487 printf("encrypto:\n");
490 memcpy(iv
->v
, iv0
.v
, 8);
491 res2
= eay_des_decrypt(res1
, &key
, iv
);
492 printf("decrypto:\n");
495 if (memcmp(data
.v
, res2
->v
, data
.l
))
496 printf("XXX NG XXX\n");
500 #ifdef HAVE_OPENSSL_IDEA_H
506 memcpy(iv
->v
, iv0
.v
, 8);
507 res1
= eay_idea_encrypt(&data
, &key
, iv
);
508 printf("encrypto:\n");
511 memcpy(iv
->v
, iv0
.v
, 8);
512 res2
= eay_idea_decrypt(res1
, &key
, iv
);
513 printf("decrypto:\n");
516 if (memcmp(data
.v
, res2
->v
, data
.l
))
517 printf("XXX NG XXX\n");
523 printf("BLOWFISH\n");
527 memcpy(iv
->v
, iv0
.v
, 8);
528 res1
= eay_bf_encrypt(&data
, &key
, iv
);
529 printf("encrypto:\n");
532 memcpy(iv
->v
, iv0
.v
, 8);
533 res2
= eay_bf_decrypt(res1
, &key
, iv
);
534 printf("decrypto:\n");
537 if (memcmp(data
.v
, res2
->v
, data
.l
))
538 printf("XXX NG XXX\n");
542 #ifdef HAVE_OPENSSL_RC5_H
548 memcpy(iv
->v
, iv0
.v
, 8);
549 res1
= eay_bf_encrypt(&data
, &key
, iv
);
550 printf("encrypto:\n");
553 memcpy(iv
->v
, iv0
.v
, 8);
554 res2
= eay_bf_decrypt(res1
, &key
, iv
);
555 printf("decrypto:\n");
558 if (memcmp(data
.v
, res2
->v
, data
.l
))
559 printf("XXX NG XXX\n");
569 memcpy(iv
->v
, iv0
.v
, 8);
570 res1
= eay_3des_encrypt(&data
, &key
, iv
);
571 printf("encrypto:\n");
575 memcpy(iv
->v
, iv0
.v
, 8);
576 res2
= eay_3des_decrypt(res1
, &key
, iv
);
577 printf("decrypto:\n");
581 if (res2
&& memcmp(data
.v
, res2
->v
, data
.l
))
582 printf("XXX NG XXX\n");
591 memcpy(iv
->v
, iv0
.v
, 8);
592 res1
= eay_cast_encrypt(&data
, &key
, iv
);
593 printf("encrypto:\n");
596 memcpy(iv
->v
, iv0
.v
, 8);
597 res2
= eay_cast_decrypt(res1
, &key
, iv
);
598 printf("decrypto:\n");
601 if (memcmp(data
.v
, res2
->v
, data
.l
))
602 printf("XXX NG XXX\n");
607 iv
= vrealloc(iv
, 16);
615 int padlen
= 16 - data
.l
% 16;
616 buf
= vmalloc(data
.l
+ padlen
);
617 memcpy(buf
->v
, data
.v
, data
.l
);
619 memcpy(iv
->v
, iv0
.v
, 16);
620 res1
= eay_aes_encrypt(buf
, &key
, iv
);
621 printf("encrypto:\n");
624 memcpy(iv
->v
, iv0
.v
, 16);
625 res2
= eay_aes_decrypt(res1
, &key
, iv
);
626 printf("decrypto:\n");
629 if (memcmp(data
.v
, res2
->v
, data
.l
))
630 printf("XXX NG XXX\n");
641 char *keyword
= "hehehe test secret!";
642 char *object
= "d7e6a6c1876ef0488bb74958b9fee94e";
643 char *object1
= "d7e6a6c1876ef048";
644 char *object2
= "8bb74958b9fee94e";
645 char *r_hmd5
= "5702d7d1 fd1bfc7e 210fc9fa cda7d02c";
646 char *r_hsha1
= "309999aa 9779a43e ebdea839 1b4e7ee1 d8646874";
647 char *r_hsha2
= "d47262d8 a5b6f39d d8686939 411b3e79 ed2e27f9 2c4ea89f dd0a06ae 0c0aa396";
648 vchar_t
*key
, *data
, *data1
, *data2
, *res
;
652 printf("\n**Test for HMAC MD5 & SHA1.**\n");
654 key
= vmalloc(strlen(keyword
));
655 memcpy(key
->v
, keyword
, key
->l
);
657 data
= vmalloc(strlen(object
));
658 data1
= vmalloc(strlen(object1
));
659 data2
= vmalloc(strlen(object2
));
660 memcpy(data
->v
, object
, data
->l
);
661 memcpy(data1
->v
, object1
, data1
->l
);
662 memcpy(data2
->v
, object2
, data2
->l
);
665 printf("HMAC MD5 by eay_hmacmd5_one()\n");
666 res
= eay_hmacmd5_one(key
, data
);
668 mod
.v
= str2val(r_hmd5
, 16, &mod
.l
);
669 if (memcmp(res
->v
, mod
.v
, mod
.l
))
670 printf(" XXX NG XXX\n");
675 printf("HMAC MD5 by eay_hmacmd5_xxx()\n");
676 ctx
= eay_hmacmd5_init(key
);
677 eay_hmacmd5_update(ctx
, data1
);
678 eay_hmacmd5_update(ctx
, data2
);
679 res
= eay_hmacmd5_final(ctx
);
681 mod
.v
= str2val(r_hmd5
, 16, &mod
.l
);
682 if (memcmp(res
->v
, mod
.v
, mod
.l
))
683 printf(" XXX NG XXX\n");
688 printf("HMAC SHA2 by eay_hmacsha2_256_one()\n");
689 res
= eay_hmacsha2_256_one(key
, data
);
691 mod
.v
= str2val(r_hsha2
, 16, &mod
.l
);
692 if (memcmp(res
->v
, mod
.v
, mod
.l
))
693 printf(" XXX NG XXX\n");
698 printf("HMAC SHA1 by eay_hmacsha1_one()\n");
699 res
= eay_hmacsha1_one(key
, data
);
701 mod
.v
= str2val(r_hsha1
, 16, &mod
.l
);
702 if (memcmp(res
->v
, mod
.v
, mod
.l
))
703 printf(" XXX NG XXX\n");
708 printf("HMAC SHA1 by eay_hmacsha1_xxx()\n");
709 ctx
= eay_hmacsha1_init(key
);
710 eay_hmacsha1_update(ctx
, data1
);
711 eay_hmacsha1_update(ctx
, data2
);
712 res
= eay_hmacsha1_final(ctx
);
714 mod
.v
= str2val(r_hsha1
, 16, &mod
.l
);
715 if (memcmp(res
->v
, mod
.v
, mod
.l
))
716 printf(" XXX NG XXX\n");
731 char *word1
= "1234567890", *word2
= "12345678901234567890";
735 printf("\n**Test for SHA1.**\n");
737 ctx
= eay_sha1_init();
738 buf
= vmalloc(strlen(word1
));
739 memcpy(buf
->v
, word1
, buf
->l
);
740 eay_sha1_update(ctx
, buf
);
741 eay_sha1_update(ctx
, buf
);
742 res
= eay_sha1_final(ctx
);
747 ctx
= eay_sha1_init();
748 buf
= vmalloc(strlen(word2
));
749 memcpy(buf
->v
, word2
, buf
->l
);
750 eay_sha1_update(ctx
, buf
);
751 res
= eay_sha1_final(ctx
);
755 res
= eay_sha1_one(buf
);
766 char *word1
= "1234567890", *word2
= "12345678901234567890";
770 printf("\n**Test for MD5.**\n");
772 ctx
= eay_md5_init();
773 buf
= vmalloc(strlen(word1
));
774 memcpy(buf
->v
, word1
, buf
->l
);
775 eay_md5_update(ctx
, buf
);
776 eay_md5_update(ctx
, buf
);
777 res
= eay_md5_final(ctx
);
782 ctx
= eay_md5_init();
783 buf
= vmalloc(strlen(word2
));
784 memcpy(buf
->v
, word2
, buf
->l
);
785 eay_md5_update(ctx
, buf
);
786 res
= eay_md5_final(ctx
);
790 res
= eay_md5_one(buf
);
805 { "modp768", OAKLEY_PRIME_MODP768
, },
806 { "modp1024", OAKLEY_PRIME_MODP1024
, },
807 { "modp1536", OAKLEY_PRIME_MODP1536
, },
808 { "modp2048", OAKLEY_PRIME_MODP2048
, },
809 { "modp3072", OAKLEY_PRIME_MODP3072
, },
810 { "modp4096", OAKLEY_PRIME_MODP4096
, },
811 { "modp6144", OAKLEY_PRIME_MODP6144
, },
812 { "modp8192", OAKLEY_PRIME_MODP8192
, },
814 vchar_t p1
, *pub1
, *priv1
, *gxy1
;
815 vchar_t p2
, *pub2
, *priv2
, *gxy2
;
818 printf("\n**Test for DH.**\n");
820 for (i
= 0; i
< sizeof(px
)/sizeof(px
[0]); i
++) {
821 printf("\n**Test for DH %s.**\n", px
[i
].name
);
823 p1
.v
= str2val(px
[i
].p
, 16, &p1
.l
);
824 p2
.v
= str2val(px
[i
].p
, 16, &p2
.l
);
825 printf("prime number = \n"); PVDUMP(&p1
);
827 if (eay_dh_generate(&p1
, 2, 96, &pub1
, &priv1
) < 0) {
831 printf("private key for user 1 = \n"); PVDUMP(priv1
);
832 printf("public key for user 1 = \n"); PVDUMP(pub1
);
834 if (eay_dh_generate(&p2
, 2, 96, &pub2
, &priv2
) < 0) {
838 printf("private key for user 2 = \n"); PVDUMP(priv2
);
839 printf("public key for user 2 = \n"); PVDUMP(pub2
);
841 /* process to generate key for user 1 */
842 gxy1
= vmalloc(p1
.l
);
843 memset(gxy1
->v
, 0, gxy1
->l
);
844 eay_dh_compute(&p1
, 2, pub1
, priv1
, pub2
, &gxy1
);
845 printf("sharing gxy1 of user 1 = \n"); PVDUMP(gxy1
);
847 /* process to generate key for user 2 */
848 gxy2
= vmalloc(p1
.l
);
849 memset(gxy2
->v
, 0, gxy2
->l
);
850 eay_dh_compute(&p2
, 2, pub2
, priv2
, pub1
, &gxy2
);
851 printf("sharing gxy2 of user 2 = \n"); PVDUMP(gxy2
);
853 if (memcmp(gxy1
->v
, gxy2
->v
, gxy1
->l
))
854 printf("ERROR: sharing gxy mismatched.\n");
874 printf("\n**Test for generate a random number.**\n");
876 rn
= eay_set_random((u_int32_t
)96);
883 void (*func
) __P((int, char **));
885 { "random", bntest
, },
888 { "sha1", sha1test
, },
889 { "hmac", hmactest
, },
890 { "cipher", ciphertest
, },
891 { "cert", certtest
, },
901 int len
= sizeof(func
)/sizeof(func
[0]);
903 if (strcmp(*av
, "-h") == 0) {
904 printf("Usage: eaytest [");
905 for (i
= 0; i
< len
; i
++) {
906 printf("%s", func
[i
].name
);
918 for (i
= 0; i
< len
; i
++)
919 (func
[i
].func
)(ac
, av
);
921 for (i
= 0; i
< len
; i
++) {
922 if (strcmp(*av
, func
[i
].name
) == 0) {
923 (func
[i
].func
)(ac
, av
);
937 printf("Usage: eaytest [dh|md5|sha1|hmac|cipher]\n");
938 printf(" eaytest cert [cert_directory]\n");