summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/x_pubkey.c
diff options
context:
space:
mode:
authorbeck <>1999-09-29 04:37:45 +0000
committerbeck <>1999-09-29 04:37:45 +0000
commitde8f24ea083384bb66b32ec105dc4743c5663cdf (patch)
tree1412176ae62a3cab2cf2b0b92150fcbceaac6092 /src/lib/libcrypto/asn1/x_pubkey.c
parentcb929d29896bcb87c2a97417fbd03e50078fc178 (diff)
downloadopenbsd-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.c44
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/* 64int 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
68int i2d_X509_PUBKEY(a,pp)
69X509_PUBKEY *a;
70unsigned 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
85X509_PUBKEY *d2i_X509_PUBKEY(a,pp,length) 79X509_PUBKEY *d2i_X509_PUBKEY(X509_PUBKEY **a, unsigned char **pp,
86X509_PUBKEY **a; 80 long length)
87unsigned char **pp;
88long 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
104X509_PUBKEY *X509_PUBKEY_new() 96X509_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
116void X509_PUBKEY_free(a) 109void X509_PUBKEY_free(X509_PUBKEY *a)
117X509_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
126int X509_PUBKEY_set(x,pkey) 118int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
127X509_PUBKEY **x;
128EVP_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
207EVP_PKEY *X509_PUBKEY_get(key) 201EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
208X509_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);
251err: 249err:
252 if (ret != NULL) 250 if (ret != NULL)