diff options
author | beck <> | 1999-09-29 04:37:45 +0000 |
---|---|---|
committer | beck <> | 1999-09-29 04:37:45 +0000 |
commit | de8f24ea083384bb66b32ec105dc4743c5663cdf (patch) | |
tree | 1412176ae62a3cab2cf2b0b92150fcbceaac6092 /src/lib/libcrypto/asn1/x_pubkey.c | |
parent | cb929d29896bcb87c2a97417fbd03e50078fc178 (diff) | |
download | openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.gz openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.bz2 openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.zip |
OpenSSL 0.9.4 merge
Diffstat (limited to 'src/lib/libcrypto/asn1/x_pubkey.c')
-rw-r--r-- | src/lib/libcrypto/asn1/x_pubkey.c | 44 |
1 files changed, 21 insertions, 23 deletions
diff --git a/src/lib/libcrypto/asn1/x_pubkey.c b/src/lib/libcrypto/asn1/x_pubkey.c index a309cf74a7..4ac32c59dd 100644 --- a/src/lib/libcrypto/asn1/x_pubkey.c +++ b/src/lib/libcrypto/asn1/x_pubkey.c | |||
@@ -58,16 +58,10 @@ | |||
58 | 58 | ||
59 | #include <stdio.h> | 59 | #include <stdio.h> |
60 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
61 | #include "asn1_mac.h" | 61 | #include <openssl/asn1_mac.h> |
62 | #include <openssl/x509.h> | ||
62 | 63 | ||
63 | /* | 64 | int i2d_X509_PUBKEY(X509_PUBKEY *a, unsigned char **pp) |
64 | * ASN1err(ASN1_F_D2I_X509_PUBKEY,ASN1_R_LENGTH_MISMATCH); | ||
65 | * ASN1err(ASN1_F_X509_PUBKEY_NEW,ASN1_R_LENGTH_MISMATCH); | ||
66 | */ | ||
67 | |||
68 | int i2d_X509_PUBKEY(a,pp) | ||
69 | X509_PUBKEY *a; | ||
70 | unsigned char **pp; | ||
71 | { | 65 | { |
72 | M_ASN1_I2D_vars(a); | 66 | M_ASN1_I2D_vars(a); |
73 | 67 | ||
@@ -82,10 +76,8 @@ unsigned char **pp; | |||
82 | M_ASN1_I2D_finish(); | 76 | M_ASN1_I2D_finish(); |
83 | } | 77 | } |
84 | 78 | ||
85 | X509_PUBKEY *d2i_X509_PUBKEY(a,pp,length) | 79 | X509_PUBKEY *d2i_X509_PUBKEY(X509_PUBKEY **a, unsigned char **pp, |
86 | X509_PUBKEY **a; | 80 | long length) |
87 | unsigned char **pp; | ||
88 | long length; | ||
89 | { | 81 | { |
90 | M_ASN1_D2I_vars(a,X509_PUBKEY *,X509_PUBKEY_new); | 82 | M_ASN1_D2I_vars(a,X509_PUBKEY *,X509_PUBKEY_new); |
91 | 83 | ||
@@ -101,9 +93,10 @@ long length; | |||
101 | M_ASN1_D2I_Finish(a,X509_PUBKEY_free,ASN1_F_D2I_X509_PUBKEY); | 93 | M_ASN1_D2I_Finish(a,X509_PUBKEY_free,ASN1_F_D2I_X509_PUBKEY); |
102 | } | 94 | } |
103 | 95 | ||
104 | X509_PUBKEY *X509_PUBKEY_new() | 96 | X509_PUBKEY *X509_PUBKEY_new(void) |
105 | { | 97 | { |
106 | X509_PUBKEY *ret=NULL; | 98 | X509_PUBKEY *ret=NULL; |
99 | ASN1_CTX c; | ||
107 | 100 | ||
108 | M_ASN1_New_Malloc(ret,X509_PUBKEY); | 101 | M_ASN1_New_Malloc(ret,X509_PUBKEY); |
109 | M_ASN1_New(ret->algor,X509_ALGOR_new); | 102 | M_ASN1_New(ret->algor,X509_ALGOR_new); |
@@ -113,8 +106,7 @@ X509_PUBKEY *X509_PUBKEY_new() | |||
113 | M_ASN1_New_Error(ASN1_F_X509_PUBKEY_NEW); | 106 | M_ASN1_New_Error(ASN1_F_X509_PUBKEY_NEW); |
114 | } | 107 | } |
115 | 108 | ||
116 | void X509_PUBKEY_free(a) | 109 | void X509_PUBKEY_free(X509_PUBKEY *a) |
117 | X509_PUBKEY *a; | ||
118 | { | 110 | { |
119 | if (a == NULL) return; | 111 | if (a == NULL) return; |
120 | X509_ALGOR_free(a->algor); | 112 | X509_ALGOR_free(a->algor); |
@@ -123,9 +115,7 @@ X509_PUBKEY *a; | |||
123 | Free((char *)a); | 115 | Free((char *)a); |
124 | } | 116 | } |
125 | 117 | ||
126 | int X509_PUBKEY_set(x,pkey) | 118 | int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) |
127 | X509_PUBKEY **x; | ||
128 | EVP_PKEY *pkey; | ||
129 | { | 119 | { |
130 | int ok=0; | 120 | int ok=0; |
131 | X509_PUBKEY *pk; | 121 | X509_PUBKEY *pk; |
@@ -182,11 +172,15 @@ EVP_PKEY *pkey; | |||
182 | goto err; | 172 | goto err; |
183 | } | 173 | } |
184 | 174 | ||
185 | i=i2d_PublicKey(pkey,NULL); | 175 | if ((i=i2d_PublicKey(pkey,NULL)) <= 0) goto err; |
186 | if ((s=(unsigned char *)Malloc(i+1)) == NULL) goto err; | 176 | if ((s=(unsigned char *)Malloc(i+1)) == NULL) goto err; |
187 | p=s; | 177 | p=s; |
188 | i2d_PublicKey(pkey,&p); | 178 | i2d_PublicKey(pkey,&p); |
189 | if (!ASN1_BIT_STRING_set(pk->public_key,s,i)) goto err; | 179 | if (!ASN1_BIT_STRING_set(pk->public_key,s,i)) goto err; |
180 | /* Set number of unused bits to zero */ | ||
181 | pk->public_key->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); | ||
182 | pk->public_key->flags|=ASN1_STRING_FLAG_BITS_LEFT; | ||
183 | |||
190 | Free(s); | 184 | Free(s); |
191 | 185 | ||
192 | CRYPTO_add(&pkey->references,1,CRYPTO_LOCK_EVP_PKEY); | 186 | CRYPTO_add(&pkey->references,1,CRYPTO_LOCK_EVP_PKEY); |
@@ -204,8 +198,7 @@ err: | |||
204 | return(ok); | 198 | return(ok); |
205 | } | 199 | } |
206 | 200 | ||
207 | EVP_PKEY *X509_PUBKEY_get(key) | 201 | EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) |
208 | X509_PUBKEY *key; | ||
209 | { | 202 | { |
210 | EVP_PKEY *ret=NULL; | 203 | EVP_PKEY *ret=NULL; |
211 | long j; | 204 | long j; |
@@ -217,7 +210,11 @@ X509_PUBKEY *key; | |||
217 | 210 | ||
218 | if (key == NULL) goto err; | 211 | if (key == NULL) goto err; |
219 | 212 | ||
220 | if (key->pkey != NULL) return(key->pkey); | 213 | if (key->pkey != NULL) |
214 | { | ||
215 | CRYPTO_add(&key->pkey->references,1,CRYPTO_LOCK_EVP_PKEY); | ||
216 | return(key->pkey); | ||
217 | } | ||
221 | 218 | ||
222 | if (key->public_key == NULL) goto err; | 219 | if (key->public_key == NULL) goto err; |
223 | 220 | ||
@@ -247,6 +244,7 @@ X509_PUBKEY *key; | |||
247 | } | 244 | } |
248 | #endif | 245 | #endif |
249 | key->pkey=ret; | 246 | key->pkey=ret; |
247 | CRYPTO_add(&ret->references,1,CRYPTO_LOCK_EVP_PKEY); | ||
250 | return(ret); | 248 | return(ret); |
251 | err: | 249 | err: |
252 | if (ret != NULL) | 250 | if (ret != NULL) |