diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/x_pubkey.c')
-rw-r--r-- | src/lib/libcrypto/asn1/x_pubkey.c | 50 |
1 files changed, 12 insertions, 38 deletions
diff --git a/src/lib/libcrypto/asn1/x_pubkey.c b/src/lib/libcrypto/asn1/x_pubkey.c index 7d6d71af88..d958540120 100644 --- a/src/lib/libcrypto/asn1/x_pubkey.c +++ b/src/lib/libcrypto/asn1/x_pubkey.c | |||
@@ -80,7 +80,8 @@ IMPLEMENT_ASN1_FUNCTIONS(X509_PUBKEY) | |||
80 | 80 | ||
81 | int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | 81 | int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) |
82 | { | 82 | { |
83 | X509_PUBKEY *pk=NULL; | 83 | int ok=0; |
84 | X509_PUBKEY *pk; | ||
84 | X509_ALGOR *a; | 85 | X509_ALGOR *a; |
85 | ASN1_OBJECT *o; | 86 | ASN1_OBJECT *o; |
86 | unsigned char *s,*p = NULL; | 87 | unsigned char *s,*p = NULL; |
@@ -103,11 +104,7 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | |||
103 | (a->parameter->type != V_ASN1_NULL)) | 104 | (a->parameter->type != V_ASN1_NULL)) |
104 | { | 105 | { |
105 | ASN1_TYPE_free(a->parameter); | 106 | ASN1_TYPE_free(a->parameter); |
106 | if (!(a->parameter=ASN1_TYPE_new())) | 107 | a->parameter=ASN1_TYPE_new(); |
107 | { | ||
108 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
109 | goto err; | ||
110 | } | ||
111 | a->parameter->type=V_ASN1_NULL; | 108 | a->parameter->type=V_ASN1_NULL; |
112 | } | 109 | } |
113 | } | 110 | } |
@@ -121,34 +118,14 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | |||
121 | dsa=pkey->pkey.dsa; | 118 | dsa=pkey->pkey.dsa; |
122 | dsa->write_params=0; | 119 | dsa->write_params=0; |
123 | ASN1_TYPE_free(a->parameter); | 120 | ASN1_TYPE_free(a->parameter); |
124 | if ((i=i2d_DSAparams(dsa,NULL)) <= 0) | 121 | i=i2d_DSAparams(dsa,NULL); |
125 | goto err; | 122 | if ((p=(unsigned char *)OPENSSL_malloc(i)) == NULL) goto err; |
126 | if (!(p=(unsigned char *)OPENSSL_malloc(i))) | ||
127 | { | ||
128 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
129 | goto err; | ||
130 | } | ||
131 | pp=p; | 123 | pp=p; |
132 | i2d_DSAparams(dsa,&pp); | 124 | i2d_DSAparams(dsa,&pp); |
133 | if (!(a->parameter=ASN1_TYPE_new())) | 125 | a->parameter=ASN1_TYPE_new(); |
134 | { | ||
135 | OPENSSL_free(p); | ||
136 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
137 | goto err; | ||
138 | } | ||
139 | a->parameter->type=V_ASN1_SEQUENCE; | 126 | a->parameter->type=V_ASN1_SEQUENCE; |
140 | if (!(a->parameter->value.sequence=ASN1_STRING_new())) | 127 | a->parameter->value.sequence=ASN1_STRING_new(); |
141 | { | 128 | ASN1_STRING_set(a->parameter->value.sequence,p,i); |
142 | OPENSSL_free(p); | ||
143 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
144 | goto err; | ||
145 | } | ||
146 | if (!ASN1_STRING_set(a->parameter->value.sequence,p,i)) | ||
147 | { | ||
148 | OPENSSL_free(p); | ||
149 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
150 | goto err; | ||
151 | } | ||
152 | OPENSSL_free(p); | 129 | OPENSSL_free(p); |
153 | } | 130 | } |
154 | else | 131 | else |
@@ -166,11 +143,7 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | |||
166 | } | 143 | } |
167 | p=s; | 144 | p=s; |
168 | i2d_PublicKey(pkey,&p); | 145 | i2d_PublicKey(pkey,&p); |
169 | if (!M_ASN1_BIT_STRING_set(pk->public_key,s,i)) | 146 | if (!M_ASN1_BIT_STRING_set(pk->public_key,s,i)) goto err; |
170 | { | ||
171 | X509err(X509_F_X509_PUBKEY_SET,ERR_R_MALLOC_FAILURE); | ||
172 | goto err; | ||
173 | } | ||
174 | /* Set number of unused bits to zero */ | 147 | /* Set number of unused bits to zero */ |
175 | pk->public_key->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); | 148 | pk->public_key->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); |
176 | pk->public_key->flags|=ASN1_STRING_FLAG_BITS_LEFT; | 149 | pk->public_key->flags|=ASN1_STRING_FLAG_BITS_LEFT; |
@@ -186,11 +159,12 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | |||
186 | X509_PUBKEY_free(*x); | 159 | X509_PUBKEY_free(*x); |
187 | 160 | ||
188 | *x=pk; | 161 | *x=pk; |
162 | pk=NULL; | ||
189 | 163 | ||
190 | return 1; | 164 | ok=1; |
191 | err: | 165 | err: |
192 | if (pk != NULL) X509_PUBKEY_free(pk); | 166 | if (pk != NULL) X509_PUBKEY_free(pk); |
193 | return 0; | 167 | return(ok); |
194 | } | 168 | } |
195 | 169 | ||
196 | EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) | 170 | EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) |