]> git.ipfire.org Git - thirdparty/openssl.git/blob - demos/sign/sig.txt
Import of old SSLeay release: SSLeay 0.8.1b
[thirdparty/openssl.git] / demos / sign / sig.txt
1 From ssl-lists-owner@mincom.com Mon Sep 30 02:37:40 1996
2 Received: from cygnus.mincom.oz.au by orb.mincom.oz.au with SMTP id AA11782
3 (5.65c/IDA-1.4.4 for eay); Mon, 30 Sep 1996 11:46:21 +1000
4 Received: (from daemon@localhost) by cygnus.mincom.oz.au (8.7.5/8.7.3) id LAA18980 for ssl-users-outgoing; Mon, 30 Sep 1996 11:44:56 +1000 (EST)
5 Received: from minbne.mincom.oz.au (minbne.mincom.oz.au [192.55.196.247]) by cygnus.mincom.oz.au (8.7.5/8.7.3) with SMTP id LAA18962 for <ssl-users@listserv.mincom.oz.au>; Mon, 30 Sep 1996 11:44:51 +1000 (EST)
6 Received: by minbne.mincom.oz.au id AA22230
7 (5.65c/IDA-1.4.4 for ssl-users@listserv.mincom.oz.au); Mon, 30 Sep 1996 11:38:41 +1000
8 Received: from brutus.neuronio.pt (brutus.neuronio.pt [193.126.253.2]) by bunyip.cc.uq.oz.au (8.7.6/8.7.3) with SMTP id LAA15824 for <ssl-users@mincom.com>; Mon, 30 Sep 1996 11:40:07 +1000
9 Received: (from sampo@localhost) by brutus.neuronio.pt (8.6.11/8.6.11) id BAA08729; Mon, 30 Sep 1996 01:37:40 +0100
10 Date: Mon, 30 Sep 1996 01:37:40 +0100
11 Message-Id: <199609300037.BAA08729@brutus.neuronio.pt>
12 From: Sampo Kellomaki <sampo@neuronio.pt>
13 To: ssl-users@mincom.com
14 Cc: sampo@brutus.neuronio.pt
15 Subject: Signing with envelope routines
16 Sender: ssl-lists-owner@mincom.com
17 Precedence: bulk
18 Status: RO
19 X-Status: D
20
21
22 I have been trying to figure out how to produce signatures with EVP_
23 routines. I seem to be able to read in private key and sign some
24 data ok, but I can't figure out how I am supposed to read in
25 public key so that I could verify my signature. I use self signed
26 certificate.
27
28 I figured I should use
29 EVP_PKEY* pkey = PEM_ASN1_read(d2i_PrivateKey, PEM_STRING_EVP_PKEY,
30 fp, NULL, NULL);
31 to read in private key and this seems to work Ok.
32
33 However when I try analogous
34 EVP_PKEY* pkey = PEM_ASN1_read(d2i_PublicKey, PEM_STRING_X509,
35 fp, NULL, NULL);
36 the program fails with
37
38 error:0D09508D:asn1 encoding routines:D2I_PUBLICKEY:unknown public key type:d2i_pu.c:93
39 error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:pem_lib.c:232
40
41 I figured that the second argument to PEM_ASN1_read should match the
42 name in my PEM encoded object, hence PEM_STRING_X509.
43 PEM_STRING_EVP_PKEY seems to be somehow magical
44 because it matches whatever private key there happens to be. I could
45 not find a similar constant to use with getting the certificate, however.
46
47 Is my approach of using PEM_ASN1_read correct? What should I pass in
48 as name? Can I use normal (or even self signed) X509 certificate for
49 verifying the signature?
50
51 When will SSLeay documentation be written ;-)? If I would contribute
52 comments to the code, would Eric take time to review them and include
53 them in distribution?
54
55 I'm using SSLeay-0.6.4. My program is included below along with the
56 key and cert that I use.
57
58 --Sampo
59
60 -----------------------------------
61 /* sign-it.cpp - Simple test app using SSLeay envelopes to sign data
62 29.9.1996, Sampo Kellomaki <sampo@iki.fi> */
63
64 #include <stdio.h>
65 #include "rsa.h"
66 #include "evp.h"
67 #include "objects.h"
68 #include "x509.h"
69 #include "err.h"
70 #include "pem.h"
71 #include "ssl.h"
72
73 void main ()
74 {
75 int err;
76 int sig_len;
77 unsigned char sig_buf [4096];
78 const char certfile[] = "plain-cert.pem";
79 const char keyfile[] = "plain-key.pem";
80 const char data[] = "I owe you...";
81 EVP_MD_CTX md_ctx;
82 EVP_PKEY* pkey;
83 FILE* fp;
84
85 SSL_load_error_strings();
86
87 /* Read private key */
88
89 fp = fopen (keyfile, "r"); if (fp == NULL) exit (1);
90 pkey = (EVP_PKEY*)PEM_ASN1_read ((char *(*)())d2i_PrivateKey,
91 PEM_STRING_EVP_PKEY,
92 fp,
93 NULL, NULL);
94 if (pkey == NULL) { ERR_print_errors_fp (stderr); exit (1); }
95 fclose (fp);
96
97 /* Do the signature */
98
99 EVP_SignInit (&md_ctx, EVP_md5());
100 EVP_SignUpdate (&md_ctx, data, strlen(data));
101 sig_len = sizeof(sig_buf);
102 err = EVP_SignFinal (&md_ctx,
103 sig_buf,
104 &sig_len,
105 pkey);
106 if (err != 1) { ERR_print_errors_fp (stderr); exit (1); }
107 EVP_PKEY_free (pkey);
108
109 /* Read public key */
110
111 fp = fopen (certfile, "r"); if (fp == NULL) exit (1);
112 pkey = (EVP_PKEY*)PEM_ASN1_read ((char *(*)())d2i_PublicKey,
113 PEM_STRING_X509,
114 fp,
115 NULL, NULL);
116 if (pkey == NULL) { ERR_print_errors_fp (stderr); exit (1); }
117 fclose (fp);
118
119 /* Verify the signature */
120
121 EVP_VerifyInit (&md_ctx, EVP_md5());
122 EVP_VerifyUpdate (&md_ctx, data, strlen((char*)data));
123 err = EVP_VerifyFinal (&md_ctx,
124 sig_buf,
125 sig_len,
126 pkey);
127 if (err != 1) { ERR_print_errors_fp (stderr); exit (1); }
128 EVP_PKEY_free (pkey);
129 printf ("Signature Verified Ok.\n");
130 }
131 /* EOF */
132 --------------- plain-cert.pem -----------------
133 -----BEGIN CERTIFICATE-----
134 MIICLDCCAdYCAQAwDQYJKoZIhvcNAQEEBQAwgaAxCzAJBgNVBAYTAlBUMRMwEQYD
135 VQQIEwpRdWVlbnNsYW5kMQ8wDQYDVQQHEwZMaXNib2ExFzAVBgNVBAoTDk5ldXJv
136 bmlvLCBMZGEuMRgwFgYDVQQLEw9EZXNlbnZvbHZpbWVudG8xGzAZBgNVBAMTEmJy
137 dXR1cy5uZXVyb25pby5wdDEbMBkGCSqGSIb3DQEJARYMc2FtcG9AaWtpLmZpMB4X
138 DTk2MDkwNTAzNDI0M1oXDTk2MTAwNTAzNDI0M1owgaAxCzAJBgNVBAYTAlBUMRMw
139 EQYDVQQIEwpRdWVlbnNsYW5kMQ8wDQYDVQQHEwZMaXNib2ExFzAVBgNVBAoTDk5l
140 dXJvbmlvLCBMZGEuMRgwFgYDVQQLEw9EZXNlbnZvbHZpbWVudG8xGzAZBgNVBAMT
141 EmJydXR1cy5uZXVyb25pby5wdDEbMBkGCSqGSIb3DQEJARYMc2FtcG9AaWtpLmZp
142 MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL7+aty3S1iBA/+yxjxv4q1MUTd1kjNw
143 L4lYKbpzzlmC5beaQXeQ2RmGMTXU+mDvuqItjVHOK3DvPK7lTcSGftUCAwEAATAN
144 BgkqhkiG9w0BAQQFAANBAFqPEKFjk6T6CKTHvaQeEAsX0/8YHPHqH/9AnhSjrwuX
145 9EBc0n6bVGhN7XaXd6sJ7dym9sbsWxb+pJdurnkxjx4=
146 -----END CERTIFICATE-----
147 ---------------- plain-key.pem -----------------
148 -----BEGIN RSA PRIVATE KEY-----
149 MIIBPAIBAAJBAL7+aty3S1iBA/+yxjxv4q1MUTd1kjNwL4lYKbpzzlmC5beaQXeQ
150 2RmGMTXU+mDvuqItjVHOK3DvPK7lTcSGftUCAwEAAQJBALjkK+jc2+iihI98riEF
151 oudmkNziSRTYjnwjx8mCoAjPWviB3c742eO3FG4/soi1jD9A5alihEOXfUzloenr
152 8IECIQD3B5+0l+68BA/6d76iUNqAAV8djGTzvxnCxycnxPQydQIhAMXt4trUI3nc
153 a+U8YL2HPFA3gmhBsSICbq2OptOCnM7hAiEA6Xi3JIQECob8YwkRj29DU3/4WYD7
154 WLPgsQpwo1GuSpECICGsnWH5oaeD9t9jbFoSfhJvv0IZmxdcLpRcpslpeWBBAiEA
155 6/5B8J0GHdJq89FHwEG/H2eVVUYu5y/aD6sgcm+0Avg=
156 -----END RSA PRIVATE KEY-----
157 ------------------------------------------------
158