1f8a6a7636d53a5730c58ae041e4e09ae12e1657cChia-chi Yeh/* $NetBSD: eaytest.c,v 1.10 2010/01/17 23:02:48 wiz Exp $ */ 20a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 30a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* Id: eaytest.c,v 1.22 2005/06/19 18:02:54 manubsd Exp */ 40a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 50a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* 60a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 70a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * All rights reserved. 80a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 90a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Redistribution and use in source and binary forms, with or without 100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * modification, are permitted provided that the following conditions 110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * are met: 120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 1. Redistributions of source code must retain the above copyright 130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * notice, this list of conditions and the following disclaimer. 140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 2. Redistributions in binary form must reproduce the above copyright 150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * notice, this list of conditions and the following disclaimer in the 160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * documentation and/or other materials provided with the distribution. 170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 3. Neither the name of the project nor the names of its contributors 180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * may be used to endorse or promote products derived from this software 190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * without specific prior written permission. 200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * SUCH DAMAGE. 320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang */ 330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "config.h" 350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/types.h> 370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/stat.h> 380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <sys/socket.h> 390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <netinet/in.h> 410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <stdlib.h> 430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <stdio.h> 440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <string.h> 450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <limits.h> 460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <dirent.h> 470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <fcntl.h> 480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <unistd.h> 490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <err.h> 500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <openssl/bio.h> 520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include <openssl/pem.h> 530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "var.h" 550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "vmbuf.h" 560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "misc.h" 570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "debug.h" 580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "str2val.h" 590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "plog.h" 600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "oakley.h" 620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "dhgroup.h" 630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "crypto_openssl.h" 640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "gnuc.h" 650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#include "package_version.h" 670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define PVDUMP(var) racoon_hexdump((var)->v, (var)->l) 690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/*#define CERTTEST_BROKEN */ 710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* prototype */ 730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic vchar_t *pem_read_buf __P((char *)); 750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid Usage __P((void)); 760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint rsatest __P((int, char **)); 780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint ciphertest __P((int, char **)); 790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint hmactest __P((int, char **)); 800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint sha1test __P((int, char **)); 810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint md5test __P((int, char **)); 820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint dhtest __P((int, char **)); 830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint bntest __P((int, char **)); 840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef CERTTEST_BROKEN 850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic char **getcerts __P((char *)); 860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint certtest __P((int, char **)); 870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* test */ 900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic int 920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangrsa_verify_with_pubkey(src, sig, pubkey_txt) 930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *src, *sig; 940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *pubkey_txt; 950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang BIO *bio; 970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang EVP_PKEY *evp; 980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int error; 990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang bio = BIO_new_mem_buf(pubkey_txt, strlen(pubkey_txt)); 1010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang evp = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL); 1020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (! evp) { 1030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf ("PEM_read_PUBKEY(): %s\n", eay_strerror()); 1040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 1050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 1060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang error = eay_check_rsasign(src, sig, evp->pkey.rsa); 1070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return error; 1090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 1100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint 1120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangrsatest(ac, av) 1130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int ac; 1140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char **av; 1150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 1160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *text = "this is test."; 1170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t src; 1180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *priv, *sig; 1190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int loglevel_saved; 1200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *pkcs1 = 1220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----BEGIN RSA PRIVATE KEY-----\n" 1230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MIICXQIBAAKBgQChe5/Fzk9SA0vCKBOcu9jBcLb9oLv50PeuEfQojhakY+OH8A3Q\n" 1240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"M8A0qIDG6uhTNGPvzCWb/+mKeOB48n5HJpLxlDFyP3kyd2yXHIZ/MN8g1nh4FsB0\n" 1250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"iTkk8QUCJkkan6FCOBrIeLEsGA5AdodzuR+khnCMt8vO+NFHZYKAQeynyQIDAQAB\n" 1260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"AoGAOfDcnCHxjhDGrwyoNNWl6Yqi7hAtQm67YAbrH14UO7nnmxAENM9MyNgpFLaW\n" 1270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"07v5m8IZQIcradcDXAJOUwNBN8E06UflwEYCaScIwndvr5UpVlN3e2NC6Wyg2yC7\n" 1280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"GarxQput3zj35XNR5bK42UneU0H6zDxpHWqI1SwE+ToAHu0CQQDNl9gUJTpg0L09\n" 1290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"HkbE5jeb8bA5I20nKqBOBP0v5tnzpwu41umQwk9I7Ru0ucD7j+DW4k8otadW+FnI\n" 1300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"G1M1MpSjAkEAyRMt4bN8otfpOpsOQWzw4jQtouohOxRFCrQTntHhU20PrQnQLZWs\n" 1310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"pOVzqCjRytYtkPEUA1z8QK5gGcVPcOQsowJBALmt2rwPB1NrEo5Bat7noO+Zb3Ob\n" 1320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"WDiYWeE8xkHd95gDlSWiC53ur9aINo6ZeP556jGIgL+el/yHHecJLrQL84sCQH48\n" 1330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"zUxq/C/cb++8UzneJGlPqusiJNTLiAENR1gpmlZfHT1c8Nb9phMsfu0vG29GAfuC\n" 1340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"bzchVLljALCNQK+2gRMCQQCNIgN+R9mRWZhFAcC1sq++YnuSBlw4VwdL/fd1Yg9e\n" 1350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"Ul+U98yPl/NXt8Rs4TRBFcOZjkFI8xv0hQtevTgTmgz+\n" 1360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----END RSA PRIVATE KEY-----\n\n"; 1370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *pubkey = 1380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----BEGIN PUBLIC KEY-----\n" 1390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChe5/Fzk9SA0vCKBOcu9jBcLb9\n" 1400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"oLv50PeuEfQojhakY+OH8A3QM8A0qIDG6uhTNGPvzCWb/+mKeOB48n5HJpLxlDFy\n" 1410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"P3kyd2yXHIZ/MN8g1nh4FsB0iTkk8QUCJkkan6FCOBrIeLEsGA5AdodzuR+khnCM\n" 1420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"t8vO+NFHZYKAQeynyQIDAQAB\n" 1430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----END PUBLIC KEY-----\n\n"; 1440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *pubkey_wrong = 1450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----BEGIN PUBLIC KEY-----\n" 1460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwDncG2tSokRBhK8la1mO\n" 1470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"QnUpxg6KvpoFUjEyRiIE1GRap5V6jCCEOmA9ZAz4Oa/97oxewwMWtchIxSBZVCia\n" 1480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"H9oGasbOFzrtSR+MKl6Cb/Ow3Fu+PKbHTsnfTk/nOOWyaQh91PRD7fdwHe8L9P7w\n" 1490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"2kFPmDW6+RNKIR4OErhXf1O0eSShPe0TO3vx43O7dWqhmh3Kgr4Jq7zAGqHtwu0B\n" 1500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"RFZnmsocOnVZb2yAHndp51/Mk1H37ThHwN7qMx7RqrS3ru3XtchpJd9IQJPBIRfY\n" 1510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"VYQ68u5ix/Z80Y6VkRf0qnAvel8B6D3N3Zyq5u7G60PfvvtCybeMn7nVrSMxqMW/\n" 1520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"xwIDAQAB\n" 1530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----END PUBLIC KEY-----\n\n"; 1540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf ("%s", pkcs1); 1560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf ("%s", pubkey); 1570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang priv = pem_read_buf(pkcs1); 1580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang src.v = text; 1600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang src.l = strlen(text); 1610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* sign */ 1630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang sig = eay_get_x509sign(&src, priv); 1640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (sig == NULL) { 1650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("sign failed. %s\n", eay_strerror()); 1660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 1670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 1680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("RSA signed data.\n"); 1700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(sig); 1710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("Verification with correct pubkey: "); 1730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (rsa_verify_with_pubkey (&src, sig, pubkey) != 0) { 1740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf ("Failed.\n"); 1750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 1760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 1770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang else 1780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf ("Verified. Good.\n"); 1790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang loglevel_saved = loglevel; 1810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang loglevel = 0; 1820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("Verification with wrong pubkey: "); 1830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (rsa_verify_with_pubkey (&src, sig, pubkey_wrong) != 0) 1840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf ("Not verified. Good.\n"); 1850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang else { 1860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf ("Verified. This is bad...\n"); 1870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang loglevel = loglevel_saved; 1880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 1890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 1900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang loglevel = loglevel_saved; 1910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return 0; 1930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 1940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic vchar_t * 1960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangpem_read_buf(buf) 1970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *buf; 1980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 1990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang BIO *bio; 2000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *nm = NULL, *header = NULL; 2010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang unsigned char *data = NULL; 2020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang long len; 2030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *ret; 2040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int error; 2050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 2060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang bio = BIO_new_mem_buf(buf, strlen(buf)); 2070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang error = PEM_read_bio(bio, &nm, &header, &data, &len); 2080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (error == 0) 2090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang errx(1, "%s", eay_strerror()); 2100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang ret = vmalloc(len); 2110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ret == NULL) 2120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang err(1, "vmalloc"); 2130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(ret->v, data, len); 2140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 2150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return ret; 2160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 2170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 2180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef CERTTEST_BROKEN 2190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint 2200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangcerttest(ac, av) 2210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int ac; 2220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char **av; 2230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 2240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *certpath; 2250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char **certs; 2260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int type; 2270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int error; 2280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 2290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\n**Test for Certificate.**\n"); 2300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 2310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { 2320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *asn1dn = NULL, asn1dn0; 2330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef ORIG_DN 2340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char dnstr[] = "C=JP, ST=Kanagawa, L=Fujisawa, O=WIDE Project, OU=KAME Project, CN=Shoichi Sakane/Email=sakane@kame.net"; 2350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *dnstr_w1 = NULL; 2360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *dnstr_w2 = NULL; 2370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char dn0[] = { 2380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x30,0x81,0x9a,0x31,0x0b,0x30,0x09,0x06, 2390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x03,0x55,0x04,0x06,0x13,0x02,0x4a,0x50, 2400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x31,0x11,0x30,0x0f,0x06,0x03,0x55,0x04, 2410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x08,0x13,0x08,0x4b,0x61,0x6e,0x61,0x67, 2420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x61,0x77,0x61,0x31,0x11,0x30,0x0f,0x06, 2430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x03,0x55,0x04,0x07,0x13,0x08,0x46,0x75, 2440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x6a,0x69,0x73,0x61,0x77,0x61,0x31,0x15, 2450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x30,0x13,0x06,0x03,0x55,0x04,0x0a,0x13, 2460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x0c,0x57,0x49,0x44,0x45,0x20,0x50,0x72, 2470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x6f,0x6a,0x65,0x63,0x74,0x31,0x15,0x30, 2480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x13,0x06,0x03,0x55,0x04,0x0b,0x13,0x0c, 2490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x4b,0x41,0x4d,0x45,0x20,0x50,0x72,0x6f, 2500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x6a,0x65,0x63,0x74,0x31,0x17,0x30,0x15, 2510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x06,0x03,0x55,0x04,0x03,0x13,0x0e,0x53, 2520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x68,0x6f,0x69,0x63,0x68,0x69,0x20,0x53, 2530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x61,0x6b,0x61,0x6e,0x65,0x31,0x1e,0x30, 2540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x1c,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7, 2550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x0d,0x01,0x09,0x01, 2560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x0c, /* <== XXX */ 2570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x0f,0x73,0x61, 2580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x6b,0x61,0x6e,0x65,0x40,0x6b,0x61,0x6d, 2590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x65,0x2e,0x6e,0x65,0x74, 2600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang }; 2610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else /* not ORIG_DN */ 2620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char dnstr[] = "C=JP, ST=Kanagawa, L=Fujisawa, O=WIDE Project, OU=KAME Project, CN=Shoichi Sakane"; 2630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char dnstr_w1[] = "C=JP, ST=Kanagawa, L=Fujisawa, O=WIDE Project, OU=*, CN=Shoichi Sakane"; 2640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char dnstr_w2[] = "C=JP, ST=Kanagawa, L=Fujisawa, O=WIDE Project, OU=KAME Project, CN=*"; 2650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char dn0[] = { 2660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x30,0x7a,0x31,0x0b,0x30,0x09,0x06,0x03, 2670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x55,0x04,0x06,0x13,0x02,0x4a,0x50,0x31, 2680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x11,0x30,0x0f,0x06,0x03,0x55,0x04,0x08, 2690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x13,0x08,0x4b,0x61,0x6e,0x61,0x67,0x61, 2700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x77,0x61,0x31,0x11,0x30,0x0f,0x06,0x03, 2710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x55,0x04,0x07,0x13,0x08,0x46,0x75,0x6a, 2720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x69,0x73,0x61,0x77,0x61,0x31,0x15,0x30, 2730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x13,0x06,0x03,0x55,0x04,0x0a,0x13,0x0c, 2740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x57,0x49,0x44,0x45,0x20,0x50,0x72,0x6f, 2750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x6a,0x65,0x63,0x74,0x31,0x15,0x30,0x13, 2760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x06,0x03,0x55,0x04,0x0b,0x13,0x0c,0x4b, 2770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x41,0x4d,0x45,0x20,0x50,0x72,0x6f,0x6a, 2780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x65,0x63,0x74,0x31,0x17,0x30,0x15,0x06, 2790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x03,0x55,0x04,0x03,0x13,0x0e,0x53,0x68, 2800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x6f,0x69,0x63,0x68,0x69,0x20,0x53,0x61, 2810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 0x6b,0x61,0x6e,0x65, 2820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang }; 2830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif /* ORIG_DN */ 2840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 2850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("check to convert the string into subjectName.\n"); 2860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("%s\n", dnstr); 2870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 2880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang asn1dn0.v = dn0; 2890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang asn1dn0.l = sizeof(dn0); 2900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 2910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang asn1dn = eay_str2asn1dn(dnstr, strlen(dnstr)); 2920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (asn1dn == NULL || asn1dn->l != asn1dn0.l) 2930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef OUTPUT_VALID_ASN1DN 2940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { 2950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang unsigned char *cp; int i; 2960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("asn1dn length mismatched (%zu != %zu).\n", asn1dn ? asn1dn->l : -1, asn1dn0.l); 2970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang for (cp = asn1dn->v, i = 0; i < asn1dn->l; i++) 2980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf ("0x%02x,", *cp++); 2990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang exit (1); 3000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 3010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else 3020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang errx(1, "asn1dn length mismatched (%zu != %zu).\n", asn1dn ? asn1dn->l : -1, asn1dn0.l); 3030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 3040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* 3060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * NOTE: The value pointed by "<==" above is different from the 3070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * return of eay_str2asn1dn(). but eay_cmp_asn1dn() can distinguish 3080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * both of the names are same name. 3090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang */ 3100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (eay_cmp_asn1dn(&asn1dn0, asn1dn)) 3110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang errx(1, "asn1dn mismatched.\n"); 3120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(asn1dn); 3130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("exact match: succeed.\n"); 3150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (dnstr_w1 != NULL) { 3170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang asn1dn = eay_str2asn1dn(dnstr_w1, strlen(dnstr_w1)); 3180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (asn1dn == NULL || asn1dn->l == asn1dn0.l) 3190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang errx(1, "asn1dn length wrong for wildcard 1\n"); 3200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (eay_cmp_asn1dn(&asn1dn0, asn1dn)) 3210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang errx(1, "asn1dn mismatched for wildcard 1.\n"); 3220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(asn1dn); 3230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("wildcard 1 match: succeed.\n"); 3240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 3250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (dnstr_w1 != NULL) { 3270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang asn1dn = eay_str2asn1dn(dnstr_w2, strlen(dnstr_w2)); 3280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (asn1dn == NULL || asn1dn->l == asn1dn0.l) 3290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang errx(1, "asn1dn length wrong for wildcard 2\n"); 3300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (eay_cmp_asn1dn(&asn1dn0, asn1dn)) 3310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang errx(1, "asn1dn mismatched for wildcard 2.\n"); 3320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(asn1dn); 3330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("wildcard 2 match: succeed.\n"); 3340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 3350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 3370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_init(); 3380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* get certs */ 3400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ac > 1) { 3410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang certpath = *(av + 1); 3420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang certs = getcerts(certpath); 3430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } else { 3440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef ORIG_DN 3450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\nCAUTION: These certificates are probably invalid " 3460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang "on your environment because you don't have their " 3470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang "issuer's certs in your environment.\n\n"); 3480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang certpath = "/usr/local/openssl/certs"; 3500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang certs = getcerts(NULL); 3510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else 3520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\nWARNING: The main certificates are probably invalid " 3530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang "on your environment\nbecause you don't have their " 3540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang "issuer's certs in your environment\nso not doing " 3550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang "this test.\n\n"); 3560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return (0); 3570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 3580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 3590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang while (*certs != NULL) { 3610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t c; 3630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *str; 3640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *vstr; 3650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("===CERT===\n"); 3670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang c.v = *certs; 3690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang c.l = strlen(*certs); 3700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* print text */ 3720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang str = eay_get_x509text(&c); 3730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("%s", str); 3740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang racoon_free(str); 3750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* print ASN.1 of subject name */ 3770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vstr = eay_get_x509asn1subjectname(&c); 3780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (!vstr) 3790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return 0; 3800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(vstr); 3810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\n"); 3820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(vstr); 3830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 3840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* print subject alt name */ 3850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { 3860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int pos; 3870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang for (pos = 1; ; pos++) { 3880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang error = eay_get_x509subjectaltname(&c, &str, &type, pos); 3890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (error) { 3900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("no subjectaltname found.\n"); 3910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang break; 3920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 3930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (!str) 3940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang break; 3950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("SubjectAltName: %d: %s\n", type, str); 3960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang racoon_free(str); 3970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 3980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 3990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 4000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* NULL => name of the certificate file */ 4010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang error = eay_check_x509cert(&c, certpath, NULL, 1); 4020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (error) 4030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("ERROR: cert is invalid.\n"); 4040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\n"); 4050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 4060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang certs++; 4070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 4080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return 0; 4090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 4100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 4110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic char ** 4120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanggetcerts(path) 4130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *path; 4140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 4150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char **certs = NULL, **p; 4160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang DIR *dirp; 4170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct dirent *dp; 4180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct stat sb; 4190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char buf[512]; 4200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int len; 4210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int n; 4220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int fd; 4230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 4240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang static char *samplecerts[] = { 4250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* self signed */ 4260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----BEGIN CERTIFICATE-----\n" 4270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MIICpTCCAg4CAQAwDQYJKoZIhvcNAQEEBQAwgZoxCzAJBgNVBAYTAkpQMREwDwYD\n" 4280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"VQQIEwhLYW5hZ2F3YTERMA8GA1UEBxMIRnVqaXNhd2ExFTATBgNVBAoTDFdJREUg\n" 4290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"UHJvamVjdDEVMBMGA1UECxMMS0FNRSBQcm9qZWN0MRcwFQYDVQQDEw5TaG9pY2hp\n" 4300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"IFNha2FuZTEeMBwGCSqGSIb3DQEJARYPc2FrYW5lQGthbWUubmV0MB4XDTAwMDgy\n" 4310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"NDAxMzc0NFoXDTAwMDkyMzAxMzc0NFowgZoxCzAJBgNVBAYTAkpQMREwDwYDVQQI\n" 4320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"EwhLYW5hZ2F3YTERMA8GA1UEBxMIRnVqaXNhd2ExFTATBgNVBAoTDFdJREUgUHJv\n" 4330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"amVjdDEVMBMGA1UECxMMS0FNRSBQcm9qZWN0MRcwFQYDVQQDEw5TaG9pY2hpIFNh\n" 4340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"a2FuZTEeMBwGCSqGSIb3DQEJARYPc2FrYW5lQGthbWUubmV0MIGfMA0GCSqGSIb3\n" 4350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"DQEBAQUAA4GNADCBiQKBgQCpIQG/H3zn4czAmPBcbkDrYxE1A9vcpghpib3Of0Op\n" 4360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"SsiWIBOyIMiVAzK/I/JotWp3Vdn5fzGp/7DGAbWXAALas2xHkNmTMPpu6qhmNQ57\n" 4370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"kJHZHal24mgc1hwbrI9fb5olvIexx9a1riNPnKMRVHzXYizsyMbf+lJJmZ8QFhWN\n" 4380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"twIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACKs6X/BYycuHI3iop403R3XWMHHnNBN\n" 4390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"5XTHVWiWgR1cMWkq/dp51gn+nPftpdAaYGpqGkiHGhZcXLoBaX9uON3p+7av+sQN\n" 4400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"plXwnvUf2Zsgu+fojskS0gKcDlYiq1O8TOaBgJouFZgr1q6PiYjVEJGogAP28+HN\n" 4410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"M4o+GBFbFoqK\n" 4420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----END CERTIFICATE-----\n\n", 4430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* signed by SSH testing CA + CA1 + CA2 */ 4440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----BEGIN X509 CERTIFICATE-----\n" 4450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MIICtTCCAj+gAwIBAgIEOaR8NjANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJG\n" 4460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"STEkMCIGA1UEChMbU1NIIENvbW11bmljYXRpb25zIFNlY3VyaXR5MREwDwYDVQQL\n" 4470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"EwhXZWIgdGVzdDEbMBkGA1UEAxMSVGVzdCBDQSAxIHN1YiBjYSAyMB4XDTAwMDgy\n" 4480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"NDAwMDAwMFoXDTAwMTAwMTAwMDAwMFowgZoxCzAJBgNVBAYTAkpQMREwDwYDVQQI\n" 4490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"EwhLYW5hZ2F3YTERMA8GA1UEBxMIRnVqaXNhd2ExFTATBgNVBAoTDFdJREUgUHJv\n" 4500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"amVjdDEVMBMGA1UECxMMS0FNRSBQcm9qZWN0MRcwFQYDVQQDEw5TaG9pY2hpIFNh\n" 4510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"a2FuZTEeMBwGCSqGSIb3DQEJAQwPc2FrYW5lQGthbWUubmV0MIGfMA0GCSqGSIb3\n" 4520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"DQEBAQUAA4GNADCBiQKBgQCpIQG/H3zn4czAmPBcbkDrYxE1A9vcpghpib3Of0Op\n" 4530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"SsiWIBOyIMiVAzK/I/JotWp3Vdn5fzGp/7DGAbWXAALas2xHkNmTMPpu6qhmNQ57\n" 4540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"kJHZHal24mgc1hwbrI9fb5olvIexx9a1riNPnKMRVHzXYizsyMbf+lJJmZ8QFhWN\n" 4550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"twIDAQABo18wXTALBgNVHQ8EBAMCBaAwGgYDVR0RBBMwEYEPc2FrYW5lQGthbWUu\n" 4560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"bmV0MDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9sZGFwLnNzaC5maS9jcmxzL2Nh\n" 4570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MS0yLmNybDANBgkqhkiG9w0BAQUFAANhADtaqual41OWshF/rwCTuR6zySBJysGp\n" 4580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"+qjkp5efCiYKhAu1L4WXlMsV/SNdzspui5tHasPBvUw8gzFsU/VW/B2zuQZkimf1\n" 4590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"u6ZPjUb/vt8vLOPScP5MeH7xrTk9iigsqQ==\n" 4600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----END X509 CERTIFICATE-----\n\n", 4610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* VP100 */ 4620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----BEGIN CERTIFICATE-----\n" 4630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MIICXzCCAcigAwIBAgIEOXGBIzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJG\n" 4640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"STEkMCIGA1UEChMbU1NIIENvbW11bmljYXRpb25zIFNlY3VyaXR5MREwDwYDVQQL\n" 4650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"EwhXZWIgdGVzdDESMBAGA1UEAxMJVGVzdCBDQSAxMB4XDTAwMDcxNjAwMDAwMFoX\n" 4660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"DTAwMDkwMTAwMDAwMFowNTELMAkGA1UEBhMCanAxETAPBgNVBAoTCHRhaGl0ZXN0\n" 4670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MRMwEQYDVQQDEwpmdXJ1a2F3YS0xMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKB\n" 4680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"gQDUmI2RaAuoLvtRDbASwRhbkj/Oq0BBIKgAqbFknc/EanJSQwZQu82gD88nf7gG\n" 4690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"VEioWmKPLDuEjz5JCuM+k5f7HYHI1wWmz1KFr7UA+avZm4Kp6YKnhuH7soZp7kBL\n" 4700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"hTiZEpL0jdmCWLW3ZXoro55rmPrBsCd+bt8VU6tRZm5dUwIBKaNZMFcwCwYDVR0P\n" 4710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"BAQDAgWgMBYGA1UdEQQPMA2CBVZQMTAwhwQKFIaFMDAGA1UdHwQpMCcwJaAjoCGG\n" 4720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"H2h0dHA6Ly9sZGFwLnNzaC5maS9jcmxzL2NhMS5jcmwwDQYJKoZIhvcNAQEFBQAD\n" 4730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"gYEAKJ/2Co/KYW65mwpGG3CBvsoRL8xyUMHGt6gQpFLHiiHuAdix1ADTL6uoFuYi\n" 4740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"4sE5omQm1wKVv2ZhS03zDtUfKoVEv0HZ7IY3AU/FZT/M5gQvbt43Dki/ma3ock2I\n" 4750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"PPhbLsvXm+GCVh3jvkYGk1zr7VERVeTPtmT+hW63lcxfFp4=\n" 4760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----END CERTIFICATE-----\n\n", 4770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* IKED */ 4780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----BEGIN CERTIFICATE-----\n" 4790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MIIEFTCCA7+gAwIBAgIKYU5X6AAAAAAACTANBgkqhkiG9w0BAQUFADCBljEpMCcG\n" 4800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"CSqGSIb3DQEJARYaeS13YXRhbmFAc2RsLmhpdGFjaGkuY28uanAxCzAJBgNVBAYT\n" 4810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"AkpQMREwDwYDVQQIEwhLQU5BR0FXQTERMA8GA1UEBxMIWW9rb2hhbWExEDAOBgNV\n" 4820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"BAoTB0hJVEFDSEkxDDAKBgNVBAsTA1NETDEWMBQGA1UEAxMNSVBzZWMgVGVzdCBD\n" 4830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"QTAeFw0wMDA3MTUwMjUxNDdaFw0wMTA3MTUwMzAxNDdaMEUxCzAJBgNVBAYTAkpQ\n" 4840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MREwDwYDVQQIEwhLQU5BR0FXQTEQMA4GA1UEChMHSElUQUNISTERMA8GA1UEAxMI\n" 4850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"V0FUQU5BQkUwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA6Wja5A7Ldzrtx+rMWHEB\n" 4860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"Cyt+/ZoG0qdFQbuuUiU1vOSq+1f+ZSCYAdTq13Lrr6Xfz3jDVFEZLPID9PSTFwq+\n" 4870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"yQIDAQABo4ICPTCCAjkwDgYDVR0PAQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUF\n" 4880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"CAICMB0GA1UdDgQWBBTkv7/MH5Ra+S1zBAmnUIH5w8ZTUTCB0gYDVR0jBIHKMIHH\n" 4890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"gBQsF2qoaTl5F3GFLKrttaxPJ8j4faGBnKSBmTCBljEpMCcGCSqGSIb3DQEJARYa\n" 4900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"eS13YXRhbmFAc2RsLmhpdGFjaGkuY28uanAxCzAJBgNVBAYTAkpQMREwDwYDVQQI\n" 4910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"EwhLQU5BR0FXQTERMA8GA1UEBxMIWW9rb2hhbWExEDAOBgNVBAoTB0hJVEFDSEkx\n" 4920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"DDAKBgNVBAsTA1NETDEWMBQGA1UEAxMNSVBzZWMgVGVzdCBDQYIQeccIf4GYDIBA\n" 4930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"rS6HSUt8XjB7BgNVHR8EdDByMDagNKAyhjBodHRwOi8vZmxvcmEyMjAvQ2VydEVu\n" 4940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"cm9sbC9JUHNlYyUyMFRlc3QlMjBDQS5jcmwwOKA2oDSGMmZpbGU6Ly9cXGZsb3Jh\n" 4950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MjIwXENlcnRFbnJvbGxcSVBzZWMlMjBUZXN0JTIwQ0EuY3JsMIGgBggrBgEFBQcB\n" 4960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"AQSBkzCBkDBFBggrBgEFBQcwAoY5aHR0cDovL2Zsb3JhMjIwL0NlcnRFbnJvbGwv\n" 4970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"ZmxvcmEyMjBfSVBzZWMlMjBUZXN0JTIwQ0EuY3J0MEcGCCsGAQUFBzAChjtmaWxl\n" 4980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"Oi8vXFxmbG9yYTIyMFxDZXJ0RW5yb2xsXGZsb3JhMjIwX0lQc2VjJTIwVGVzdCUy\n" 4990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MENBLmNydDANBgkqhkiG9w0BAQUFAANBAG8yZAWHb6g3zba453Hw5loojVDZO6fD\n" 5000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"9lCsyaxeo9/+7x1JEEcdZ6qL7KKqe7ZBwza+hIN0ITkp2WEWo22gTz4=\n" 5010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----END CERTIFICATE-----\n\n", 5020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* From Entrust */ 5030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----BEGIN CERTIFICATE-----\n" 5040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MIIDXTCCAsagAwIBAgIEOb6khTANBgkqhkiG9w0BAQUFADA4MQswCQYDVQQGEwJV\n" 5050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"UzEQMA4GA1UEChMHRW50cnVzdDEXMBUGA1UECxMOVlBOIEludGVyb3AgUk8wHhcN\n" 5060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MDAwOTE4MjMwMDM3WhcNMDMwOTE4MjMzMDM3WjBTMQswCQYDVQQGEwJVUzEQMA4G\n" 5070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"A1UEChMHRW50cnVzdDEXMBUGA1UECxMOVlBOIEludGVyb3AgUk8xGTAXBgNVBAMT\n" 5080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"EFNob2ljaGkgU2FrYW5lIDIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKj3\n" 5090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"eXSt1qXxFXzpa265B/NQYk5BZN7pNJg0tlTKBTVV3UgpQ92Bx5DoNfZh11oIv0Sw\n" 5100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"6YnG5p9F9ma36U9HDoD3hVTjAvQKy4ssCsnU1y6v5XOU1QvYQo6UTzgsXUTaIau4\n" 5110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"Lrccl+nyoiNzy3lG51tLR8CxuA+3OOAK9xPjszClAgMBAAGjggFXMIIBUzBABgNV\n" 5120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"HREEOTA3gQ9zYWthbmVAa2FtZS5uZXSHBM6vIHWCHjIwNi0xNzUtMzItMTE3LnZw\n" 5130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"bndvcmtzaG9wLmNvbTATBgNVHSUEDDAKBggrBgEFBQgCAjALBgNVHQ8EBAMCAKAw\n" 5140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"KwYDVR0QBCQwIoAPMjAwMDA5MTgyMzAwMzdagQ8yMDAyMTAyNTExMzAzN1owWgYD\n" 5150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"VR0fBFMwUTBPoE2gS6RJMEcxCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFbnRydXN0\n" 5160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"MRcwFQYDVQQLEw5WUE4gSW50ZXJvcCBSTzENMAsGA1UEAxMEQ1JMMTAfBgNVHSME\n" 5170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"GDAWgBTzVmhu0tBoWKwkZE5mXpooE9630DAdBgNVHQ4EFgQUEgBHPtXggJqei5Xz\n" 5180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"92CrWXTJxfAwCQYDVR0TBAIwADAZBgkqhkiG9n0HQQAEDDAKGwRWNS4wAwIEsDAN\n" 5190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"BgkqhkiG9w0BAQUFAAOBgQCIFriNGMUE8GH5LuDrTJfA8uGx8vLy2seljuo694TR\n" 5200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"et/ojp9QnfOJ1PF9iAdGaEaSLfkwhY4fZNZzxic5HBoHLeo9BXLP7i7FByXjvOZC\n" 5210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"Y8++0dC8NVvendIILcJBM5nbDq1TqIbb8K3SP80XhO5JLVJkoZiQftAMjo0peZPO\n" 5220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"EQ==\n" 5230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang"-----END CERTIFICATE-----\n\n", 5240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang NULL, 5250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang }; 5260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (path == NULL) 5280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return (char **)&samplecerts; 5290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang stat(path, &sb); 5310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (!(sb.st_mode & S_IFDIR)) { 5320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("ERROR: %s is not directory.\n", path); 5330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang exit(0); 5340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 5350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang dirp = opendir(path); 5370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (dirp == NULL) { 5380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("opendir failed.\n"); 5390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang exit(0); 5400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 5410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang n = 0; 5430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang while ((dp = readdir(dirp)) != NULL) { 5440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (dp->d_type != DT_REG) 5450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang continue; 5460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (strcmp(dp->d_name + strlen(dp->d_name) - 4, "cert")) 5470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang continue; 5480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang snprintf(buf, sizeof(buf), "%s/%s", path, dp->d_name); 5490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang stat(buf, &sb); 5500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang p = (char **)realloc(certs, (n + 1) * sizeof(certs)); 5520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (p == NULL) 5530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang err(1, "realloc"); 5540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang certs = p; 5550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang certs[n] = malloc(sb.st_size + 1); 5570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (certs[n] == NULL) 5580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang err(1, "malloc"); 5590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang fd = open(buf, O_RDONLY); 5610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (fd == -1) 5620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang err(1, "open"); 5630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang len = read(fd, certs[n], sb.st_size); 5640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (len == -1) 5650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang err(1, "read"); 5660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (len != sb.st_size) 5670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang errx(1, "read: length mismatch"); 5680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang certs[n][sb.st_size] = '\0'; 5690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang close(fd); 5700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("%s: %d\n", dp->d_name, (int)sb.st_size); 5720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang n++; 5740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 575f8a6a7636d53a5730c58ae041e4e09ae12e1657cChia-chi Yeh closedir(dirp); 5760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang p = (char **)realloc(certs, (n + 1) * sizeof(certs)); 5780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (p == NULL) 5790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang err(1, "realloc"); 5800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang certs = p; 5810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang certs[n] = NULL; 5820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return certs; 5840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 5850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif /* CERTTEST_BROKEN */ 5860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangtypedef vchar_t* (eay_func) (vchar_t *, vchar_t *, vchar_t *); 5880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 5890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstatic int 5900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangciphertest_1 (const char *name, 5910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *data, 5920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang size_t data_align, 5930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *key, 5940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang size_t min_keysize, 5950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *iv0, 5960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang size_t iv_length, 5970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_func encrypt, 5980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_func decrypt) 5990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 6000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int padlen; 6010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *buf, *iv, *res1, *res2; 6020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang iv = vmalloc(iv_length); 6030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("Test for cipher %s\n", name); 6050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("data:\n"); 6060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(data); 6070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (data_align <= 1 || (data->l % data_align) == 0) 6090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang padlen = 0; 6100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang else 6110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang padlen = data_align - data->l % data_align; 6120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang buf = vmalloc(data->l + padlen); 6140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(buf->v, data->v, data->l); 6150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(iv->v, iv0->v, iv_length); 6170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res1 = (encrypt)(buf, key, iv); 6180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (res1 == NULL) { 6190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("%s encryption failed.\n", name); 6200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 6210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 6220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("encrypted:\n"); 6230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res1); 6240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(iv->v, iv0->v, iv_length); 6260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res2 = (decrypt)(res1, key, iv); 6270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (res2 == NULL) { 6280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("%s decryption failed.\n", name); 6290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 6300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 6310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("decrypted:\n"); 6320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res2); 6330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (memcmp(data->v, res2->v, data->l)) { 6350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("XXXX NG (%s) XXXX\n", name); 6360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 6370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 6380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang else 6390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("%s cipher verified.\n", name); 6400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res1); 6410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res2); 6420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(buf); 6430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(iv); 6440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return 0; 6460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 6470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint 6490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangciphertest(ac, av) 6500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int ac; 6510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char **av; 6520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 6530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t data; 6540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t key; 6550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t iv0; 6560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\n**Testing CIPHERS**\n"); 6580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang data.v = str2val("\ 6600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang06000017 03000000 73616b61 6e65406b 616d652e 6e657409 0002c104 308202b8 \ 6610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang04f05a90 \ 6620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang ", 16, &data.l); 6630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang key.v = str2val("f59bd70f 81b9b9cc 2a32c7fd 229a4b37", 16, &key.l); 6640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang iv0.v = str2val("26b68c90 9467b4ab 7ec29fa0 0b696b55", 16, &iv0.l); 6650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ciphertest_1 ("DES", 6670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &data, 8, 6680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &key, 8, 6690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &iv0, 8, 6700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_des_encrypt, eay_des_decrypt) < 0) 6710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 6720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ciphertest_1 ("3DES", 6740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &data, 8, 6750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &key, 24, 6760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &iv0, 8, 6770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_3des_encrypt, eay_3des_decrypt) < 0) 6780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 6790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ciphertest_1 ("AES", 6810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &data, 16, 6820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &key, key.l, 6830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &iv0, 16, 6840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_aes_encrypt, eay_aes_decrypt) < 0) 6850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 6860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ciphertest_1 ("BLOWFISH", 6880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &data, 8, 6890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &key, key.l, 6900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &iv0, 8, 6910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_bf_encrypt, eay_bf_decrypt) < 0) 6920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 6930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 6940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ciphertest_1 ("CAST", 6950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &data, 8, 6960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &key, key.l, 6970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &iv0, 8, 6980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_cast_encrypt, eay_cast_decrypt) < 0) 6990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 7000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 7010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef HAVE_OPENSSL_IDEA_H 7020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ciphertest_1 ("IDEA", 7030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &data, 8, 7040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &key, key.l, 7050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &iv0, 8, 7060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_idea_encrypt, eay_idea_decrypt) < 0) 7070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 7080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 7090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 7100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef HAVE_OPENSSL_RC5_H 7110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ciphertest_1 ("RC5", 7120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &data, 8, 7130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &key, key.l, 7140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &iv0, 8, 7150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_rc5_encrypt, eay_rc5_decrypt) < 0) 7160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 7170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 7180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#if defined(HAVE_OPENSSL_CAMELLIA_H) 7190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ciphertest_1 ("CAMELLIA", 7200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &data, 16, 7210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &key, key.l, 7220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang &iv0, 16, 7230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_camellia_encrypt, eay_camellia_decrypt) < 0) 7240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 7250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 7260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return 0; 7270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 7280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 7290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint 7300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wanghmactest(ac, av) 7310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int ac; 7320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char **av; 7330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 7340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *keyword = "hehehe test secret!"; 7350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *object = "d7e6a6c1876ef0488bb74958b9fee94e"; 7360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *object1 = "d7e6a6c1876ef048"; 7370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *object2 = "8bb74958b9fee94e"; 7380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *r_hmd5 = "5702d7d1 fd1bfc7e 210fc9fa cda7d02c"; 7390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *r_hsha1 = "309999aa 9779a43e ebdea839 1b4e7ee1 d8646874"; 7400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef WITH_SHA2 7410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *r_hsha2 = "d47262d8 a5b6f39d d8686939 411b3e79 ed2e27f9 2c4ea89f dd0a06ae 0c0aa396"; 7420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 7430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *key, *data, *data1, *data2, *res; 7440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t mod; 7450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang caddr_t ctx; 7460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 7470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef WITH_SHA2 7480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\n**Test for HMAC MD5, SHA1, and SHA256.**\n"); 7490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#else 7500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\n**Test for HMAC MD5 & SHA1.**\n"); 7510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 7520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 7530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang key = vmalloc(strlen(keyword)); 7540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(key->v, keyword, key->l); 7550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 7560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang data = vmalloc(strlen(object)); 7570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang data1 = vmalloc(strlen(object1)); 7580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang data2 = vmalloc(strlen(object2)); 7590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(data->v, object, data->l); 7600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(data1->v, object1, data1->l); 7610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(data2->v, object2, data2->l); 7620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 7630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* HMAC MD5 */ 7640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("HMAC MD5 by eay_hmacmd5_one()\n"); 7650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res = eay_hmacmd5_one(key, data); 7660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res); 7670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang mod.v = str2val(r_hmd5, 16, &mod.l); 7680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (memcmp(res->v, mod.v, mod.l)) { 7690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf(" XXX NG XXX\n"); 7700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 7710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 7720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang free(mod.v); 7730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res); 7740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 7750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* HMAC MD5 */ 7760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("HMAC MD5 by eay_hmacmd5_xxx()\n"); 7770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang ctx = eay_hmacmd5_init(key); 7780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_hmacmd5_update(ctx, data1); 7790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_hmacmd5_update(ctx, data2); 7800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res = eay_hmacmd5_final(ctx); 7810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res); 7820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang mod.v = str2val(r_hmd5, 16, &mod.l); 7830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (memcmp(res->v, mod.v, mod.l)) { 7840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf(" XXX NG XXX\n"); 7850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 7860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 7870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang free(mod.v); 7880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res); 7890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 7900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* HMAC SHA1 */ 7910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("HMAC SHA1 by eay_hmacsha1_one()\n"); 7920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res = eay_hmacsha1_one(key, data); 7930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res); 7940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang mod.v = str2val(r_hsha1, 16, &mod.l); 7950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (memcmp(res->v, mod.v, mod.l)) { 7960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf(" XXX NG XXX\n"); 7970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 7980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 7990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang free(mod.v); 8000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res); 8010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* HMAC SHA1 */ 8030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("HMAC SHA1 by eay_hmacsha1_xxx()\n"); 8040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang ctx = eay_hmacsha1_init(key); 8050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_hmacsha1_update(ctx, data1); 8060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_hmacsha1_update(ctx, data2); 8070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res = eay_hmacsha1_final(ctx); 8080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res); 8090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang mod.v = str2val(r_hsha1, 16, &mod.l); 8100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (memcmp(res->v, mod.v, mod.l)) { 8110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf(" XXX NG XXX\n"); 8120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 8130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 8140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang free(mod.v); 8150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res); 8160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifdef WITH_SHA2 8180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* HMAC SHA2 */ 8190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("HMAC SHA2 by eay_hmacsha2_256_one()\n"); 8200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res = eay_hmacsha2_256_one(key, data); 8210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res); 8220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang mod.v = str2val(r_hsha2, 16, &mod.l); 8230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (memcmp(res->v, mod.v, mod.l)) { 8240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf(" XXX NG XXX\n"); 8250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 8260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 8270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang free(mod.v); 8280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res); 8290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 8300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(data); 8320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(data1); 8330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(data2); 8340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(key); 8350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return 0; 8370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 8380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint 8400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangsha1test(ac, av) 8410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int ac; 8420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char **av; 8430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 8440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *word1 = "1234567890", *word2 = "12345678901234567890"; 8450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang caddr_t ctx; 8460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *buf, *res; 8470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\n**Test for SHA1.**\n"); 8490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang ctx = eay_sha1_init(); 8510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang buf = vmalloc(strlen(word1)); 8520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(buf->v, word1, buf->l); 8530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_sha1_update(ctx, buf); 8540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_sha1_update(ctx, buf); 8550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res = eay_sha1_final(ctx); 8560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res); 8570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res); 8580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(buf); 8590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang ctx = eay_sha1_init(); 8610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang buf = vmalloc(strlen(word2)); 8620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(buf->v, word2, buf->l); 8630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_sha1_update(ctx, buf); 8640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res = eay_sha1_final(ctx); 8650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res); 8660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res); 8670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res = eay_sha1_one(buf); 8690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res); 8700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res); 8710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(buf); 8720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return 0; 8740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 8750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint 8770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmd5test(ac, av) 8780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int ac; 8790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char **av; 8800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 8810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *word1 = "1234567890", *word2 = "12345678901234567890"; 8820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang caddr_t ctx; 8830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *buf, *res; 8840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\n**Test for MD5.**\n"); 8860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang ctx = eay_md5_init(); 8880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang buf = vmalloc(strlen(word1)); 8890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(buf->v, word1, buf->l); 8900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_md5_update(ctx, buf); 8910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_md5_update(ctx, buf); 8920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res = eay_md5_final(ctx); 8930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res); 8940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res); 8950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(buf); 8960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 8970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang ctx = eay_md5_init(); 8980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang buf = vmalloc(strlen(word2)); 8990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memcpy(buf->v, word2, buf->l); 9000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_md5_update(ctx, buf); 9010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res = eay_md5_final(ctx); 9020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res); 9030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res); 9040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang res = eay_md5_one(buf); 9060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(res); 9070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(res); 9080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(buf); 9090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return 0; 9110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 9120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint 9140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangdhtest(ac, av) 9150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int ac; 9160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char **av; 9170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 9180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang static struct { 9190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *name; 9200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *p; 9210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } px[] = { 9220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "modp768", OAKLEY_PRIME_MODP768, }, 9230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "modp1024", OAKLEY_PRIME_MODP1024, }, 9240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "modp1536", OAKLEY_PRIME_MODP1536, }, 9250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "modp2048", OAKLEY_PRIME_MODP2048, }, 9260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "modp3072", OAKLEY_PRIME_MODP3072, }, 9270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "modp4096", OAKLEY_PRIME_MODP4096, }, 9280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "modp6144", OAKLEY_PRIME_MODP6144, }, 9290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "modp8192", OAKLEY_PRIME_MODP8192, }, 9300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang }; 9310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t p1, *pub1, *priv1, *gxy1; 9320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t p2, *pub2, *priv2, *gxy2; 9330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int i; 9340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\n**Test for DH.**\n"); 9360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang for (i = 0; i < sizeof(px)/sizeof(px[0]); i++) { 9380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\n**Test for DH %s.**\n", px[i].name); 9390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang p1.v = str2val(px[i].p, 16, &p1.l); 9410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang p2.v = str2val(px[i].p, 16, &p2.l); 9420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("prime number = \n"); PVDUMP(&p1); 9430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (eay_dh_generate(&p1, 2, 96, &pub1, &priv1) < 0) { 9450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("error\n"); 9460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 9470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 9480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("private key for user 1 = \n"); PVDUMP(priv1); 9490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("public key for user 1 = \n"); PVDUMP(pub1); 9500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (eay_dh_generate(&p2, 2, 96, &pub2, &priv2) < 0) { 9520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("error\n"); 9530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 9540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 9550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("private key for user 2 = \n"); PVDUMP(priv2); 9560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("public key for user 2 = \n"); PVDUMP(pub2); 9570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* process to generate key for user 1 */ 9590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang gxy1 = vmalloc(p1.l); 9600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memset(gxy1->v, 0, gxy1->l); 9610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_dh_compute(&p1, 2, pub1, priv1, pub2, &gxy1); 9620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("sharing gxy1 of user 1 = \n"); PVDUMP(gxy1); 9630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang /* process to generate key for user 2 */ 9650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang gxy2 = vmalloc(p1.l); 9660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang memset(gxy2->v, 0, gxy2->l); 9670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang eay_dh_compute(&p2, 2, pub2, priv2, pub1, &gxy2); 9680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("sharing gxy2 of user 2 = \n"); PVDUMP(gxy2); 9690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (memcmp(gxy1->v, gxy2->v, gxy1->l)) { 9710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("ERROR: sharing gxy mismatched.\n"); 9720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return -1; 9730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 9740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(pub1); 9760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(pub2); 9770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(priv1); 9780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(priv2); 9790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(gxy1); 9800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(gxy2); 9810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 9820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return 0; 9840a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 9850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint 9870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangbntest(ac, av) 9880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int ac; 9890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char **av; 9900a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 9910a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vchar_t *rn; 9920a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9930a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("\n**Test for generate a random number.**\n"); 9940a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9950a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang rn = eay_set_random((u_int32_t)96); 9960a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang PVDUMP(rn); 9970a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang vfree(rn); 9980a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 9990a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang return 0; 10000a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 10010a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 10020a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstruct { 10030a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char *name; 10040a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int (*func) __P((int, char **)); 10050a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} func[] = { 10060a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "random", bntest, }, 10070a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "dh", dhtest, }, 10080a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "md5", md5test, }, 10090a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "sha1", sha1test, }, 10100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "hmac", hmactest, }, 10110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "cipher", ciphertest, }, 10120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef CERTTEST_BROKEN 10130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "cert", certtest, }, 10140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 10150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang { "rsa", rsatest, }, 10160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}; 10170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 10180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangint 10190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangmain(ac, av) 10200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int ac; 10210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang char **av; 10220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 10230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int i; 10240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int len = sizeof(func)/sizeof(func[0]); 10250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 10260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang f_foreground = 1; 10270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang ploginit(); 10280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 10290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf ("\nTestsuite of the %s\nlinked with %s\n\n", TOP_PACKAGE_STRING, eay_version()); 10300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 10310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (strcmp(*av, "-h") == 0) 10320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang Usage(); 10330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 10340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang ac--; 10350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang av++; 10360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 10370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang for (i = 0; i < len; i++) { 10380a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if ((ac == 0) || (strcmp(*av, func[i].name) == 0)) { 10390a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if ((func[i].func)(ac, av) != 0) { 10400a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf ("\n!!!!! Test '%s' failed. !!!!!\n\n", func[i].name); 10410a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang exit(1); 10420a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 10430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ac) 10440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang break; 10450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 10460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang } 10470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang if (ac && i == len) 10480a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang Usage(); 10490a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 10500a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf ("\n===== All tests passed =====\n\n"); 10510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang exit(0); 10520a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 10530a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 10540a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangvoid 10550a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih WangUsage() 10560a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang{ 10570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int i; 10580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang int len = sizeof(func)/sizeof(func[0]); 10590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 10600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("Usage: eaytest ["); 10610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang for (i = 0; i < len; i++) 10620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("%s%s", func[i].name, (i<len-1)?"|":""); 10630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf("]\n"); 10640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef CERTTEST_BROKEN 10650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang printf(" eaytest cert [cert_directory]\n"); 10660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif 10670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang exit(1); 10680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang} 10690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 1070