summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/x_pubkey.c
diff options
context:
space:
mode:
authorbeck <>2002-05-15 02:29:21 +0000
committerbeck <>2002-05-15 02:29:21 +0000
commitb64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9 (patch)
treefa27cf82a1250b64ed3bf5f4a18c7354d470bbcc /src/lib/libcrypto/asn1/x_pubkey.c
parente471e1ea98d673597b182ea85f29e30c97cd08b5 (diff)
downloadopenbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.gz
openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.bz2
openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.zip
OpenSSL 0.9.7 stable 2002 05 08 merge
Diffstat (limited to 'src/lib/libcrypto/asn1/x_pubkey.c')
-rw-r--r--src/lib/libcrypto/asn1/x_pubkey.c80
1 files changed, 22 insertions, 58 deletions
diff --git a/src/lib/libcrypto/asn1/x_pubkey.c b/src/lib/libcrypto/asn1/x_pubkey.c
index 4397a404b5..55630294b6 100644
--- a/src/lib/libcrypto/asn1/x_pubkey.c
+++ b/src/lib/libcrypto/asn1/x_pubkey.c
@@ -58,62 +58,25 @@
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include "cryptlib.h" 60#include "cryptlib.h"
61#include <openssl/asn1_mac.h> 61#include <openssl/asn1t.h>
62#include <openssl/x509.h> 62#include <openssl/x509.h>
63 63
64int i2d_X509_PUBKEY(X509_PUBKEY *a, unsigned char **pp) 64/* Minor tweak to operation: free up EVP_PKEY */
65 { 65static int pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it)
66 M_ASN1_I2D_vars(a); 66{
67 67 if(operation == ASN1_OP_FREE_POST) {
68 M_ASN1_I2D_len(a->algor, i2d_X509_ALGOR); 68 X509_PUBKEY *pubkey = (X509_PUBKEY *)*pval;
69 M_ASN1_I2D_len(a->public_key, i2d_ASN1_BIT_STRING); 69 EVP_PKEY_free(pubkey->pkey);
70
71 M_ASN1_I2D_seq_total();
72
73 M_ASN1_I2D_put(a->algor, i2d_X509_ALGOR);
74 M_ASN1_I2D_put(a->public_key, i2d_ASN1_BIT_STRING);
75
76 M_ASN1_I2D_finish();
77 }
78
79X509_PUBKEY *d2i_X509_PUBKEY(X509_PUBKEY **a, unsigned char **pp,
80 long length)
81 {
82 M_ASN1_D2I_vars(a,X509_PUBKEY *,X509_PUBKEY_new);
83
84 M_ASN1_D2I_Init();
85 M_ASN1_D2I_start_sequence();
86 M_ASN1_D2I_get(ret->algor,d2i_X509_ALGOR);
87 M_ASN1_D2I_get(ret->public_key,d2i_ASN1_BIT_STRING);
88 if (ret->pkey != NULL)
89 {
90 EVP_PKEY_free(ret->pkey);
91 ret->pkey=NULL;
92 }
93 M_ASN1_D2I_Finish(a,X509_PUBKEY_free,ASN1_F_D2I_X509_PUBKEY);
94 } 70 }
71 return 1;
72}
95 73
96X509_PUBKEY *X509_PUBKEY_new(void) 74ASN1_SEQUENCE_cb(X509_PUBKEY, pubkey_cb) = {
97 { 75 ASN1_SIMPLE(X509_PUBKEY, algor, X509_ALGOR),
98 X509_PUBKEY *ret=NULL; 76 ASN1_SIMPLE(X509_PUBKEY, public_key, ASN1_BIT_STRING)
99 ASN1_CTX c; 77} ASN1_SEQUENCE_END_cb(X509_PUBKEY, X509_PUBKEY)
100
101 M_ASN1_New_Malloc(ret,X509_PUBKEY);
102 M_ASN1_New(ret->algor,X509_ALGOR_new);
103 M_ASN1_New(ret->public_key,M_ASN1_BIT_STRING_new);
104 ret->pkey=NULL;
105 return(ret);
106 M_ASN1_New_Error(ASN1_F_X509_PUBKEY_NEW);
107 }
108 78
109void X509_PUBKEY_free(X509_PUBKEY *a) 79IMPLEMENT_ASN1_FUNCTIONS(X509_PUBKEY)
110 {
111 if (a == NULL) return;
112 X509_ALGOR_free(a->algor);
113 M_ASN1_BIT_STRING_free(a->public_key);
114 if (a->pkey != NULL) EVP_PKEY_free(a->pkey);
115 OPENSSL_free(a);
116 }
117 80
118int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) 81int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
119 { 82 {
@@ -146,7 +109,7 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
146 } 109 }
147 } 110 }
148 else 111 else
149#ifndef NO_DSA 112#ifndef OPENSSL_NO_DSA
150 if (pkey->type == EVP_PKEY_DSA) 113 if (pkey->type == EVP_PKEY_DSA)
151 { 114 {
152 unsigned char *pp; 115 unsigned char *pp;
@@ -206,7 +169,8 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
206 long j; 169 long j;
207 int type; 170 int type;
208 unsigned char *p; 171 unsigned char *p;
209#ifndef NO_DSA 172#ifndef OPENSSL_NO_DSA
173 const unsigned char *cp;
210 X509_ALGOR *a; 174 X509_ALGOR *a;
211#endif 175#endif
212 176
@@ -230,16 +194,16 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
230 } 194 }
231 ret->save_parameters=0; 195 ret->save_parameters=0;
232 196
233#ifndef NO_DSA 197#ifndef OPENSSL_NO_DSA
234 a=key->algor; 198 a=key->algor;
235 if (ret->type == EVP_PKEY_DSA) 199 if (ret->type == EVP_PKEY_DSA)
236 { 200 {
237 if (a->parameter && (a->parameter->type == V_ASN1_SEQUENCE)) 201 if (a->parameter && (a->parameter->type == V_ASN1_SEQUENCE))
238 { 202 {
239 ret->pkey.dsa->write_params=0; 203 ret->pkey.dsa->write_params=0;
240 p=a->parameter->value.sequence->data; 204 cp=p=a->parameter->value.sequence->data;
241 j=a->parameter->value.sequence->length; 205 j=a->parameter->value.sequence->length;
242 if (!d2i_DSAparams(&ret->pkey.dsa,&p,(long)j)) 206 if (!d2i_DSAparams(&ret->pkey.dsa,&cp,(long)j))
243 goto err; 207 goto err;
244 } 208 }
245 ret->save_parameters=1; 209 ret->save_parameters=1;
@@ -289,7 +253,7 @@ int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp)
289/* The following are equivalents but which return RSA and DSA 253/* The following are equivalents but which return RSA and DSA
290 * keys 254 * keys
291 */ 255 */
292#ifndef NO_RSA 256#ifndef OPENSSL_NO_RSA
293RSA *d2i_RSA_PUBKEY(RSA **a, unsigned char **pp, 257RSA *d2i_RSA_PUBKEY(RSA **a, unsigned char **pp,
294 long length) 258 long length)
295{ 259{
@@ -327,7 +291,7 @@ int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp)
327} 291}
328#endif 292#endif
329 293
330#ifndef NO_DSA 294#ifndef OPENSSL_NO_DSA
331DSA *d2i_DSA_PUBKEY(DSA **a, unsigned char **pp, 295DSA *d2i_DSA_PUBKEY(DSA **a, unsigned char **pp,
332 long length) 296 long length)
333{ 297{