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