diff options
Diffstat (limited to 'src')
34 files changed, 1324 insertions, 1030 deletions
| diff --git a/src/lib/libcrypto/asn1/x_algor.c b/src/lib/libcrypto/asn1/x_algor.c index 7ae473485c..65f81e8692 100644 --- a/src/lib/libcrypto/asn1/x_algor.c +++ b/src/lib/libcrypto/asn1/x_algor.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -66,8 +66,8 @@ ASN1_SEQUENCE(X509_ALGOR) = { | |||
| 66 | ASN1_OPT(X509_ALGOR, parameter, ASN1_ANY) | 66 | ASN1_OPT(X509_ALGOR, parameter, ASN1_ANY) | 
| 67 | } ASN1_SEQUENCE_END(X509_ALGOR) | 67 | } ASN1_SEQUENCE_END(X509_ALGOR) | 
| 68 | 68 | ||
| 69 | ASN1_ITEM_TEMPLATE(X509_ALGORS) = | 69 | ASN1_ITEM_TEMPLATE(X509_ALGORS) = | 
| 70 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR) | 70 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR) | 
| 71 | ASN1_ITEM_TEMPLATE_END(X509_ALGORS) | 71 | ASN1_ITEM_TEMPLATE_END(X509_ALGORS) | 
| 72 | 72 | ||
| 73 | IMPLEMENT_ASN1_FUNCTIONS(X509_ALGOR) | 73 | IMPLEMENT_ASN1_FUNCTIONS(X509_ALGOR) | 
| @@ -77,7 +77,8 @@ IMPLEMENT_ASN1_DUP_FUNCTION(X509_ALGOR) | |||
| 77 | IMPLEMENT_STACK_OF(X509_ALGOR) | 77 | IMPLEMENT_STACK_OF(X509_ALGOR) | 
| 78 | IMPLEMENT_ASN1_SET_OF(X509_ALGOR) | 78 | IMPLEMENT_ASN1_SET_OF(X509_ALGOR) | 
| 79 | 79 | ||
| 80 | int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval) | 80 | int | 
| 81 | X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval) | ||
| 81 | { | 82 | { | 
| 82 | if (!alg) | 83 | if (!alg) | 
| 83 | return 0; | 84 | return 0; | 
| @@ -93,20 +94,20 @@ int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval) | |||
| 93 | alg->algorithm = aobj; | 94 | alg->algorithm = aobj; | 
| 94 | } | 95 | } | 
| 95 | if (ptype == 0) | 96 | if (ptype == 0) | 
| 96 | return 1; | 97 | return 1; | 
| 97 | if (ptype == V_ASN1_UNDEF) { | 98 | if (ptype == V_ASN1_UNDEF) { | 
| 98 | if (alg->parameter) { | 99 | if (alg->parameter) { | 
| 99 | ASN1_TYPE_free(alg->parameter); | 100 | ASN1_TYPE_free(alg->parameter); | 
| 100 | alg->parameter = NULL; | 101 | alg->parameter = NULL; | 
| 101 | } | 102 | } | 
| 102 | } | 103 | } else | 
| 103 | else | ||
| 104 | ASN1_TYPE_set(alg->parameter, ptype, pval); | 104 | ASN1_TYPE_set(alg->parameter, ptype, pval); | 
| 105 | return 1; | 105 | return 1; | 
| 106 | } | 106 | } | 
| 107 | 107 | ||
| 108 | void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, | 108 | void | 
| 109 | X509_ALGOR *algor) | 109 | X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, | 
| 110 | X509_ALGOR *algor) | ||
| 110 | { | 111 | { | 
| 111 | if (paobj) | 112 | if (paobj) | 
| 112 | *paobj = algor->algorithm; | 113 | *paobj = algor->algorithm; | 
| @@ -114,8 +115,7 @@ void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, | |||
| 114 | if (algor->parameter == NULL) { | 115 | if (algor->parameter == NULL) { | 
| 115 | *pptype = V_ASN1_UNDEF; | 116 | *pptype = V_ASN1_UNDEF; | 
| 116 | return; | 117 | return; | 
| 117 | } | 118 | } else | 
| 118 | else | ||
| 119 | *pptype = algor->parameter->type; | 119 | *pptype = algor->parameter->type; | 
| 120 | if (ppval) | 120 | if (ppval) | 
| 121 | *ppval = algor->parameter->value.ptr; | 121 | *ppval = algor->parameter->value.ptr; | 
| @@ -124,7 +124,8 @@ void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, | |||
| 124 | 124 | ||
| 125 | /* Set up an X509_ALGOR DigestAlgorithmIdentifier from an EVP_MD */ | 125 | /* Set up an X509_ALGOR DigestAlgorithmIdentifier from an EVP_MD */ | 
| 126 | 126 | ||
| 127 | void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md) | 127 | void | 
| 128 | X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md) | ||
| 128 | { | 129 | { | 
| 129 | int param_type; | 130 | int param_type; | 
| 130 | 131 | ||
| @@ -134,5 +135,4 @@ void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md) | |||
| 134 | param_type = V_ASN1_NULL; | 135 | param_type = V_ASN1_NULL; | 
| 135 | 136 | ||
| 136 | X509_ALGOR_set0(alg, OBJ_nid2obj(EVP_MD_type(md)), param_type, NULL); | 137 | X509_ALGOR_set0(alg, OBJ_nid2obj(EVP_MD_type(md)), param_type, NULL); | 
| 137 | |||
| 138 | } | 138 | } | 
| diff --git a/src/lib/libcrypto/asn1/x_attrib.c b/src/lib/libcrypto/asn1/x_attrib.c index e620e1224e..248a6efa4e 100644 --- a/src/lib/libcrypto/asn1/x_attrib.c +++ b/src/lib/libcrypto/asn1/x_attrib.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -96,23 +96,30 @@ ASN1_SEQUENCE(X509_ATTRIBUTE) = { | |||
| 96 | IMPLEMENT_ASN1_FUNCTIONS(X509_ATTRIBUTE) | 96 | IMPLEMENT_ASN1_FUNCTIONS(X509_ATTRIBUTE) | 
| 97 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) | 97 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) | 
| 98 | 98 | ||
| 99 | X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value) | 99 | X509_ATTRIBUTE * | 
| 100 | X509_ATTRIBUTE_create(int nid, int atrtype, void *value) | ||
| 100 | { | 101 | { | 
| 101 | X509_ATTRIBUTE *ret=NULL; | 102 | X509_ATTRIBUTE *ret = NULL; | 
| 102 | ASN1_TYPE *val=NULL; | 103 | ASN1_TYPE *val = NULL; | 
| 104 | |||
| 105 | if ((ret = X509_ATTRIBUTE_new()) == NULL) | ||
| 106 | return (NULL); | ||
| 107 | ret->object = OBJ_nid2obj(nid); | ||
| 108 | ret->single = 0; | ||
| 109 | if ((ret->value.set = sk_ASN1_TYPE_new_null()) == NULL) | ||
| 110 | goto err; | ||
| 111 | if ((val = ASN1_TYPE_new()) == NULL) | ||
| 112 | goto err; | ||
| 113 | if (!sk_ASN1_TYPE_push(ret->value.set, val)) | ||
| 114 | goto err; | ||
| 103 | 115 | ||
| 104 | if ((ret=X509_ATTRIBUTE_new()) == NULL) | 116 | ASN1_TYPE_set(val, atrtype, value); | 
| 105 | return(NULL); | 117 | return (ret); | 
| 106 | ret->object=OBJ_nid2obj(nid); | ||
| 107 | ret->single=0; | ||
| 108 | if ((ret->value.set=sk_ASN1_TYPE_new_null()) == NULL) goto err; | ||
| 109 | if ((val=ASN1_TYPE_new()) == NULL) goto err; | ||
| 110 | if (!sk_ASN1_TYPE_push(ret->value.set,val)) goto err; | ||
| 111 | 118 | ||
| 112 | ASN1_TYPE_set(val,atrtype,value); | ||
| 113 | return(ret); | ||
| 114 | err: | 119 | err: | 
| 115 | if (ret != NULL) X509_ATTRIBUTE_free(ret); | 120 | if (ret != NULL) | 
| 116 | if (val != NULL) ASN1_TYPE_free(val); | 121 | X509_ATTRIBUTE_free(ret); | 
| 117 | return(NULL); | 122 | if (val != NULL) | 
| 123 | ASN1_TYPE_free(val); | ||
| 124 | return (NULL); | ||
| 118 | } | 125 | } | 
| diff --git a/src/lib/libcrypto/asn1/x_bignum.c b/src/lib/libcrypto/asn1/x_bignum.c index 9cf3204a1b..bc74164fdc 100644 --- a/src/lib/libcrypto/asn1/x_bignum.c +++ b/src/lib/libcrypto/asn1/x_bignum.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -72,11 +72,14 @@ | |||
| 72 | static int bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it); | 72 | static int bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it); | 
| 73 | static void bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it); | 73 | static void bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it); | 
| 74 | 74 | ||
| 75 | static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); | 75 | static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, | 
| 76 | static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); | 76 | const ASN1_ITEM *it); | 
| 77 | static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, | ||
| 78 | int utype, char *free_cont, const ASN1_ITEM *it); | ||
| 77 | 79 | ||
| 78 | static ASN1_PRIMITIVE_FUNCS bignum_pf = { | 80 | static ASN1_PRIMITIVE_FUNCS bignum_pf = { | 
| 79 | NULL, 0, | 81 | NULL, | 
| 82 | 0, | ||
| 80 | bn_new, | 83 | bn_new, | 
| 81 | bn_free, | 84 | bn_free, | 
| 82 | 0, | 85 | 0, | 
| @@ -85,55 +88,69 @@ static ASN1_PRIMITIVE_FUNCS bignum_pf = { | |||
| 85 | }; | 88 | }; | 
| 86 | 89 | ||
| 87 | ASN1_ITEM_start(BIGNUM) | 90 | ASN1_ITEM_start(BIGNUM) | 
| 88 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &bignum_pf, 0, "BIGNUM" | 91 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &bignum_pf, 0, "BIGNUM" | 
| 89 | ASN1_ITEM_end(BIGNUM) | 92 | ASN1_ITEM_end(BIGNUM) | 
| 90 | 93 | ||
| 91 | ASN1_ITEM_start(CBIGNUM) | 94 | ASN1_ITEM_start(CBIGNUM) | 
| 92 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &bignum_pf, BN_SENSITIVE, "BIGNUM" | 95 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &bignum_pf, BN_SENSITIVE, "BIGNUM" | 
| 93 | ASN1_ITEM_end(CBIGNUM) | 96 | ASN1_ITEM_end(CBIGNUM) | 
| 94 | 97 | ||
| 95 | static int bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it) | 98 | static int | 
| 99 | bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||
| 96 | { | 100 | { | 
| 97 | *pval = (ASN1_VALUE *)BN_new(); | 101 | *pval = (ASN1_VALUE *)BN_new(); | 
| 98 | if(*pval) return 1; | 102 | if (*pval) | 
| 99 | else return 0; | 103 | return 1; | 
| 104 | else | ||
| 105 | return 0; | ||
| 100 | } | 106 | } | 
| 101 | 107 | ||
| 102 | static void bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | 108 | static void | 
| 109 | bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||
| 103 | { | 110 | { | 
| 104 | if(!*pval) return; | 111 | if (!*pval) | 
| 105 | if(it->size & BN_SENSITIVE) BN_clear_free((BIGNUM *)*pval); | 112 | return; | 
| 106 | else BN_free((BIGNUM *)*pval); | 113 | if (it->size & BN_SENSITIVE) | 
| 114 | BN_clear_free((BIGNUM *)*pval); | ||
| 115 | else | ||
| 116 | BN_free((BIGNUM *)*pval); | ||
| 107 | *pval = NULL; | 117 | *pval = NULL; | 
| 108 | } | 118 | } | 
| 109 | 119 | ||
| 110 | static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it) | 120 | static int | 
| 121 | bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it) | ||
| 111 | { | 122 | { | 
| 112 | BIGNUM *bn; | 123 | BIGNUM *bn; | 
| 113 | int pad; | 124 | int pad; | 
| 114 | if(!*pval) return -1; | 125 | |
| 126 | if (!*pval) | ||
| 127 | return -1; | ||
| 115 | bn = (BIGNUM *)*pval; | 128 | bn = (BIGNUM *)*pval; | 
| 116 | /* If MSB set in an octet we need a padding byte */ | 129 | /* If MSB set in an octet we need a padding byte */ | 
| 117 | if(BN_num_bits(bn) & 0x7) pad = 0; | 130 | if (BN_num_bits(bn) & 0x7) | 
| 118 | else pad = 1; | 131 | pad = 0; | 
| 119 | if(cont) { | 132 | else | 
| 120 | if(pad) *cont++ = 0; | 133 | pad = 1; | 
| 134 | if (cont) { | ||
| 135 | if (pad) | ||
| 136 | *cont++ = 0; | ||
| 121 | BN_bn2bin(bn, cont); | 137 | BN_bn2bin(bn, cont); | 
| 122 | } | 138 | } | 
| 123 | return pad + BN_num_bytes(bn); | 139 | return pad + BN_num_bytes(bn); | 
| 124 | } | 140 | } | 
| 125 | 141 | ||
| 126 | static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, | 142 | static int | 
| 127 | int utype, char *free_cont, const ASN1_ITEM *it) | 143 | bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, | 
| 144 | char *free_cont, const ASN1_ITEM *it) | ||
| 128 | { | 145 | { | 
| 129 | BIGNUM *bn; | 146 | BIGNUM *bn; | 
| 130 | if(!*pval) bn_new(pval, it); | 147 | |
| 131 | bn = (BIGNUM *)*pval; | 148 | if (!*pval) | 
| 132 | if(!BN_bin2bn(cont, len, bn)) { | 149 | bn_new(pval, it); | 
| 150 | bn = (BIGNUM *)*pval; | ||
| 151 | if (!BN_bin2bn(cont, len, bn)) { | ||
| 133 | bn_free(pval, it); | 152 | bn_free(pval, it); | 
| 134 | return 0; | 153 | return 0; | 
| 135 | } | 154 | } | 
| 136 | return 1; | 155 | return 1; | 
| 137 | } | 156 | } | 
| 138 | |||
| 139 | |||
| diff --git a/src/lib/libcrypto/asn1/x_crl.c b/src/lib/libcrypto/asn1/x_crl.c index ea94f026b2..674cca4a1c 100644 --- a/src/lib/libcrypto/asn1/x_crl.c +++ b/src/lib/libcrypto/asn1/x_crl.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -64,23 +64,23 @@ | |||
| 64 | #include <openssl/x509v3.h> | 64 | #include <openssl/x509v3.h> | 
| 65 | 65 | ||
| 66 | static int X509_REVOKED_cmp(const X509_REVOKED * const *a, | 66 | static int X509_REVOKED_cmp(const X509_REVOKED * const *a, | 
| 67 | const X509_REVOKED * const *b); | 67 | const X509_REVOKED * const *b); | 
| 68 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp); | 68 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp); | 
| 69 | 69 | ||
| 70 | ASN1_SEQUENCE(X509_REVOKED) = { | 70 | ASN1_SEQUENCE(X509_REVOKED) = { | 
| 71 | ASN1_SIMPLE(X509_REVOKED,serialNumber, ASN1_INTEGER), | 71 | ASN1_SIMPLE(X509_REVOKED, serialNumber, ASN1_INTEGER), | 
| 72 | ASN1_SIMPLE(X509_REVOKED,revocationDate, ASN1_TIME), | 72 | ASN1_SIMPLE(X509_REVOKED, revocationDate, ASN1_TIME), | 
| 73 | ASN1_SEQUENCE_OF_OPT(X509_REVOKED,extensions, X509_EXTENSION) | 73 | ASN1_SEQUENCE_OF_OPT(X509_REVOKED, extensions, X509_EXTENSION) | 
| 74 | } ASN1_SEQUENCE_END(X509_REVOKED) | 74 | } ASN1_SEQUENCE_END(X509_REVOKED) | 
| 75 | 75 | ||
| 76 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r); | 76 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r); | 
| 77 | static int def_crl_lookup(X509_CRL *crl, | 77 | static int def_crl_lookup(X509_CRL *crl, X509_REVOKED **ret, | 
| 78 | X509_REVOKED **ret, ASN1_INTEGER *serial, X509_NAME *issuer); | 78 | ASN1_INTEGER *serial, X509_NAME *issuer); | 
| 79 | 79 | ||
| 80 | static X509_CRL_METHOD int_crl_meth = | 80 | static X509_CRL_METHOD int_crl_meth = { | 
| 81 | { | 81 | 0, | 
| 82 | 0, | ||
| 82 | 0, | 83 | 0, | 
| 83 | 0,0, | ||
| 84 | def_crl_lookup, | 84 | def_crl_lookup, | 
| 85 | def_crl_verify | 85 | def_crl_verify | 
| 86 | }; | 86 | }; | 
| @@ -91,18 +91,19 @@ static const X509_CRL_METHOD *default_crl_method = &int_crl_meth; | |||
| 91 | * Since we cache the original encoding the signature wont be affected by | 91 | * Since we cache the original encoding the signature wont be affected by | 
| 92 | * reordering of the revoked field. | 92 | * reordering of the revoked field. | 
| 93 | */ | 93 | */ | 
| 94 | static int crl_inf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | 94 | static int | 
| 95 | void *exarg) | 95 | crl_inf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | 
| 96 | { | 96 | { | 
| 97 | X509_CRL_INFO *a = (X509_CRL_INFO *)*pval; | 97 | X509_CRL_INFO *a = (X509_CRL_INFO *)*pval; | 
| 98 | 98 | ||
| 99 | if(!a || !a->revoked) return 1; | 99 | if (!a || !a->revoked) | 
| 100 | switch(operation) { | 100 | return 1; | 
| 101 | switch (operation) { | ||
| 101 | /* Just set cmp function here. We don't sort because that | 102 | /* Just set cmp function here. We don't sort because that | 
| 102 | * would affect the output of X509_CRL_print(). | 103 | * would affect the output of X509_CRL_print(). | 
| 103 | */ | 104 | */ | 
| 104 | case ASN1_OP_D2I_POST: | 105 | case ASN1_OP_D2I_POST: | 
| 105 | (void)sk_X509_REVOKED_set_cmp_func(a->revoked,X509_REVOKED_cmp); | 106 | (void)sk_X509_REVOKED_set_cmp_func(a->revoked, X509_REVOKED_cmp); | 
| 106 | break; | 107 | break; | 
| 107 | } | 108 | } | 
| 108 | return 1; | 109 | return 1; | 
| @@ -123,9 +124,9 @@ ASN1_SEQUENCE_enc(X509_CRL_INFO, enc, crl_inf_cb) = { | |||
| 123 | * Check for unhandled critical CRL entry extensions. | 124 | * Check for unhandled critical CRL entry extensions. | 
| 124 | */ | 125 | */ | 
| 125 | 126 | ||
| 126 | static int crl_set_issuers(X509_CRL *crl) | 127 | static int | 
| 128 | crl_set_issuers(X509_CRL *crl) | ||
| 127 | { | 129 | { | 
| 128 | |||
| 129 | int i, j; | 130 | int i, j; | 
| 130 | GENERAL_NAMES *gens, *gtmp; | 131 | GENERAL_NAMES *gens, *gtmp; | 
| 131 | STACK_OF(X509_REVOKED) *revoked; | 132 | STACK_OF(X509_REVOKED) *revoked; | 
| @@ -138,9 +139,8 @@ static int crl_set_issuers(X509_CRL *crl) | |||
| 138 | STACK_OF(X509_EXTENSION) *exts; | 139 | STACK_OF(X509_EXTENSION) *exts; | 
| 139 | ASN1_ENUMERATED *reason; | 140 | ASN1_ENUMERATED *reason; | 
| 140 | X509_EXTENSION *ext; | 141 | X509_EXTENSION *ext; | 
| 141 | gtmp = X509_REVOKED_get_ext_d2i(rev, | 142 | gtmp = X509_REVOKED_get_ext_d2i(rev, NID_certificate_issuer, | 
| 142 | NID_certificate_issuer, | 143 | &j, NULL); | 
| 143 | &j, NULL); | ||
| 144 | if (!gtmp && (j != -1)) { | 144 | if (!gtmp && (j != -1)) { | 
| 145 | crl->flags |= EXFLAG_INVALID; | 145 | crl->flags |= EXFLAG_INVALID; | 
| 146 | return 1; | 146 | return 1; | 
| @@ -159,7 +159,7 @@ static int crl_set_issuers(X509_CRL *crl) | |||
| 159 | rev->issuer = gens; | 159 | rev->issuer = gens; | 
| 160 | 160 | ||
| 161 | reason = X509_REVOKED_get_ext_d2i(rev, NID_crl_reason, | 161 | reason = X509_REVOKED_get_ext_d2i(rev, NID_crl_reason, | 
| 162 | &j, NULL); | 162 | &j, NULL); | 
| 163 | if (!reason && (j != -1)) { | 163 | if (!reason && (j != -1)) { | 
| 164 | crl->flags |= EXFLAG_INVALID; | 164 | crl->flags |= EXFLAG_INVALID; | 
| 165 | return 1; | 165 | return 1; | 
| @@ -169,7 +169,7 @@ static int crl_set_issuers(X509_CRL *crl) | |||
| 169 | rev->reason = ASN1_ENUMERATED_get(reason); | 169 | rev->reason = ASN1_ENUMERATED_get(reason); | 
| 170 | ASN1_ENUMERATED_free(reason); | 170 | ASN1_ENUMERATED_free(reason); | 
| 171 | } else | 171 | } else | 
| 172 | rev->reason = CRL_REASON_NONE; | 172 | rev->reason = CRL_REASON_NONE; | 
| 173 | 173 | ||
| 174 | /* Check for critical CRL entry extensions */ | 174 | /* Check for critical CRL entry extensions */ | 
| 175 | 175 | ||
| @@ -179,32 +179,29 @@ static int crl_set_issuers(X509_CRL *crl) | |||
| 179 | ext = sk_X509_EXTENSION_value(exts, j); | 179 | ext = sk_X509_EXTENSION_value(exts, j); | 
| 180 | if (ext->critical > 0) { | 180 | if (ext->critical > 0) { | 
| 181 | if (OBJ_obj2nid(ext->object) == | 181 | if (OBJ_obj2nid(ext->object) == | 
| 182 | NID_certificate_issuer) | 182 | NID_certificate_issuer) | 
| 183 | continue; | 183 | continue; | 
| 184 | crl->flags |= EXFLAG_CRITICAL; | 184 | crl->flags |= EXFLAG_CRITICAL; | 
| 185 | break; | 185 | break; | 
| 186 | } | 186 | } | 
| 187 | } | 187 | } | 
| 188 | |||
| 189 | |||
| 190 | } | 188 | } | 
| 191 | 189 | ||
| 192 | return 1; | 190 | return 1; | 
| 193 | |||
| 194 | } | 191 | } | 
| 195 | 192 | ||
| 196 | /* The X509_CRL structure needs a bit of customisation. Cache some extensions | 193 | /* The X509_CRL structure needs a bit of customisation. Cache some extensions | 
| 197 | * and hash of the whole CRL. | 194 | * and hash of the whole CRL. | 
| 198 | */ | 195 | */ | 
| 199 | static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | 196 | static int | 
| 200 | void *exarg) | 197 | crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | 
| 201 | { | 198 | { | 
| 202 | X509_CRL *crl = (X509_CRL *)*pval; | 199 | X509_CRL *crl = (X509_CRL *)*pval; | 
| 203 | STACK_OF(X509_EXTENSION) *exts; | 200 | STACK_OF(X509_EXTENSION) *exts; | 
| 204 | X509_EXTENSION *ext; | 201 | X509_EXTENSION *ext; | 
| 205 | int idx; | 202 | int idx; | 
| 206 | 203 | ||
| 207 | switch(operation) { | 204 | switch (operation) { | 
| 208 | case ASN1_OP_NEW_POST: | 205 | case ASN1_OP_NEW_POST: | 
| 209 | crl->idp = NULL; | 206 | crl->idp = NULL; | 
| 210 | crl->akid = NULL; | 207 | crl->akid = NULL; | 
| @@ -223,23 +220,23 @@ static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
| 223 | X509_CRL_digest(crl, EVP_sha1(), crl->sha1_hash, NULL); | 220 | X509_CRL_digest(crl, EVP_sha1(), crl->sha1_hash, NULL); | 
| 224 | #endif | 221 | #endif | 
| 225 | crl->idp = X509_CRL_get_ext_d2i(crl, | 222 | crl->idp = X509_CRL_get_ext_d2i(crl, | 
| 226 | NID_issuing_distribution_point, NULL, NULL); | 223 | NID_issuing_distribution_point, NULL, NULL); | 
| 227 | if (crl->idp) | 224 | if (crl->idp) | 
| 228 | setup_idp(crl, crl->idp); | 225 | setup_idp(crl, crl->idp); | 
| 229 | 226 | ||
| 230 | crl->akid = X509_CRL_get_ext_d2i(crl, | 227 | crl->akid = X509_CRL_get_ext_d2i(crl, | 
| 231 | NID_authority_key_identifier, NULL, NULL); | 228 | NID_authority_key_identifier, NULL, NULL); | 
| 232 | 229 | ||
| 233 | crl->crl_number = X509_CRL_get_ext_d2i(crl, | 230 | crl->crl_number = X509_CRL_get_ext_d2i(crl, | 
| 234 | NID_crl_number, NULL, NULL); | 231 | NID_crl_number, NULL, NULL); | 
| 235 | 232 | ||
| 236 | crl->base_crl_number = X509_CRL_get_ext_d2i(crl, | 233 | crl->base_crl_number = X509_CRL_get_ext_d2i(crl, | 
| 237 | NID_delta_crl, NULL, NULL); | 234 | NID_delta_crl, NULL, NULL); | 
| 238 | /* Delta CRLs must have CRL number */ | 235 | /* Delta CRLs must have CRL number */ | 
| 239 | if (crl->base_crl_number && !crl->crl_number) | 236 | if (crl->base_crl_number && !crl->crl_number) | 
| 240 | crl->flags |= EXFLAG_INVALID; | 237 | crl->flags |= EXFLAG_INVALID; | 
| 241 | 238 | ||
| 242 | /* See if we have any unhandled critical CRL extensions and | 239 | /* See if we have any unhandled critical CRL extensions and | 
| 243 | * indicate this in a flag. We only currently handle IDP so | 240 | * indicate this in a flag. We only currently handle IDP so | 
| 244 | * anything else critical sets the flag. | 241 | * anything else critical sets the flag. | 
| 245 | * | 242 | * | 
| @@ -257,15 +254,14 @@ static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
| 257 | crl->flags |= EXFLAG_FRESHEST; | 254 | crl->flags |= EXFLAG_FRESHEST; | 
| 258 | if (ext->critical > 0) { | 255 | if (ext->critical > 0) { | 
| 259 | /* We handle IDP and deltas */ | 256 | /* We handle IDP and deltas */ | 
| 260 | if ((nid == NID_issuing_distribution_point) | 257 | if ((nid == NID_issuing_distribution_point) || | 
| 261 | || (nid == NID_delta_crl)) | 258 | (nid == NID_delta_crl)) | 
| 262 | break;; | 259 | break;; | 
| 263 | crl->flags |= EXFLAG_CRITICAL; | 260 | crl->flags |= EXFLAG_CRITICAL; | 
| 264 | break; | 261 | break; | 
| 265 | } | 262 | } | 
| 266 | } | 263 | } | 
| 267 | 264 | ||
| 268 | |||
| 269 | if (!crl_set_issuers(crl)) | 265 | if (!crl_set_issuers(crl)) | 
| 270 | return 0; | 266 | return 0; | 
| 271 | 267 | ||
| @@ -294,9 +290,11 @@ static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
| 294 | 290 | ||
| 295 | /* Convert IDP into a more convenient form */ | 291 | /* Convert IDP into a more convenient form */ | 
| 296 | 292 | ||
| 297 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp) | 293 | static void | 
| 294 | setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp) | ||
| 298 | { | 295 | { | 
| 299 | int idp_only = 0; | 296 | int idp_only = 0; | 
| 297 | |||
| 300 | /* Set various flags according to IDP */ | 298 | /* Set various flags according to IDP */ | 
| 301 | crl->idp_flags |= IDP_PRESENT; | 299 | crl->idp_flags |= IDP_PRESENT; | 
| 302 | if (idp->onlyuser > 0) { | 300 | if (idp->onlyuser > 0) { | 
| @@ -324,7 +322,7 @@ static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp) | |||
| 324 | crl->idp_reasons = idp->onlysomereasons->data[0]; | 322 | crl->idp_reasons = idp->onlysomereasons->data[0]; | 
| 325 | if (idp->onlysomereasons->length > 1) | 323 | if (idp->onlysomereasons->length > 1) | 
| 326 | crl->idp_reasons |= | 324 | crl->idp_reasons |= | 
| 327 | (idp->onlysomereasons->data[1] << 8); | 325 | (idp->onlysomereasons->data[1] << 8); | 
| 328 | crl->idp_reasons &= CRLDP_ALL_REASONS; | 326 | crl->idp_reasons &= CRLDP_ALL_REASONS; | 
| 329 | } | 327 | } | 
| 330 | 328 | ||
| @@ -342,60 +340,65 @@ IMPLEMENT_ASN1_FUNCTIONS(X509_CRL_INFO) | |||
| 342 | IMPLEMENT_ASN1_FUNCTIONS(X509_CRL) | 340 | IMPLEMENT_ASN1_FUNCTIONS(X509_CRL) | 
| 343 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_CRL) | 341 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_CRL) | 
| 344 | 342 | ||
| 345 | static int X509_REVOKED_cmp(const X509_REVOKED * const *a, | 343 | static int | 
| 346 | const X509_REVOKED * const *b) | 344 | X509_REVOKED_cmp(const X509_REVOKED * const *a, const X509_REVOKED * const *b) | 
| 347 | { | 345 | { | 
| 348 | return(ASN1_STRING_cmp( | 346 | return(ASN1_STRING_cmp( | 
| 349 | (ASN1_STRING *)(*a)->serialNumber, | 347 | (ASN1_STRING *)(*a)->serialNumber, | 
| 350 | (ASN1_STRING *)(*b)->serialNumber)); | 348 | (ASN1_STRING *)(*b)->serialNumber)); | 
| 351 | } | 349 | } | 
| 352 | 350 | ||
| 353 | int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev) | 351 | int | 
| 352 | X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev) | ||
| 354 | { | 353 | { | 
| 355 | X509_CRL_INFO *inf; | 354 | X509_CRL_INFO *inf; | 
| 355 | |||
| 356 | inf = crl->crl; | 356 | inf = crl->crl; | 
| 357 | if(!inf->revoked) | 357 | if (!inf->revoked) | 
| 358 | inf->revoked = sk_X509_REVOKED_new(X509_REVOKED_cmp); | 358 | inf->revoked = sk_X509_REVOKED_new(X509_REVOKED_cmp); | 
| 359 | if(!inf->revoked || !sk_X509_REVOKED_push(inf->revoked, rev)) { | 359 | if (!inf->revoked || !sk_X509_REVOKED_push(inf->revoked, rev)) { | 
| 360 | ASN1err(ASN1_F_X509_CRL_ADD0_REVOKED, ERR_R_MALLOC_FAILURE); | 360 | ASN1err(ASN1_F_X509_CRL_ADD0_REVOKED, ERR_R_MALLOC_FAILURE); | 
| 361 | return 0; | 361 | return 0; | 
| 362 | } | 362 | } | 
| 363 | inf->enc.modified = 1; | 363 | inf->enc.modified = 1; | 
| 364 | return 1; | 364 | return 1; | 
| 365 | } | 365 | } | 
| 366 | 366 | ||
| 367 | int X509_CRL_verify(X509_CRL *crl, EVP_PKEY *r) | 367 | int | 
| 368 | X509_CRL_verify(X509_CRL *crl, EVP_PKEY *r) | ||
| 368 | { | 369 | { | 
| 369 | if (crl->meth->crl_verify) | 370 | if (crl->meth->crl_verify) | 
| 370 | return crl->meth->crl_verify(crl, r); | 371 | return crl->meth->crl_verify(crl, r); | 
| 371 | return 0; | 372 | return 0; | 
| 372 | } | 373 | } | 
| 373 | 374 | ||
| 374 | int X509_CRL_get0_by_serial(X509_CRL *crl, | 375 | int | 
| 375 | X509_REVOKED **ret, ASN1_INTEGER *serial) | 376 | X509_CRL_get0_by_serial(X509_CRL *crl, X509_REVOKED **ret, | 
| 377 | ASN1_INTEGER *serial) | ||
| 376 | { | 378 | { | 
| 377 | if (crl->meth->crl_lookup) | 379 | if (crl->meth->crl_lookup) | 
| 378 | return crl->meth->crl_lookup(crl, ret, serial, NULL); | 380 | return crl->meth->crl_lookup(crl, ret, serial, NULL); | 
| 379 | return 0; | 381 | return 0; | 
| 380 | } | 382 | } | 
| 381 | 383 | ||
| 382 | int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x) | 384 | int | 
| 385 | X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x) | ||
| 383 | { | 386 | { | 
| 384 | if (crl->meth->crl_lookup) | 387 | if (crl->meth->crl_lookup) | 
| 385 | return crl->meth->crl_lookup(crl, ret, | 388 | return crl->meth->crl_lookup(crl, ret, | 
| 386 | X509_get_serialNumber(x), | 389 | X509_get_serialNumber(x), X509_get_issuer_name(x)); | 
| 387 | X509_get_issuer_name(x)); | ||
| 388 | return 0; | 390 | return 0; | 
| 389 | } | 391 | } | 
| 390 | 392 | ||
| 391 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r) | 393 | static int | 
| 394 | def_crl_verify(X509_CRL *crl, EVP_PKEY *r) | ||
| 392 | { | 395 | { | 
| 393 | return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CRL_INFO), | 396 | return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CRL_INFO), | 
| 394 | crl->sig_alg, crl->signature,crl->crl,r)); | 397 | crl->sig_alg, crl->signature, crl->crl, r)); | 
| 395 | } | 398 | } | 
| 396 | 399 | ||
| 397 | static int crl_revoked_issuer_match(X509_CRL *crl, X509_NAME *nm, | 400 | static int | 
| 398 | X509_REVOKED *rev) | 401 | crl_revoked_issuer_match(X509_CRL *crl, X509_NAME *nm, X509_REVOKED *rev) | 
| 399 | { | 402 | { | 
| 400 | int i; | 403 | int i; | 
| 401 | 404 | ||
| @@ -421,11 +424,13 @@ static int crl_revoked_issuer_match(X509_CRL *crl, X509_NAME *nm, | |||
| 421 | 424 | ||
| 422 | } | 425 | } | 
| 423 | 426 | ||
| 424 | static int def_crl_lookup(X509_CRL *crl, | 427 | static int | 
| 425 | X509_REVOKED **ret, ASN1_INTEGER *serial, X509_NAME *issuer) | 428 | def_crl_lookup(X509_CRL *crl, X509_REVOKED **ret, ASN1_INTEGER *serial, | 
| 429 | X509_NAME *issuer) | ||
| 426 | { | 430 | { | 
| 427 | X509_REVOKED rtmp, *rev; | 431 | X509_REVOKED rtmp, *rev; | 
| 428 | int idx; | 432 | int idx; | 
| 433 | |||
| 429 | rtmp.serialNumber = serial; | 434 | rtmp.serialNumber = serial; | 
| 430 | /* Sort revoked into serial number order if not already sorted. | 435 | /* Sort revoked into serial number order if not already sorted. | 
| 431 | * Do this under a lock to avoid race condition. | 436 | * Do this under a lock to avoid race condition. | 
| @@ -436,10 +441,10 @@ static int def_crl_lookup(X509_CRL *crl, | |||
| 436 | CRYPTO_w_unlock(CRYPTO_LOCK_X509_CRL); | 441 | CRYPTO_w_unlock(CRYPTO_LOCK_X509_CRL); | 
| 437 | } | 442 | } | 
| 438 | idx = sk_X509_REVOKED_find(crl->crl->revoked, &rtmp); | 443 | idx = sk_X509_REVOKED_find(crl->crl->revoked, &rtmp); | 
| 439 | if(idx < 0) | 444 | if (idx < 0) | 
| 440 | return 0; | 445 | return 0; | 
| 441 | /* Need to look for matching name */ | 446 | /* Need to look for matching name */ | 
| 442 | for(;idx < sk_X509_REVOKED_num(crl->crl->revoked); idx++) { | 447 | for (; idx < sk_X509_REVOKED_num(crl->crl->revoked); idx++) { | 
| 443 | rev = sk_X509_REVOKED_value(crl->crl->revoked, idx); | 448 | rev = sk_X509_REVOKED_value(crl->crl->revoked, idx); | 
| 444 | if (ASN1_INTEGER_cmp(rev->serialNumber, serial)) | 449 | if (ASN1_INTEGER_cmp(rev->serialNumber, serial)) | 
| 445 | return 0; | 450 | return 0; | 
| @@ -454,22 +459,24 @@ static int def_crl_lookup(X509_CRL *crl, | |||
| 454 | return 0; | 459 | return 0; | 
| 455 | } | 460 | } | 
| 456 | 461 | ||
| 457 | void X509_CRL_set_default_method(const X509_CRL_METHOD *meth) | 462 | void | 
| 463 | X509_CRL_set_default_method(const X509_CRL_METHOD *meth) | ||
| 458 | { | 464 | { | 
| 459 | if (meth == NULL) | 465 | if (meth == NULL) | 
| 460 | default_crl_method = &int_crl_meth; | 466 | default_crl_method = &int_crl_meth; | 
| 461 | else | 467 | else | 
| 462 | default_crl_method = meth; | 468 | default_crl_method = meth; | 
| 463 | } | 469 | } | 
| 464 | 470 | ||
| 465 | X509_CRL_METHOD *X509_CRL_METHOD_new( | 471 | X509_CRL_METHOD * | 
| 466 | int (*crl_init)(X509_CRL *crl), | 472 | X509_CRL_METHOD_new(int (*crl_init)(X509_CRL *crl), | 
| 467 | int (*crl_free)(X509_CRL *crl), | 473 | int (*crl_free)(X509_CRL *crl), | 
| 468 | int (*crl_lookup)(X509_CRL *crl, X509_REVOKED **ret, | 474 | int (*crl_lookup)(X509_CRL *crl, X509_REVOKED **ret, | 
| 469 | ASN1_INTEGER *ser, X509_NAME *issuer), | 475 | ASN1_INTEGER *ser, X509_NAME *issuer), | 
| 470 | int (*crl_verify)(X509_CRL *crl, EVP_PKEY *pk)) | 476 | int (*crl_verify)(X509_CRL *crl, EVP_PKEY *pk)) | 
| 471 | { | 477 | { | 
| 472 | X509_CRL_METHOD *m; | 478 | X509_CRL_METHOD *m; | 
| 479 | |||
| 473 | m = malloc(sizeof(X509_CRL_METHOD)); | 480 | m = malloc(sizeof(X509_CRL_METHOD)); | 
| 474 | if (!m) | 481 | if (!m) | 
| 475 | return NULL; | 482 | return NULL; | 
| @@ -481,19 +488,22 @@ X509_CRL_METHOD *X509_CRL_METHOD_new( | |||
| 481 | return m; | 488 | return m; | 
| 482 | } | 489 | } | 
| 483 | 490 | ||
| 484 | void X509_CRL_METHOD_free(X509_CRL_METHOD *m) | 491 | void | 
| 492 | X509_CRL_METHOD_free(X509_CRL_METHOD *m) | ||
| 485 | { | 493 | { | 
| 486 | if (!(m->flags & X509_CRL_METHOD_DYNAMIC)) | 494 | if (!(m->flags & X509_CRL_METHOD_DYNAMIC)) | 
| 487 | return; | 495 | return; | 
| 488 | free(m); | 496 | free(m); | 
| 489 | } | 497 | } | 
| 490 | 498 | ||
| 491 | void X509_CRL_set_meth_data(X509_CRL *crl, void *dat) | 499 | void | 
| 500 | X509_CRL_set_meth_data(X509_CRL *crl, void *dat) | ||
| 492 | { | 501 | { | 
| 493 | crl->meth_data = dat; | 502 | crl->meth_data = dat; | 
| 494 | } | 503 | } | 
| 495 | 504 | ||
| 496 | void *X509_CRL_get_meth_data(X509_CRL *crl) | 505 | void * | 
| 506 | X509_CRL_get_meth_data(X509_CRL *crl) | ||
| 497 | { | 507 | { | 
| 498 | return crl->meth_data; | 508 | return crl->meth_data; | 
| 499 | } | 509 | } | 
| diff --git a/src/lib/libcrypto/asn1/x_exten.c b/src/lib/libcrypto/asn1/x_exten.c index 3a21239926..5b3f49ed0f 100644 --- a/src/lib/libcrypto/asn1/x_exten.c +++ b/src/lib/libcrypto/asn1/x_exten.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -67,8 +67,8 @@ ASN1_SEQUENCE(X509_EXTENSION) = { | |||
| 67 | ASN1_SIMPLE(X509_EXTENSION, value, ASN1_OCTET_STRING) | 67 | ASN1_SIMPLE(X509_EXTENSION, value, ASN1_OCTET_STRING) | 
| 68 | } ASN1_SEQUENCE_END(X509_EXTENSION) | 68 | } ASN1_SEQUENCE_END(X509_EXTENSION) | 
| 69 | 69 | ||
| 70 | ASN1_ITEM_TEMPLATE(X509_EXTENSIONS) = | 70 | ASN1_ITEM_TEMPLATE(X509_EXTENSIONS) = | 
| 71 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Extension, X509_EXTENSION) | 71 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Extension, X509_EXTENSION) | 
| 72 | ASN1_ITEM_TEMPLATE_END(X509_EXTENSIONS) | 72 | ASN1_ITEM_TEMPLATE_END(X509_EXTENSIONS) | 
| 73 | 73 | ||
| 74 | IMPLEMENT_ASN1_FUNCTIONS(X509_EXTENSION) | 74 | IMPLEMENT_ASN1_FUNCTIONS(X509_EXTENSION) | 
| diff --git a/src/lib/libcrypto/asn1/x_info.c b/src/lib/libcrypto/asn1/x_info.c index 07ce15dbd7..4d3e2ebd17 100644 --- a/src/lib/libcrypto/asn1/x_info.c +++ b/src/lib/libcrypto/asn1/x_info.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -62,42 +62,49 @@ | |||
| 62 | #include <openssl/asn1.h> | 62 | #include <openssl/asn1.h> | 
| 63 | #include <openssl/x509.h> | 63 | #include <openssl/x509.h> | 
| 64 | 64 | ||
| 65 | X509_INFO *X509_INFO_new(void) | 65 | X509_INFO * | 
| 66 | X509_INFO_new(void) | ||
| 66 | { | 67 | { | 
| 67 | X509_INFO *ret=NULL; | 68 | X509_INFO *ret = NULL; | 
| 68 | 69 | ||
| 69 | ret=(X509_INFO *)malloc(sizeof(X509_INFO)); | 70 | ret = (X509_INFO *)malloc(sizeof(X509_INFO)); | 
| 70 | if (ret == NULL) { | 71 | if (ret == NULL) { | 
| 71 | ASN1err(ASN1_F_X509_INFO_NEW,ERR_R_MALLOC_FAILURE); | 72 | ASN1err(ASN1_F_X509_INFO_NEW, ERR_R_MALLOC_FAILURE); | 
| 72 | return(NULL); | 73 | return (NULL); | 
| 73 | } | 74 | } | 
| 74 | 75 | ||
| 75 | ret->enc_cipher.cipher=NULL; | 76 | ret->enc_cipher.cipher = NULL; | 
| 76 | ret->enc_len=0; | 77 | ret->enc_len = 0; | 
| 77 | ret->enc_data=NULL; | 78 | ret->enc_data = NULL; | 
| 78 | 79 | ||
| 79 | ret->references=1; | 80 | ret->references = 1; | 
| 80 | ret->x509=NULL; | 81 | ret->x509 = NULL; | 
| 81 | ret->crl=NULL; | 82 | ret->crl = NULL; | 
| 82 | ret->x_pkey=NULL; | 83 | ret->x_pkey = NULL; | 
| 83 | return(ret); | 84 | return (ret); | 
| 84 | } | 85 | } | 
| 85 | 86 | ||
| 86 | void X509_INFO_free(X509_INFO *x) | 87 | void | 
| 88 | X509_INFO_free(X509_INFO *x) | ||
| 87 | { | 89 | { | 
| 88 | int i; | 90 | int i; | 
| 89 | 91 | ||
| 90 | if (x == NULL) return; | 92 | if (x == NULL) | 
| 93 | return; | ||
| 91 | 94 | ||
| 92 | i=CRYPTO_add(&x->references,-1,CRYPTO_LOCK_X509_INFO); | 95 | i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_INFO); | 
| 93 | if (i > 0) return; | 96 | if (i > 0) | 
| 97 | return; | ||
| 94 | 98 | ||
| 95 | if (x->x509 != NULL) X509_free(x->x509); | 99 | if (x->x509 != NULL) | 
| 96 | if (x->crl != NULL) X509_CRL_free(x->crl); | 100 | X509_free(x->x509); | 
| 97 | if (x->x_pkey != NULL) X509_PKEY_free(x->x_pkey); | 101 | if (x->crl != NULL) | 
| 98 | if (x->enc_data != NULL) free(x->enc_data); | 102 | X509_CRL_free(x->crl); | 
| 103 | if (x->x_pkey != NULL) | ||
| 104 | X509_PKEY_free(x->x_pkey); | ||
| 105 | if (x->enc_data != NULL) | ||
| 106 | free(x->enc_data); | ||
| 99 | free(x); | 107 | free(x); | 
| 100 | } | 108 | } | 
| 101 | 109 | ||
| 102 | IMPLEMENT_STACK_OF(X509_INFO) | 110 | IMPLEMENT_STACK_OF(X509_INFO) | 
| 103 | |||
| diff --git a/src/lib/libcrypto/asn1/x_long.c b/src/lib/libcrypto/asn1/x_long.c index 1417284d3c..81dcc4fc29 100644 --- a/src/lib/libcrypto/asn1/x_long.c +++ b/src/lib/libcrypto/asn1/x_long.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -84,25 +84,29 @@ static ASN1_PRIMITIVE_FUNCS long_pf = { | |||
| 84 | }; | 84 | }; | 
| 85 | 85 | ||
| 86 | ASN1_ITEM_start(LONG) | 86 | ASN1_ITEM_start(LONG) | 
| 87 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, ASN1_LONG_UNDEF, "LONG" | 87 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, ASN1_LONG_UNDEF, "LONG" | 
| 88 | ASN1_ITEM_end(LONG) | 88 | ASN1_ITEM_end(LONG) | 
| 89 | 89 | ||
| 90 | ASN1_ITEM_start(ZLONG) | 90 | ASN1_ITEM_start(ZLONG) | 
| 91 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, 0, "ZLONG" | 91 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, 0, "ZLONG" | 
| 92 | ASN1_ITEM_end(ZLONG) | 92 | ASN1_ITEM_end(ZLONG) | 
| 93 | 93 | ||
| 94 | static int long_new(ASN1_VALUE **pval, const ASN1_ITEM *it) | 94 | static int | 
| 95 | long_new(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||
| 95 | { | 96 | { | 
| 96 | *(long *)pval = it->size; | 97 | *(long *)pval = it->size; | 
| 97 | return 1; | 98 | return 1; | 
| 98 | } | 99 | } | 
| 99 | 100 | ||
| 100 | static void long_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | 101 | static void | 
| 102 | long_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||
| 101 | { | 103 | { | 
| 102 | *(long *)pval = it->size; | 104 | *(long *)pval = it->size; | 
| 103 | } | 105 | } | 
| 104 | 106 | ||
| 105 | static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it) | 107 | static int | 
| 108 | long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, | ||
| 109 | const ASN1_ITEM *it) | ||
| 106 | { | 110 | { | 
| 107 | long ltmp; | 111 | long ltmp; | 
| 108 | unsigned long utmp; | 112 | unsigned long utmp; | 
| @@ -113,58 +117,70 @@ static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const A | |||
| 113 | /* use memcpy, because we may not be long aligned */ | 117 | /* use memcpy, because we may not be long aligned */ | 
| 114 | memcpy(<mp, cp, sizeof(long)); | 118 | memcpy(<mp, cp, sizeof(long)); | 
| 115 | 119 | ||
| 116 | if(ltmp == it->size) return -1; | 120 | if (ltmp == it->size) | 
| 121 | return -1; | ||
| 117 | /* Convert the long to positive: we subtract one if negative so | 122 | /* Convert the long to positive: we subtract one if negative so | 
| 118 | * we can cleanly handle the padding if only the MSB of the leading | 123 | * we can cleanly handle the padding if only the MSB of the leading | 
| 119 | * octet is set. | 124 | * octet is set. | 
| 120 | */ | 125 | */ | 
| 121 | if(ltmp < 0) utmp = -ltmp - 1; | 126 | if (ltmp < 0) | 
| 122 | else utmp = ltmp; | 127 | utmp = -ltmp - 1; | 
| 128 | else | ||
| 129 | utmp = ltmp; | ||
| 123 | clen = BN_num_bits_word(utmp); | 130 | clen = BN_num_bits_word(utmp); | 
| 124 | /* If MSB of leading octet set we need to pad */ | 131 | /* If MSB of leading octet set we need to pad */ | 
| 125 | if(!(clen & 0x7)) pad = 1; | 132 | if (!(clen & 0x7)) | 
| 126 | else pad = 0; | 133 | pad = 1; | 
| 134 | else | ||
| 135 | pad = 0; | ||
| 127 | 136 | ||
| 128 | /* Convert number of bits to number of octets */ | 137 | /* Convert number of bits to number of octets */ | 
| 129 | clen = (clen + 7) >> 3; | 138 | clen = (clen + 7) >> 3; | 
| 130 | 139 | ||
| 131 | if(cont) { | 140 | if (cont) { | 
| 132 | if(pad) *cont++ = (ltmp < 0) ? 0xff : 0; | 141 | if (pad) | 
| 133 | for(i = clen - 1; i >= 0; i--) { | 142 | *cont++ = (ltmp < 0) ? 0xff : 0; | 
| 143 | for (i = clen - 1; i >= 0; i--) { | ||
| 134 | cont[i] = (unsigned char)(utmp & 0xff); | 144 | cont[i] = (unsigned char)(utmp & 0xff); | 
| 135 | if(ltmp < 0) cont[i] ^= 0xff; | 145 | if (ltmp < 0) | 
| 146 | cont[i] ^= 0xff; | ||
| 136 | utmp >>= 8; | 147 | utmp >>= 8; | 
| 137 | } | 148 | } | 
| 138 | } | 149 | } | 
| 139 | return clen + pad; | 150 | return clen + pad; | 
| 140 | } | 151 | } | 
| 141 | 152 | ||
| 142 | static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, | 153 | static int | 
| 143 | int utype, char *free_cont, const ASN1_ITEM *it) | 154 | long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, | 
| 155 | char *free_cont, const ASN1_ITEM *it) | ||
| 144 | { | 156 | { | 
| 145 | int neg, i; | 157 | int neg, i; | 
| 146 | long ltmp; | 158 | long ltmp; | 
| 147 | unsigned long utmp = 0; | 159 | unsigned long utmp = 0; | 
| 148 | char *cp = (char *)pval; | 160 | char *cp = (char *)pval; | 
| 149 | if(len > (int)sizeof(long)) { | 161 | if (len > (int)sizeof(long)) { | 
| 150 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); | 162 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); | 
| 151 | return 0; | 163 | return 0; | 
| 152 | } | 164 | } | 
| 153 | /* Is it negative? */ | 165 | /* Is it negative? */ | 
| 154 | if(len && (cont[0] & 0x80)) neg = 1; | 166 | if (len && (cont[0] & 0x80)) | 
| 155 | else neg = 0; | 167 | neg = 1; | 
| 168 | else | ||
| 169 | neg = 0; | ||
| 156 | utmp = 0; | 170 | utmp = 0; | 
| 157 | for(i = 0; i < len; i++) { | 171 | for (i = 0; i < len; i++) { | 
| 158 | utmp <<= 8; | 172 | utmp <<= 8; | 
| 159 | if(neg) utmp |= cont[i] ^ 0xff; | 173 | if (neg) | 
| 160 | else utmp |= cont[i]; | 174 | utmp |= cont[i] ^ 0xff; | 
| 175 | else | ||
| 176 | utmp |= cont[i]; | ||
| 161 | } | 177 | } | 
| 162 | ltmp = (long)utmp; | 178 | ltmp = (long)utmp; | 
| 163 | if(neg) { | 179 | if (neg) { | 
| 164 | ltmp++; | 180 | ltmp++; | 
| 165 | ltmp = -ltmp; | 181 | ltmp = -ltmp; | 
| 166 | } | 182 | } | 
| 167 | if(ltmp == it->size) { | 183 | if (ltmp == it->size) { | 
| 168 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); | 184 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); | 
| 169 | return 0; | 185 | return 0; | 
| 170 | } | 186 | } | 
| @@ -172,8 +188,9 @@ static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, | |||
| 172 | return 1; | 188 | return 1; | 
| 173 | } | 189 | } | 
| 174 | 190 | ||
| 175 | static int long_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, | 191 | static int | 
| 176 | int indent, const ASN1_PCTX *pctx) | 192 | long_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, | 
| 193 | const ASN1_PCTX *pctx) | ||
| 177 | { | 194 | { | 
| 178 | return BIO_printf(out, "%ld\n", *(long *)pval); | 195 | return BIO_printf(out, "%ld\n", *(long *)pval); | 
| 179 | } | 196 | } | 
| diff --git a/src/lib/libcrypto/asn1/x_name.c b/src/lib/libcrypto/asn1/x_name.c index d10ac5acd1..70459babc4 100644 --- a/src/lib/libcrypto/asn1/x_name.c +++ b/src/lib/libcrypto/asn1/x_name.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -66,13 +66,12 @@ | |||
| 66 | typedef STACK_OF(X509_NAME_ENTRY) STACK_OF_X509_NAME_ENTRY; | 66 | typedef STACK_OF(X509_NAME_ENTRY) STACK_OF_X509_NAME_ENTRY; | 
| 67 | DECLARE_STACK_OF(STACK_OF_X509_NAME_ENTRY) | 67 | DECLARE_STACK_OF(STACK_OF_X509_NAME_ENTRY) | 
| 68 | 68 | ||
| 69 | static int x509_name_ex_d2i(ASN1_VALUE **val, | 69 | static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in, | 
| 70 | const unsigned char **in, long len, | 70 | long len, const ASN1_ITEM *it, int tag, int aclass, char opt, | 
| 71 | const ASN1_ITEM *it, | 71 | ASN1_TLC *ctx); | 
| 72 | int tag, int aclass, char opt, ASN1_TLC *ctx); | ||
| 73 | 72 | ||
| 74 | static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out, | 73 | static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out, | 
| 75 | const ASN1_ITEM *it, int tag, int aclass); | 74 | const ASN1_ITEM *it, int tag, int aclass); | 
| 76 | static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it); | 75 | static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it); | 
| 77 | static void x509_name_ex_free(ASN1_VALUE **val, const ASN1_ITEM *it); | 76 | static void x509_name_ex_free(ASN1_VALUE **val, const ASN1_ITEM *it); | 
| 78 | 77 | ||
| @@ -80,13 +79,10 @@ static int x509_name_encode(X509_NAME *a); | |||
| 80 | static int x509_name_canon(X509_NAME *a); | 79 | static int x509_name_canon(X509_NAME *a); | 
| 81 | static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in); | 80 | static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in); | 
| 82 | static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname, | 81 | static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname, | 
| 83 | unsigned char **in); | 82 | unsigned char **in); | 
| 84 | 83 | ||
| 85 | 84 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, int indent, | |
| 86 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, | 85 | const char *fname, const ASN1_PCTX *pctx); | 
| 87 | int indent, | ||
| 88 | const char *fname, | ||
| 89 | const ASN1_PCTX *pctx); | ||
| 90 | 86 | ||
| 91 | ASN1_SEQUENCE(X509_NAME_ENTRY) = { | 87 | ASN1_SEQUENCE(X509_NAME_ENTRY) = { | 
| 92 | ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT), | 88 | ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT), | 
| @@ -101,11 +97,11 @@ IMPLEMENT_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) | |||
| 101 | */ | 97 | */ | 
| 102 | 98 | ||
| 103 | ASN1_ITEM_TEMPLATE(X509_NAME_ENTRIES) = | 99 | ASN1_ITEM_TEMPLATE(X509_NAME_ENTRIES) = | 
| 104 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SET_OF, 0, RDNS, X509_NAME_ENTRY) | 100 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SET_OF, 0, RDNS, X509_NAME_ENTRY) | 
| 105 | ASN1_ITEM_TEMPLATE_END(X509_NAME_ENTRIES) | 101 | ASN1_ITEM_TEMPLATE_END(X509_NAME_ENTRIES) | 
| 106 | 102 | ||
| 107 | ASN1_ITEM_TEMPLATE(X509_NAME_INTERNAL) = | 103 | ASN1_ITEM_TEMPLATE(X509_NAME_INTERNAL) = | 
| 108 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Name, X509_NAME_ENTRIES) | 104 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Name, X509_NAME_ENTRIES) | 
| 109 | ASN1_ITEM_TEMPLATE_END(X509_NAME_INTERNAL) | 105 | ASN1_ITEM_TEMPLATE_END(X509_NAME_INTERNAL) | 
| 110 | 106 | ||
| 111 | /* Normally that's where it would end: we'd have two nested STACK structures | 107 | /* Normally that's where it would end: we'd have two nested STACK structures | 
| @@ -124,26 +120,30 @@ const ASN1_EXTERN_FUNCS x509_name_ff = { | |||
| 124 | x509_name_ex_print | 120 | x509_name_ex_print | 
| 125 | }; | 121 | }; | 
| 126 | 122 | ||
| 127 | IMPLEMENT_EXTERN_ASN1(X509_NAME, V_ASN1_SEQUENCE, x509_name_ff) | 123 | IMPLEMENT_EXTERN_ASN1(X509_NAME, V_ASN1_SEQUENCE, x509_name_ff) | 
| 128 | 124 | ||
| 129 | IMPLEMENT_ASN1_FUNCTIONS(X509_NAME) | 125 | IMPLEMENT_ASN1_FUNCTIONS(X509_NAME) | 
| 130 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_NAME) | 126 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_NAME) | 
| 131 | 127 | ||
| 132 | static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it) | 128 | static int | 
| 129 | x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it) | ||
| 133 | { | 130 | { | 
| 134 | X509_NAME *ret = NULL; | 131 | X509_NAME *ret = NULL; | 
| 132 | |||
| 135 | ret = malloc(sizeof(X509_NAME)); | 133 | ret = malloc(sizeof(X509_NAME)); | 
| 136 | if(!ret) goto memerr; | 134 | if (!ret) | 
| 137 | if ((ret->entries=sk_X509_NAME_ENTRY_new_null()) == NULL) | 135 | goto memerr; | 
| 136 | if ((ret->entries = sk_X509_NAME_ENTRY_new_null()) == NULL) | ||
| 137 | goto memerr; | ||
| 138 | if ((ret->bytes = BUF_MEM_new()) == NULL) | ||
| 138 | goto memerr; | 139 | goto memerr; | 
| 139 | if((ret->bytes = BUF_MEM_new()) == NULL) goto memerr; | ||
| 140 | ret->canon_enc = NULL; | 140 | ret->canon_enc = NULL; | 
| 141 | ret->canon_enclen = 0; | 141 | ret->canon_enclen = 0; | 
| 142 | ret->modified=1; | 142 | ret->modified = 1; | 
| 143 | *val = (ASN1_VALUE *)ret; | 143 | *val = (ASN1_VALUE *)ret; | 
| 144 | return 1; | 144 | return 1; | 
| 145 | 145 | ||
| 146 | memerr: | 146 | memerr: | 
| 147 | ASN1err(ASN1_F_X509_NAME_EX_NEW, ERR_R_MALLOC_FAILURE); | 147 | ASN1err(ASN1_F_X509_NAME_EX_NEW, ERR_R_MALLOC_FAILURE); | 
| 148 | if (ret) { | 148 | if (ret) { | 
| 149 | if (ret->entries) | 149 | if (ret->entries) | 
| @@ -153,54 +153,64 @@ static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it) | |||
| 153 | return 0; | 153 | return 0; | 
| 154 | } | 154 | } | 
| 155 | 155 | ||
| 156 | static void x509_name_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | 156 | static void | 
| 157 | x509_name_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||
| 157 | { | 158 | { | 
| 158 | X509_NAME *a; | 159 | X509_NAME *a; | 
| 159 | if(!pval || !*pval) | 160 | |
| 160 | return; | 161 | if (!pval || !*pval) | 
| 162 | return; | ||
| 161 | a = (X509_NAME *)*pval; | 163 | a = (X509_NAME *)*pval; | 
| 162 | 164 | ||
| 163 | BUF_MEM_free(a->bytes); | 165 | BUF_MEM_free(a->bytes); | 
| 164 | sk_X509_NAME_ENTRY_pop_free(a->entries,X509_NAME_ENTRY_free); | 166 | sk_X509_NAME_ENTRY_pop_free(a->entries, X509_NAME_ENTRY_free); | 
| 165 | if (a->canon_enc) | 167 | if (a->canon_enc) | 
| 166 | free(a->canon_enc); | 168 | free(a->canon_enc); | 
| 167 | free(a); | 169 | free(a); | 
| 168 | *pval = NULL; | 170 | *pval = NULL; | 
| 169 | } | 171 | } | 
| 170 | 172 | ||
| 171 | static int x509_name_ex_d2i(ASN1_VALUE **val, | 173 | static int | 
| 172 | const unsigned char **in, long len, const ASN1_ITEM *it, | 174 | x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long len, | 
| 173 | int tag, int aclass, char opt, ASN1_TLC *ctx) | 175 | const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx) | 
| 174 | { | 176 | { | 
| 175 | const unsigned char *p = *in, *q; | 177 | const unsigned char *p = *in, *q; | 
| 176 | union { STACK_OF(STACK_OF_X509_NAME_ENTRY) *s; | 178 | union { | 
| 177 | ASN1_VALUE *a; } intname = {NULL}; | 179 | STACK_OF(STACK_OF_X509_NAME_ENTRY) *s; | 
| 178 | union { X509_NAME *x; ASN1_VALUE *a; } nm = {NULL}; | 180 | ASN1_VALUE *a; | 
| 181 | } intname = {NULL}; | ||
| 182 | union { | ||
| 183 | X509_NAME *x; | ||
| 184 | ASN1_VALUE *a; | ||
| 185 | } nm = {NULL}; | ||
| 179 | int i, j, ret; | 186 | int i, j, ret; | 
| 180 | STACK_OF(X509_NAME_ENTRY) *entries; | 187 | STACK_OF(X509_NAME_ENTRY) *entries; | 
| 181 | X509_NAME_ENTRY *entry; | 188 | X509_NAME_ENTRY *entry; | 
| 182 | q = p; | 189 | q = p; | 
| 183 | 190 | ||
| 184 | /* Get internal representation of Name */ | 191 | /* Get internal representation of Name */ | 
| 185 | ret = ASN1_item_ex_d2i(&intname.a, | 192 | ret = ASN1_item_ex_d2i(&intname.a, &p, len, | 
| 186 | &p, len, ASN1_ITEM_rptr(X509_NAME_INTERNAL), | 193 | ASN1_ITEM_rptr(X509_NAME_INTERNAL), tag, aclass, opt, ctx); | 
| 187 | tag, aclass, opt, ctx); | 194 | |
| 188 | 195 | if (ret <= 0) | |
| 189 | if(ret <= 0) return ret; | 196 | return ret; | 
| 190 | 197 | ||
| 191 | if(*val) x509_name_ex_free(val, NULL); | 198 | if (*val) | 
| 192 | if(!x509_name_ex_new(&nm.a, NULL)) goto err; | 199 | x509_name_ex_free(val, NULL); | 
| 200 | if (!x509_name_ex_new(&nm.a, NULL)) | ||
| 201 | goto err; | ||
| 193 | /* We've decoded it: now cache encoding */ | 202 | /* We've decoded it: now cache encoding */ | 
| 194 | if(!BUF_MEM_grow(nm.x->bytes, p - q)) goto err; | 203 | if (!BUF_MEM_grow(nm.x->bytes, p - q)) | 
| 204 | goto err; | ||
| 195 | memcpy(nm.x->bytes->data, q, p - q); | 205 | memcpy(nm.x->bytes->data, q, p - q); | 
| 196 | 206 | ||
| 197 | /* Convert internal representation to X509_NAME structure */ | 207 | /* Convert internal representation to X509_NAME structure */ | 
| 198 | for(i = 0; i < sk_STACK_OF_X509_NAME_ENTRY_num(intname.s); i++) { | 208 | for (i = 0; i < sk_STACK_OF_X509_NAME_ENTRY_num(intname.s); i++) { | 
| 199 | entries = sk_STACK_OF_X509_NAME_ENTRY_value(intname.s, i); | 209 | entries = sk_STACK_OF_X509_NAME_ENTRY_value(intname.s, i); | 
| 200 | for(j = 0; j < sk_X509_NAME_ENTRY_num(entries); j++) { | 210 | for (j = 0; j < sk_X509_NAME_ENTRY_num(entries); j++) { | 
| 201 | entry = sk_X509_NAME_ENTRY_value(entries, j); | 211 | entry = sk_X509_NAME_ENTRY_value(entries, j); | 
| 202 | entry->set = i; | 212 | entry->set = i; | 
| 203 | if(!sk_X509_NAME_ENTRY_push(nm.x->entries, entry)) | 213 | if (!sk_X509_NAME_ENTRY_push(nm.x->entries, entry)) | 
| 204 | goto err; | 214 | goto err; | 
| 205 | } | 215 | } | 
| 206 | sk_X509_NAME_ENTRY_free(entries); | 216 | sk_X509_NAME_ENTRY_free(entries); | 
| @@ -213,90 +223,104 @@ static int x509_name_ex_d2i(ASN1_VALUE **val, | |||
| 213 | *val = nm.a; | 223 | *val = nm.a; | 
| 214 | *in = p; | 224 | *in = p; | 
| 215 | return ret; | 225 | return ret; | 
| 226 | |||
| 216 | err: | 227 | err: | 
| 217 | if (nm.x != NULL) | 228 | if (nm.x != NULL) | 
| 218 | X509_NAME_free(nm.x); | 229 | X509_NAME_free(nm.x); | 
| 219 | ASN1err(ASN1_F_X509_NAME_EX_D2I, ERR_R_NESTED_ASN1_ERROR); | 230 | ASN1err(ASN1_F_X509_NAME_EX_D2I, ERR_R_NESTED_ASN1_ERROR); | 
| 220 | return 0; | 231 | return 0; | 
| 221 | } | 232 | } | 
| 222 | 233 | ||
| 223 | static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass) | 234 | static int | 
| 235 | x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out, const ASN1_ITEM *it, | ||
| 236 | int tag, int aclass) | ||
| 224 | { | 237 | { | 
| 225 | int ret; | 238 | int ret; | 
| 226 | X509_NAME *a = (X509_NAME *)*val; | 239 | X509_NAME *a = (X509_NAME *)*val; | 
| 227 | if(a->modified) { | 240 | |
| 241 | if (a->modified) { | ||
| 228 | ret = x509_name_encode(a); | 242 | ret = x509_name_encode(a); | 
| 229 | if(ret < 0) | 243 | if (ret < 0) | 
| 230 | return ret; | 244 | return ret; | 
| 231 | ret = x509_name_canon(a); | 245 | ret = x509_name_canon(a); | 
| 232 | if(ret < 0) | 246 | if (ret < 0) | 
| 233 | return ret; | 247 | return ret; | 
| 234 | } | 248 | } | 
| 235 | ret = a->bytes->length; | 249 | ret = a->bytes->length; | 
| 236 | if(out != NULL) { | 250 | if (out != NULL) { | 
| 237 | memcpy(*out,a->bytes->data,ret); | 251 | memcpy(*out, a->bytes->data, ret); | 
| 238 | *out+=ret; | 252 | *out += ret; | 
| 239 | } | 253 | } | 
| 240 | return ret; | 254 | return ret; | 
| 241 | } | 255 | } | 
| 242 | 256 | ||
| 243 | static void local_sk_X509_NAME_ENTRY_free(STACK_OF(X509_NAME_ENTRY) *ne) | 257 | static void | 
| 258 | local_sk_X509_NAME_ENTRY_free(STACK_OF(X509_NAME_ENTRY) *ne) | ||
| 244 | { | 259 | { | 
| 245 | sk_X509_NAME_ENTRY_free(ne); | 260 | sk_X509_NAME_ENTRY_free(ne); | 
| 246 | } | 261 | } | 
| 247 | 262 | ||
| 248 | static void local_sk_X509_NAME_ENTRY_pop_free(STACK_OF(X509_NAME_ENTRY) *ne) | 263 | static void | 
| 264 | local_sk_X509_NAME_ENTRY_pop_free(STACK_OF(X509_NAME_ENTRY) *ne) | ||
| 249 | { | 265 | { | 
| 250 | sk_X509_NAME_ENTRY_pop_free(ne, X509_NAME_ENTRY_free); | 266 | sk_X509_NAME_ENTRY_pop_free(ne, X509_NAME_ENTRY_free); | 
| 251 | } | 267 | } | 
| 252 | 268 | ||
| 253 | static int x509_name_encode(X509_NAME *a) | 269 | static int | 
| 270 | x509_name_encode(X509_NAME *a) | ||
| 254 | { | 271 | { | 
| 255 | union { STACK_OF(STACK_OF_X509_NAME_ENTRY) *s; | 272 | union { | 
| 256 | ASN1_VALUE *a; } intname = {NULL}; | 273 | STACK_OF(STACK_OF_X509_NAME_ENTRY) *s; | 
| 274 | ASN1_VALUE *a; | ||
| 275 | } intname = {NULL}; | ||
| 257 | int len; | 276 | int len; | 
| 258 | unsigned char *p; | 277 | unsigned char *p; | 
| 259 | STACK_OF(X509_NAME_ENTRY) *entries = NULL; | 278 | STACK_OF(X509_NAME_ENTRY) *entries = NULL; | 
| 260 | X509_NAME_ENTRY *entry; | 279 | X509_NAME_ENTRY *entry; | 
| 261 | int i, set = -1; | 280 | int i, set = -1; | 
| 281 | |||
| 262 | intname.s = sk_STACK_OF_X509_NAME_ENTRY_new_null(); | 282 | intname.s = sk_STACK_OF_X509_NAME_ENTRY_new_null(); | 
| 263 | if(!intname.s) goto memerr; | 283 | if (!intname.s) | 
| 264 | for(i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) { | 284 | goto memerr; | 
| 285 | for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) { | ||
| 265 | entry = sk_X509_NAME_ENTRY_value(a->entries, i); | 286 | entry = sk_X509_NAME_ENTRY_value(a->entries, i); | 
| 266 | if(entry->set != set) { | 287 | if (entry->set != set) { | 
| 267 | entries = sk_X509_NAME_ENTRY_new_null(); | 288 | entries = sk_X509_NAME_ENTRY_new_null(); | 
| 268 | if(!entries) goto memerr; | 289 | if (!entries) | 
| 269 | if(!sk_STACK_OF_X509_NAME_ENTRY_push(intname.s, | 290 | goto memerr; | 
| 270 | entries)) | 291 | if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname.s, | 
| 292 | entries)) | ||
| 271 | goto memerr; | 293 | goto memerr; | 
| 272 | set = entry->set; | 294 | set = entry->set; | 
| 273 | } | 295 | } | 
| 274 | if(!sk_X509_NAME_ENTRY_push(entries, entry)) goto memerr; | 296 | if (!sk_X509_NAME_ENTRY_push(entries, entry)) | 
| 297 | goto memerr; | ||
| 275 | } | 298 | } | 
| 276 | len = ASN1_item_ex_i2d(&intname.a, NULL, | 299 | len = ASN1_item_ex_i2d(&intname.a, NULL, | 
| 277 | ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1); | 300 | ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1); | 
| 278 | if (!BUF_MEM_grow(a->bytes,len)) goto memerr; | 301 | if (!BUF_MEM_grow(a->bytes, len)) | 
| 279 | p=(unsigned char *)a->bytes->data; | 302 | goto memerr; | 
| 280 | ASN1_item_ex_i2d(&intname.a, | 303 | p = (unsigned char *)a->bytes->data; | 
| 281 | &p, ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1); | 304 | ASN1_item_ex_i2d(&intname.a, &p, ASN1_ITEM_rptr(X509_NAME_INTERNAL), | 
| 305 | -1, -1); | ||
| 282 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s, | 306 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s, | 
| 283 | local_sk_X509_NAME_ENTRY_free); | 307 | local_sk_X509_NAME_ENTRY_free); | 
| 284 | a->modified = 0; | 308 | a->modified = 0; | 
| 285 | return len; | 309 | return len; | 
| 310 | |||
| 286 | memerr: | 311 | memerr: | 
| 287 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s, | 312 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s, | 
| 288 | local_sk_X509_NAME_ENTRY_free); | 313 | local_sk_X509_NAME_ENTRY_free); | 
| 289 | ASN1err(ASN1_F_X509_NAME_ENCODE, ERR_R_MALLOC_FAILURE); | 314 | ASN1err(ASN1_F_X509_NAME_ENCODE, ERR_R_MALLOC_FAILURE); | 
| 290 | return -1; | 315 | return -1; | 
| 291 | } | 316 | } | 
| 292 | 317 | ||
| 293 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, | 318 | static int | 
| 294 | int indent, | 319 | x509_name_ex_print(BIO *out, ASN1_VALUE **pval, int indent, const char *fname, | 
| 295 | const char *fname, | 320 | const ASN1_PCTX *pctx) | 
| 296 | const ASN1_PCTX *pctx) | ||
| 297 | { | 321 | { | 
| 298 | if (X509_NAME_print_ex(out, (X509_NAME *)*pval, | 322 | if (X509_NAME_print_ex(out, (X509_NAME *)*pval, indent, | 
| 299 | indent, pctx->nm_flags) <= 0) | 323 | pctx->nm_flags) <= 0) | 
| 300 | return 0; | 324 | return 0; | 
| 301 | return 2; | 325 | return 2; | 
| 302 | } | 326 | } | 
| @@ -314,7 +338,8 @@ static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, | |||
| 314 | * dirName can also be checked with a simple memcmp(). | 338 | * dirName can also be checked with a simple memcmp(). | 
| 315 | */ | 339 | */ | 
| 316 | 340 | ||
| 317 | static int x509_name_canon(X509_NAME *a) | 341 | static int | 
| 342 | x509_name_canon(X509_NAME *a) | ||
| 318 | { | 343 | { | 
| 319 | unsigned char *p; | 344 | unsigned char *p; | 
| 320 | STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL; | 345 | STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL; | 
| @@ -325,22 +350,22 @@ static int x509_name_canon(X509_NAME *a) | |||
| 325 | if (a->canon_enc) { | 350 | if (a->canon_enc) { | 
| 326 | free(a->canon_enc); | 351 | free(a->canon_enc); | 
| 327 | a->canon_enc = NULL; | 352 | a->canon_enc = NULL; | 
| 328 | } | 353 | } | 
| 329 | /* Special case: empty X509_NAME => null encoding */ | 354 | /* Special case: empty X509_NAME => null encoding */ | 
| 330 | if (sk_X509_NAME_ENTRY_num(a->entries) == 0) { | 355 | if (sk_X509_NAME_ENTRY_num(a->entries) == 0) { | 
| 331 | a->canon_enclen = 0; | 356 | a->canon_enclen = 0; | 
| 332 | return 1; | 357 | return 1; | 
| 333 | } | 358 | } | 
| 334 | intname = sk_STACK_OF_X509_NAME_ENTRY_new_null(); | 359 | intname = sk_STACK_OF_X509_NAME_ENTRY_new_null(); | 
| 335 | if(!intname) | 360 | if (!intname) | 
| 336 | goto err; | 361 | goto err; | 
| 337 | for(i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) { | 362 | for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) { | 
| 338 | entry = sk_X509_NAME_ENTRY_value(a->entries, i); | 363 | entry = sk_X509_NAME_ENTRY_value(a->entries, i); | 
| 339 | if(entry->set != set) { | 364 | if (entry->set != set) { | 
| 340 | entries = sk_X509_NAME_ENTRY_new_null(); | 365 | entries = sk_X509_NAME_ENTRY_new_null(); | 
| 341 | if(!entries) | 366 | if (!entries) | 
| 342 | goto err; | 367 | goto err; | 
| 343 | if(!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) | 368 | if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) | 
| 344 | goto err; | 369 | goto err; | 
| 345 | set = entry->set; | 370 | set = entry->set; | 
| 346 | } | 371 | } | 
| @@ -348,33 +373,27 @@ static int x509_name_canon(X509_NAME *a) | |||
| 348 | tmpentry->object = OBJ_dup(entry->object); | 373 | tmpentry->object = OBJ_dup(entry->object); | 
| 349 | if (!asn1_string_canon(tmpentry->value, entry->value)) | 374 | if (!asn1_string_canon(tmpentry->value, entry->value)) | 
| 350 | goto err; | 375 | goto err; | 
| 351 | if(!sk_X509_NAME_ENTRY_push(entries, tmpentry)) | 376 | if (!sk_X509_NAME_ENTRY_push(entries, tmpentry)) | 
| 352 | goto err; | 377 | goto err; | 
| 353 | tmpentry = NULL; | 378 | tmpentry = NULL; | 
| 354 | } | 379 | } | 
| 355 | 380 | ||
| 356 | /* Finally generate encoding */ | 381 | /* Finally generate encoding */ | 
| 357 | |||
| 358 | a->canon_enclen = i2d_name_canon(intname, NULL); | 382 | a->canon_enclen = i2d_name_canon(intname, NULL); | 
| 359 | |||
| 360 | p = malloc(a->canon_enclen); | 383 | p = malloc(a->canon_enclen); | 
| 361 | |||
| 362 | if (!p) | 384 | if (!p) | 
| 363 | goto err; | 385 | goto err; | 
| 364 | |||
| 365 | a->canon_enc = p; | 386 | a->canon_enc = p; | 
| 366 | |||
| 367 | i2d_name_canon(intname, &p); | 387 | i2d_name_canon(intname, &p); | 
| 368 | |||
| 369 | ret = 1; | 388 | ret = 1; | 
| 370 | 389 | ||
| 371 | err: | 390 | err: | 
| 372 | 391 | ||
| 373 | if (tmpentry) | 392 | if (tmpentry) | 
| 374 | X509_NAME_ENTRY_free(tmpentry); | 393 | X509_NAME_ENTRY_free(tmpentry); | 
| 375 | if (intname) | 394 | if (intname) | 
| 376 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname, | 395 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname, | 
| 377 | local_sk_X509_NAME_ENTRY_pop_free); | 396 | local_sk_X509_NAME_ENTRY_pop_free); | 
| 378 | return ret; | 397 | return ret; | 
| 379 | } | 398 | } | 
| 380 | 399 | ||
| @@ -384,9 +403,10 @@ static int x509_name_canon(X509_NAME *a) | |||
| 384 | (B_ASN1_UTF8STRING | B_ASN1_BMPSTRING | B_ASN1_UNIVERSALSTRING \ | 403 | (B_ASN1_UTF8STRING | B_ASN1_BMPSTRING | B_ASN1_UNIVERSALSTRING \ | 
| 385 | | B_ASN1_PRINTABLESTRING | B_ASN1_T61STRING | B_ASN1_IA5STRING \ | 404 | | B_ASN1_PRINTABLESTRING | B_ASN1_T61STRING | B_ASN1_IA5STRING \ | 
| 386 | | B_ASN1_VISIBLESTRING) | 405 | | B_ASN1_VISIBLESTRING) | 
| 387 | |||
| 388 | 406 | ||
| 389 | static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) | 407 | |
| 408 | static int | ||
| 409 | asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) | ||
| 390 | { | 410 | { | 
| 391 | unsigned char *to, *from; | 411 | unsigned char *to, *from; | 
| 392 | int len, i; | 412 | int len, i; | 
| @@ -415,7 +435,7 @@ static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) | |||
| 415 | */ | 435 | */ | 
| 416 | 436 | ||
| 417 | /* Ignore leading spaces */ | 437 | /* Ignore leading spaces */ | 
| 418 | while((len > 0) && !(*from & 0x80) && isspace(*from)) { | 438 | while ((len > 0) && !(*from & 0x80) && isspace(*from)) { | 
| 419 | from++; | 439 | from++; | 
| 420 | len--; | 440 | len--; | 
| 421 | } | 441 | } | 
| @@ -431,24 +451,24 @@ static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) | |||
| 431 | to = out->data; | 451 | to = out->data; | 
| 432 | 452 | ||
| 433 | i = 0; | 453 | i = 0; | 
| 434 | while(i < len) { | 454 | while (i < len) { | 
| 435 | /* If MSB set just copy across */ | 455 | /* If MSB set just copy across */ | 
| 436 | if (*from & 0x80) { | 456 | if (*from & 0x80) { | 
| 437 | *to++ = *from++; | 457 | *to++ = *from++; | 
| 438 | i++; | 458 | i++; | 
| 439 | } | 459 | } | 
| 440 | /* Collapse multiple spaces */ | 460 | /* Collapse multiple spaces */ | 
| 441 | else if (isspace(*from)) { | 461 | else if (isspace(*from)) { | 
| 442 | /* Copy one space across */ | 462 | /* Copy one space across */ | 
| 443 | *to++ = ' '; | 463 | *to++ = ' '; | 
| 444 | /* Ignore subsequent spaces. Note: don't need to | 464 | /* Ignore subsequent spaces. Note: don't need to | 
| 445 | * check len here because we know the last | 465 | * check len here because we know the last | 
| 446 | * character is a non-space so we can't overflow. | 466 | * character is a non-space so we can't overflow. | 
| 447 | */ | 467 | */ | 
| 448 | do { | 468 | do { | 
| 449 | from++; | 469 | from++; | 
| 450 | i++; | 470 | i++; | 
| 451 | } while(!(*from & 0x80) && isspace(*from)); | 471 | } while (!(*from & 0x80) && isspace(*from)); | 
| 452 | } else { | 472 | } else { | 
| 453 | *to++ = tolower(*from); | 473 | *to++ = tolower(*from); | 
| 454 | from++; | 474 | from++; | 
| @@ -459,11 +479,10 @@ static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) | |||
| 459 | out->length = to - out->data; | 479 | out->length = to - out->data; | 
| 460 | 480 | ||
| 461 | return 1; | 481 | return 1; | 
| 462 | |||
| 463 | } | 482 | } | 
| 464 | 483 | ||
| 465 | static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *_intname, | 484 | static int | 
| 466 | unsigned char **in) | 485 | i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *_intname, unsigned char **in) | 
| 467 | { | 486 | { | 
| 468 | int i, len, ltmp; | 487 | int i, len, ltmp; | 
| 469 | ASN1_VALUE *v; | 488 | ASN1_VALUE *v; | 
| @@ -473,7 +492,7 @@ static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *_intname, | |||
| 473 | for (i = 0; i < sk_ASN1_VALUE_num(intname); i++) { | 492 | for (i = 0; i < sk_ASN1_VALUE_num(intname); i++) { | 
| 474 | v = sk_ASN1_VALUE_value(intname, i); | 493 | v = sk_ASN1_VALUE_value(intname, i); | 
| 475 | ltmp = ASN1_item_ex_i2d(&v, in, | 494 | ltmp = ASN1_item_ex_i2d(&v, in, | 
| 476 | ASN1_ITEM_rptr(X509_NAME_ENTRIES), -1, -1); | 495 | ASN1_ITEM_rptr(X509_NAME_ENTRIES), -1, -1); | 
| 477 | if (ltmp < 0) | 496 | if (ltmp < 0) | 
| 478 | return ltmp; | 497 | return ltmp; | 
| 479 | len += ltmp; | 498 | len += ltmp; | 
| @@ -481,21 +500,23 @@ static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *_intname, | |||
| 481 | return len; | 500 | return len; | 
| 482 | } | 501 | } | 
| 483 | 502 | ||
| 484 | int X509_NAME_set(X509_NAME **xn, X509_NAME *name) | 503 | int | 
| 504 | X509_NAME_set(X509_NAME **xn, X509_NAME *name) | ||
| 485 | { | 505 | { | 
| 486 | X509_NAME *in; | 506 | X509_NAME *in; | 
| 487 | 507 | ||
| 488 | if (!xn || !name) return(0); | 508 | if (!xn || !name) | 
| 509 | return (0); | ||
| 489 | 510 | ||
| 490 | if (*xn != name) { | 511 | if (*xn != name) { | 
| 491 | in=X509_NAME_dup(name); | 512 | in = X509_NAME_dup(name); | 
| 492 | if (in != NULL) { | 513 | if (in != NULL) { | 
| 493 | X509_NAME_free(*xn); | 514 | X509_NAME_free(*xn); | 
| 494 | *xn=in; | 515 | *xn = in; | 
| 495 | } | 516 | } | 
| 496 | } | 517 | } | 
| 497 | return(*xn != NULL); | 518 | return (*xn != NULL); | 
| 498 | } | 519 | } | 
| 499 | 520 | ||
| 500 | IMPLEMENT_STACK_OF(X509_NAME_ENTRY) | 521 | IMPLEMENT_STACK_OF(X509_NAME_ENTRY) | 
| 501 | IMPLEMENT_ASN1_SET_OF(X509_NAME_ENTRY) | 522 | IMPLEMENT_ASN1_SET_OF(X509_NAME_ENTRY) | 
| diff --git a/src/lib/libcrypto/asn1/x_nx509.c b/src/lib/libcrypto/asn1/x_nx509.c index fbd9a22db3..538a9f95eb 100644 --- a/src/lib/libcrypto/asn1/x_nx509.c +++ b/src/lib/libcrypto/asn1/x_nx509.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -69,4 +69,3 @@ ASN1_SEQUENCE(NETSCAPE_X509) = { | |||
| 69 | } ASN1_SEQUENCE_END(NETSCAPE_X509) | 69 | } ASN1_SEQUENCE_END(NETSCAPE_X509) | 
| 70 | 70 | ||
| 71 | IMPLEMENT_ASN1_FUNCTIONS(NETSCAPE_X509) | 71 | IMPLEMENT_ASN1_FUNCTIONS(NETSCAPE_X509) | 
| 72 | |||
| diff --git a/src/lib/libcrypto/asn1/x_pkey.c b/src/lib/libcrypto/asn1/x_pkey.c index eac134a1ee..d18b8f6f5e 100644 --- a/src/lib/libcrypto/asn1/x_pkey.c +++ b/src/lib/libcrypto/asn1/x_pkey.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -64,75 +64,85 @@ | |||
| 64 | #include <openssl/x509.h> | 64 | #include <openssl/x509.h> | 
| 65 | 65 | ||
| 66 | /* need to implement */ | 66 | /* need to implement */ | 
| 67 | int i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp) | 67 | int | 
| 68 | i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp) | ||
| 68 | { | 69 | { | 
| 69 | return(0); | 70 | return (0); | 
| 70 | } | 71 | } | 
| 71 | 72 | ||
| 72 | X509_PKEY *d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp, long length) | 73 | X509_PKEY * | 
| 74 | d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp, long length) | ||
| 73 | { | 75 | { | 
| 74 | int i; | 76 | int i; | 
| 75 | M_ASN1_D2I_vars(a,X509_PKEY *,X509_PKEY_new); | 77 | M_ASN1_D2I_vars(a, X509_PKEY *, X509_PKEY_new); | 
| 76 | 78 | ||
| 77 | M_ASN1_D2I_Init(); | 79 | M_ASN1_D2I_Init(); | 
| 78 | M_ASN1_D2I_start_sequence(); | 80 | M_ASN1_D2I_start_sequence(); | 
| 79 | M_ASN1_D2I_get_x(X509_ALGOR,ret->enc_algor,d2i_X509_ALGOR); | 81 | M_ASN1_D2I_get_x(X509_ALGOR, ret->enc_algor, d2i_X509_ALGOR); | 
| 80 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING,ret->enc_pkey,d2i_ASN1_OCTET_STRING); | 82 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING, ret->enc_pkey, | 
| 83 | d2i_ASN1_OCTET_STRING); | ||
| 81 | 84 | ||
| 82 | ret->cipher.cipher=EVP_get_cipherbyname( | 85 | ret->cipher.cipher = EVP_get_cipherbyname( | 
| 83 | OBJ_nid2ln(OBJ_obj2nid(ret->enc_algor->algorithm))); | 86 | OBJ_nid2ln(OBJ_obj2nid(ret->enc_algor->algorithm))); | 
| 84 | if (ret->cipher.cipher == NULL) { | 87 | if (ret->cipher.cipher == NULL) { | 
| 85 | c.error=ASN1_R_UNSUPPORTED_CIPHER; | 88 | c.error = ASN1_R_UNSUPPORTED_CIPHER; | 
| 86 | c.line=__LINE__; | 89 | c.line = __LINE__; | 
| 87 | goto err; | 90 | goto err; | 
| 88 | } | 91 | } | 
| 89 | if (ret->enc_algor->parameter->type == V_ASN1_OCTET_STRING) { | 92 | if (ret->enc_algor->parameter->type == V_ASN1_OCTET_STRING) { | 
| 90 | i=ret->enc_algor->parameter->value.octet_string->length; | 93 | i = ret->enc_algor->parameter->value.octet_string->length; | 
| 91 | if (i > EVP_MAX_IV_LENGTH) { | 94 | if (i > EVP_MAX_IV_LENGTH) { | 
| 92 | c.error=ASN1_R_IV_TOO_LARGE; | 95 | c.error = ASN1_R_IV_TOO_LARGE; | 
| 93 | c.line=__LINE__; | 96 | c.line = __LINE__; | 
| 94 | goto err; | 97 | goto err; | 
| 95 | } | 98 | } | 
| 96 | memcpy(ret->cipher.iv, | 99 | memcpy(ret->cipher.iv, | 
| 97 | ret->enc_algor->parameter->value.octet_string->data,i); | 100 | ret->enc_algor->parameter->value.octet_string->data, i); | 
| 98 | } | 101 | } else | 
| 99 | else | 102 | memset(ret->cipher.iv, 0, EVP_MAX_IV_LENGTH); | 
| 100 | memset(ret->cipher.iv,0,EVP_MAX_IV_LENGTH); | 103 | M_ASN1_D2I_Finish(a, X509_PKEY_free, ASN1_F_D2I_X509_PKEY); | 
| 101 | M_ASN1_D2I_Finish(a,X509_PKEY_free,ASN1_F_D2I_X509_PKEY); | ||
| 102 | } | 104 | } | 
| 103 | 105 | ||
| 104 | X509_PKEY *X509_PKEY_new(void) | 106 | X509_PKEY * | 
| 107 | X509_PKEY_new(void) | ||
| 105 | { | 108 | { | 
| 106 | X509_PKEY *ret=NULL; | 109 | X509_PKEY *ret = NULL; | 
| 107 | ASN1_CTX c; | 110 | ASN1_CTX c; | 
| 108 | 111 | ||
| 109 | M_ASN1_New_Malloc(ret,X509_PKEY); | 112 | M_ASN1_New_Malloc(ret, X509_PKEY); | 
| 110 | ret->version=0; | 113 | ret->version = 0; | 
| 111 | M_ASN1_New(ret->enc_algor,X509_ALGOR_new); | 114 | M_ASN1_New(ret->enc_algor, X509_ALGOR_new); | 
| 112 | M_ASN1_New(ret->enc_pkey,M_ASN1_OCTET_STRING_new); | 115 | M_ASN1_New(ret->enc_pkey, M_ASN1_OCTET_STRING_new); | 
| 113 | ret->dec_pkey=NULL; | 116 | ret->dec_pkey = NULL; | 
| 114 | ret->key_length=0; | 117 | ret->key_length = 0; | 
| 115 | ret->key_data=NULL; | 118 | ret->key_data = NULL; | 
| 116 | ret->key_free=0; | 119 | ret->key_free = 0; | 
| 117 | ret->cipher.cipher=NULL; | 120 | ret->cipher.cipher = NULL; | 
| 118 | memset(ret->cipher.iv,0,EVP_MAX_IV_LENGTH); | 121 | memset(ret->cipher.iv, 0, EVP_MAX_IV_LENGTH); | 
| 119 | ret->references=1; | 122 | ret->references = 1; | 
| 120 | return(ret); | 123 | return (ret); | 
| 121 | M_ASN1_New_Error(ASN1_F_X509_PKEY_NEW); | 124 | M_ASN1_New_Error(ASN1_F_X509_PKEY_NEW); | 
| 122 | } | 125 | } | 
| 123 | 126 | ||
| 124 | void X509_PKEY_free(X509_PKEY *x) | 127 | void | 
| 128 | X509_PKEY_free(X509_PKEY *x) | ||
| 125 | { | 129 | { | 
| 126 | int i; | 130 | int i; | 
| 127 | 131 | ||
| 128 | if (x == NULL) return; | 132 | if (x == NULL) | 
| 133 | return; | ||
| 129 | 134 | ||
| 130 | i=CRYPTO_add(&x->references,-1,CRYPTO_LOCK_X509_PKEY); | 135 | i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_PKEY); | 
| 131 | if (i > 0) return; | 136 | if (i > 0) | 
| 137 | return; | ||
| 132 | 138 | ||
| 133 | if (x->enc_algor != NULL) X509_ALGOR_free(x->enc_algor); | 139 | if (x->enc_algor != NULL) | 
| 134 | if (x->enc_pkey != NULL) M_ASN1_OCTET_STRING_free(x->enc_pkey); | 140 | X509_ALGOR_free(x->enc_algor); | 
| 135 | if (x->dec_pkey != NULL)EVP_PKEY_free(x->dec_pkey); | 141 | if (x->enc_pkey != NULL) | 
| 136 | if ((x->key_data != NULL) && (x->key_free)) free(x->key_data); | 142 | M_ASN1_OCTET_STRING_free(x->enc_pkey); | 
| 143 | if (x->dec_pkey != NULL) | ||
| 144 | EVP_PKEY_free(x->dec_pkey); | ||
| 145 | if ((x->key_data != NULL) && (x->key_free)) | ||
| 146 | free(x->key_data); | ||
| 137 | free(x); | 147 | free(x); | 
| 138 | } | 148 | } | 
| diff --git a/src/lib/libcrypto/asn1/x_pubkey.c b/src/lib/libcrypto/asn1/x_pubkey.c index 1d6ab6580a..df915e2dfd 100644 --- a/src/lib/libcrypto/asn1/x_pubkey.c +++ b/src/lib/libcrypto/asn1/x_pubkey.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -69,8 +69,8 @@ | |||
| 69 | #endif | 69 | #endif | 
| 70 | 70 | ||
| 71 | /* Minor tweak to operation: free up EVP_PKEY */ | 71 | /* Minor tweak to operation: free up EVP_PKEY */ | 
| 72 | static int pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | 72 | static int | 
| 73 | void *exarg) | 73 | pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | 
| 74 | { | 74 | { | 
| 75 | if (operation == ASN1_OP_FREE_POST) { | 75 | if (operation == ASN1_OP_FREE_POST) { | 
| 76 | X509_PUBKEY *pubkey = (X509_PUBKEY *)*pval; | 76 | X509_PUBKEY *pubkey = (X509_PUBKEY *)*pval; | 
| @@ -86,54 +86,61 @@ ASN1_SEQUENCE_cb(X509_PUBKEY, pubkey_cb) = { | |||
| 86 | 86 | ||
| 87 | IMPLEMENT_ASN1_FUNCTIONS(X509_PUBKEY) | 87 | IMPLEMENT_ASN1_FUNCTIONS(X509_PUBKEY) | 
| 88 | 88 | ||
| 89 | int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | 89 | int | 
| 90 | X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | ||
| 90 | { | 91 | { | 
| 91 | X509_PUBKEY *pk=NULL; | 92 | X509_PUBKEY *pk = NULL; | 
| 92 | 93 | ||
| 93 | if (x == NULL) return(0); | 94 | if (x == NULL) | 
| 94 | 95 | return (0); | |
| 95 | if ((pk=X509_PUBKEY_new()) == NULL) goto error; | 96 | if ((pk = X509_PUBKEY_new()) == NULL) | 
| 97 | goto error; | ||
| 96 | 98 | ||
| 97 | if (pkey->ameth) { | 99 | if (pkey->ameth) { | 
| 98 | if (pkey->ameth->pub_encode) { | 100 | if (pkey->ameth->pub_encode) { | 
| 99 | if (!pkey->ameth->pub_encode(pk, pkey)) { | 101 | if (!pkey->ameth->pub_encode(pk, pkey)) { | 
| 100 | X509err(X509_F_X509_PUBKEY_SET, | 102 | X509err(X509_F_X509_PUBKEY_SET, | 
| 101 | X509_R_PUBLIC_KEY_ENCODE_ERROR); | 103 | X509_R_PUBLIC_KEY_ENCODE_ERROR); | 
| 102 | goto error; | 104 | goto error; | 
| 103 | } | 105 | } | 
| 104 | } else { | 106 | } else { | 
| 105 | X509err(X509_F_X509_PUBKEY_SET, | 107 | X509err(X509_F_X509_PUBKEY_SET, | 
| 106 | X509_R_METHOD_NOT_SUPPORTED); | 108 | X509_R_METHOD_NOT_SUPPORTED); | 
| 107 | goto error; | 109 | goto error; | 
| 108 | } | 110 | } | 
| 109 | } else { | 111 | } else { | 
| 110 | X509err(X509_F_X509_PUBKEY_SET,X509_R_UNSUPPORTED_ALGORITHM); | 112 | X509err(X509_F_X509_PUBKEY_SET, X509_R_UNSUPPORTED_ALGORITHM); | 
| 111 | goto error; | 113 | goto error; | 
| 112 | } | 114 | } | 
| 113 | 115 | ||
| 114 | if (*x != NULL) | 116 | if (*x != NULL) | 
| 115 | X509_PUBKEY_free(*x); | 117 | X509_PUBKEY_free(*x); | 
| 116 | 118 | ||
| 117 | *x=pk; | 119 | *x = pk; | 
| 118 | 120 | ||
| 119 | return 1; | 121 | return 1; | 
| 122 | |||
| 120 | error: | 123 | error: | 
| 121 | if (pk != NULL) X509_PUBKEY_free(pk); | 124 | if (pk != NULL) | 
| 125 | X509_PUBKEY_free(pk); | ||
| 122 | return 0; | 126 | return 0; | 
| 123 | } | 127 | } | 
| 124 | 128 | ||
| 125 | EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) | 129 | EVP_PKEY * | 
| 130 | X509_PUBKEY_get(X509_PUBKEY *key) | ||
| 126 | { | 131 | { | 
| 127 | EVP_PKEY *ret=NULL; | 132 | EVP_PKEY *ret = NULL; | 
| 128 | 133 | ||
| 129 | if (key == NULL) goto error; | 134 | if (key == NULL) | 
| 135 | goto error; | ||
| 130 | 136 | ||
| 131 | if (key->pkey != NULL) { | 137 | if (key->pkey != NULL) { | 
| 132 | CRYPTO_add(&key->pkey->references, 1, CRYPTO_LOCK_EVP_PKEY); | 138 | CRYPTO_add(&key->pkey->references, 1, CRYPTO_LOCK_EVP_PKEY); | 
| 133 | return key->pkey; | 139 | return key->pkey; | 
| 134 | } | 140 | } | 
| 135 | 141 | ||
| 136 | if (key->public_key == NULL) goto error; | 142 | if (key->public_key == NULL) | 
| 143 | goto error; | ||
| 137 | 144 | ||
| 138 | if ((ret = EVP_PKEY_new()) == NULL) { | 145 | if ((ret = EVP_PKEY_new()) == NULL) { | 
| 139 | X509err(X509_F_X509_PUBKEY_GET, ERR_R_MALLOC_FAILURE); | 146 | X509err(X509_F_X509_PUBKEY_GET, ERR_R_MALLOC_FAILURE); | 
| @@ -141,14 +148,14 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) | |||
| 141 | } | 148 | } | 
| 142 | 149 | ||
| 143 | if (!EVP_PKEY_set_type(ret, OBJ_obj2nid(key->algor->algorithm))) { | 150 | if (!EVP_PKEY_set_type(ret, OBJ_obj2nid(key->algor->algorithm))) { | 
| 144 | X509err(X509_F_X509_PUBKEY_GET,X509_R_UNSUPPORTED_ALGORITHM); | 151 | X509err(X509_F_X509_PUBKEY_GET, X509_R_UNSUPPORTED_ALGORITHM); | 
| 145 | goto error; | 152 | goto error; | 
| 146 | } | 153 | } | 
| 147 | 154 | ||
| 148 | if (ret->ameth->pub_decode) { | 155 | if (ret->ameth->pub_decode) { | 
| 149 | if (!ret->ameth->pub_decode(ret, key)) { | 156 | if (!ret->ameth->pub_decode(ret, key)) { | 
| 150 | X509err(X509_F_X509_PUBKEY_GET, | 157 | X509err(X509_F_X509_PUBKEY_GET, | 
| 151 | X509_R_PUBLIC_KEY_DECODE_ERROR); | 158 | X509_R_PUBLIC_KEY_DECODE_ERROR); | 
| 152 | goto error; | 159 | goto error; | 
| 153 | } | 160 | } | 
| 154 | } else { | 161 | } else { | 
| @@ -170,39 +177,44 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) | |||
| 170 | 177 | ||
| 171 | return ret; | 178 | return ret; | 
| 172 | 179 | ||
| 173 | error: | 180 | error: | 
| 174 | if (ret != NULL) | 181 | if (ret != NULL) | 
| 175 | EVP_PKEY_free(ret); | 182 | EVP_PKEY_free(ret); | 
| 176 | return(NULL); | 183 | return (NULL); | 
| 177 | } | 184 | } | 
| 178 | 185 | ||
| 179 | /* Now two pseudo ASN1 routines that take an EVP_PKEY structure | 186 | /* Now two pseudo ASN1 routines that take an EVP_PKEY structure | 
| 180 | * and encode or decode as X509_PUBKEY | 187 | * and encode or decode as X509_PUBKEY | 
| 181 | */ | 188 | */ | 
| 182 | 189 | ||
| 183 | EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, | 190 | EVP_PKEY * | 
| 184 | long length) | 191 | d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length) | 
| 185 | { | 192 | { | 
| 186 | X509_PUBKEY *xpk; | 193 | X509_PUBKEY *xpk; | 
| 187 | EVP_PKEY *pktmp; | 194 | EVP_PKEY *pktmp; | 
| 188 | xpk = d2i_X509_PUBKEY(NULL, pp, length); | 195 | xpk = d2i_X509_PUBKEY(NULL, pp, length); | 
| 189 | if(!xpk) return NULL; | 196 | if (!xpk) | 
| 197 | return NULL; | ||
| 190 | pktmp = X509_PUBKEY_get(xpk); | 198 | pktmp = X509_PUBKEY_get(xpk); | 
| 191 | X509_PUBKEY_free(xpk); | 199 | X509_PUBKEY_free(xpk); | 
| 192 | if(!pktmp) return NULL; | 200 | if (!pktmp) | 
| 193 | if(a) { | 201 | return NULL; | 
| 202 | if (a) { | ||
| 194 | EVP_PKEY_free(*a); | 203 | EVP_PKEY_free(*a); | 
| 195 | *a = pktmp; | 204 | *a = pktmp; | 
| 196 | } | 205 | } | 
| 197 | return pktmp; | 206 | return pktmp; | 
| 198 | } | 207 | } | 
| 199 | 208 | ||
| 200 | int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp) | 209 | int | 
| 210 | i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp) | ||
| 201 | { | 211 | { | 
| 202 | X509_PUBKEY *xpk=NULL; | 212 | X509_PUBKEY *xpk = NULL; | 
| 203 | int ret; | 213 | int ret; | 
| 204 | if(!a) return 0; | 214 | if (!a) | 
| 205 | if(!X509_PUBKEY_set(&xpk, a)) return 0; | 215 | return 0; | 
| 216 | if (!X509_PUBKEY_set(&xpk, a)) | ||
| 217 | return 0; | ||
| 206 | ret = i2d_X509_PUBKEY(xpk, pp); | 218 | ret = i2d_X509_PUBKEY(xpk, pp); | 
| 207 | X509_PUBKEY_free(xpk); | 219 | X509_PUBKEY_free(xpk); | 
| 208 | return ret; | 220 | return ret; | 
| @@ -212,18 +224,20 @@ int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp) | |||
| 212 | * keys | 224 | * keys | 
| 213 | */ | 225 | */ | 
| 214 | #ifndef OPENSSL_NO_RSA | 226 | #ifndef OPENSSL_NO_RSA | 
| 215 | RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, | 227 | RSA * | 
| 216 | long length) | 228 | d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length) | 
| 217 | { | 229 | { | 
| 218 | EVP_PKEY *pkey; | 230 | EVP_PKEY *pkey; | 
| 219 | RSA *key; | 231 | RSA *key; | 
| 220 | const unsigned char *q; | 232 | const unsigned char *q; | 
| 221 | q = *pp; | 233 | q = *pp; | 
| 222 | pkey = d2i_PUBKEY(NULL, &q, length); | 234 | pkey = d2i_PUBKEY(NULL, &q, length); | 
| 223 | if (!pkey) return NULL; | 235 | if (!pkey) | 
| 236 | return NULL; | ||
| 224 | key = EVP_PKEY_get1_RSA(pkey); | 237 | key = EVP_PKEY_get1_RSA(pkey); | 
| 225 | EVP_PKEY_free(pkey); | 238 | EVP_PKEY_free(pkey); | 
| 226 | if (!key) return NULL; | 239 | if (!key) | 
| 240 | return NULL; | ||
| 227 | *pp = q; | 241 | *pp = q; | 
| 228 | if (a) { | 242 | if (a) { | 
| 229 | RSA_free(*a); | 243 | RSA_free(*a); | 
| @@ -232,11 +246,13 @@ RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, | |||
| 232 | return key; | 246 | return key; | 
| 233 | } | 247 | } | 
| 234 | 248 | ||
| 235 | int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp) | 249 | int | 
| 250 | i2d_RSA_PUBKEY(RSA *a, unsigned char **pp) | ||
| 236 | { | 251 | { | 
| 237 | EVP_PKEY *pktmp; | 252 | EVP_PKEY *pktmp; | 
| 238 | int ret; | 253 | int ret; | 
| 239 | if (!a) return 0; | 254 | if (!a) | 
| 255 | return 0; | ||
| 240 | pktmp = EVP_PKEY_new(); | 256 | pktmp = EVP_PKEY_new(); | 
| 241 | if (!pktmp) { | 257 | if (!pktmp) { | 
| 242 | ASN1err(ASN1_F_I2D_RSA_PUBKEY, ERR_R_MALLOC_FAILURE); | 258 | ASN1err(ASN1_F_I2D_RSA_PUBKEY, ERR_R_MALLOC_FAILURE); | 
| @@ -250,18 +266,20 @@ int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp) | |||
| 250 | #endif | 266 | #endif | 
| 251 | 267 | ||
| 252 | #ifndef OPENSSL_NO_DSA | 268 | #ifndef OPENSSL_NO_DSA | 
| 253 | DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, | 269 | DSA * | 
| 254 | long length) | 270 | d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length) | 
| 255 | { | 271 | { | 
| 256 | EVP_PKEY *pkey; | 272 | EVP_PKEY *pkey; | 
| 257 | DSA *key; | 273 | DSA *key; | 
| 258 | const unsigned char *q; | 274 | const unsigned char *q; | 
| 259 | q = *pp; | 275 | q = *pp; | 
| 260 | pkey = d2i_PUBKEY(NULL, &q, length); | 276 | pkey = d2i_PUBKEY(NULL, &q, length); | 
| 261 | if (!pkey) return NULL; | 277 | if (!pkey) | 
| 278 | return NULL; | ||
| 262 | key = EVP_PKEY_get1_DSA(pkey); | 279 | key = EVP_PKEY_get1_DSA(pkey); | 
| 263 | EVP_PKEY_free(pkey); | 280 | EVP_PKEY_free(pkey); | 
| 264 | if (!key) return NULL; | 281 | if (!key) | 
| 282 | return NULL; | ||
| 265 | *pp = q; | 283 | *pp = q; | 
| 266 | if (a) { | 284 | if (a) { | 
| 267 | DSA_free(*a); | 285 | DSA_free(*a); | 
| @@ -270,13 +288,15 @@ DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, | |||
| 270 | return key; | 288 | return key; | 
| 271 | } | 289 | } | 
| 272 | 290 | ||
| 273 | int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp) | 291 | int | 
| 292 | i2d_DSA_PUBKEY(DSA *a, unsigned char **pp) | ||
| 274 | { | 293 | { | 
| 275 | EVP_PKEY *pktmp; | 294 | EVP_PKEY *pktmp; | 
| 276 | int ret; | 295 | int ret; | 
| 277 | if(!a) return 0; | 296 | if (!a) | 
| 297 | return 0; | ||
| 278 | pktmp = EVP_PKEY_new(); | 298 | pktmp = EVP_PKEY_new(); | 
| 279 | if(!pktmp) { | 299 | if (!pktmp) { | 
| 280 | ASN1err(ASN1_F_I2D_DSA_PUBKEY, ERR_R_MALLOC_FAILURE); | 300 | ASN1err(ASN1_F_I2D_DSA_PUBKEY, ERR_R_MALLOC_FAILURE); | 
| 281 | return 0; | 301 | return 0; | 
| 282 | } | 302 | } | 
| @@ -288,44 +308,49 @@ int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp) | |||
| 288 | #endif | 308 | #endif | 
| 289 | 309 | ||
| 290 | #ifndef OPENSSL_NO_EC | 310 | #ifndef OPENSSL_NO_EC | 
| 291 | EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length) | 311 | EC_KEY * | 
| 312 | d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length) | ||
| 292 | { | 313 | { | 
| 293 | EVP_PKEY *pkey; | 314 | EVP_PKEY *pkey; | 
| 294 | EC_KEY *key; | 315 | EC_KEY *key; | 
| 295 | const unsigned char *q; | 316 | const unsigned char *q; | 
| 296 | q = *pp; | 317 | q = *pp; | 
| 297 | pkey = d2i_PUBKEY(NULL, &q, length); | 318 | pkey = d2i_PUBKEY(NULL, &q, length); | 
| 298 | if (!pkey) return(NULL); | 319 | if (!pkey) | 
| 320 | return (NULL); | ||
| 299 | key = EVP_PKEY_get1_EC_KEY(pkey); | 321 | key = EVP_PKEY_get1_EC_KEY(pkey); | 
| 300 | EVP_PKEY_free(pkey); | 322 | EVP_PKEY_free(pkey); | 
| 301 | if (!key) return(NULL); | 323 | if (!key) | 
| 324 | return (NULL); | ||
| 302 | *pp = q; | 325 | *pp = q; | 
| 303 | if (a) { | 326 | if (a) { | 
| 304 | EC_KEY_free(*a); | 327 | EC_KEY_free(*a); | 
| 305 | *a = key; | 328 | *a = key; | 
| 306 | } | 329 | } | 
| 307 | return(key); | 330 | return (key); | 
| 308 | } | 331 | } | 
| 309 | 332 | ||
| 310 | int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp) | 333 | int | 
| 334 | i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp) | ||
| 311 | { | 335 | { | 
| 312 | EVP_PKEY *pktmp; | 336 | EVP_PKEY *pktmp; | 
| 313 | int ret; | 337 | int ret; | 
| 314 | if (!a) return(0); | 338 | if (!a) | 
| 339 | return (0); | ||
| 315 | if ((pktmp = EVP_PKEY_new()) == NULL) { | 340 | if ((pktmp = EVP_PKEY_new()) == NULL) { | 
| 316 | ASN1err(ASN1_F_I2D_EC_PUBKEY, ERR_R_MALLOC_FAILURE); | 341 | ASN1err(ASN1_F_I2D_EC_PUBKEY, ERR_R_MALLOC_FAILURE); | 
| 317 | return(0); | 342 | return (0); | 
| 318 | } | 343 | } | 
| 319 | EVP_PKEY_set1_EC_KEY(pktmp, a); | 344 | EVP_PKEY_set1_EC_KEY(pktmp, a); | 
| 320 | ret = i2d_PUBKEY(pktmp, pp); | 345 | ret = i2d_PUBKEY(pktmp, pp); | 
| 321 | EVP_PKEY_free(pktmp); | 346 | EVP_PKEY_free(pktmp); | 
| 322 | return(ret); | 347 | return (ret); | 
| 323 | } | 348 | } | 
| 324 | #endif | 349 | #endif | 
| 325 | 350 | ||
| 326 | int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, | 351 | int | 
| 327 | int ptype, void *pval, | 352 | X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, int ptype, | 
| 328 | unsigned char *penc, int penclen) | 353 | void *pval, unsigned char *penc, int penclen) | 
| 329 | { | 354 | { | 
| 330 | if (!X509_ALGOR_set0(pub->algor, aobj, ptype, pval)) | 355 | if (!X509_ALGOR_set0(pub->algor, aobj, ptype, pval)) | 
| 331 | return 0; | 356 | return 0; | 
| @@ -334,17 +359,16 @@ int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, | |||
| 334 | free(pub->public_key->data); | 359 | free(pub->public_key->data); | 
| 335 | pub->public_key->data = penc; | 360 | pub->public_key->data = penc; | 
| 336 | pub->public_key->length = penclen; | 361 | pub->public_key->length = penclen; | 
| 337 | /* Set number of unused bits to zero */ | 362 | /* Set number of unused bits to zero */ | 
| 338 | pub->public_key->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); | 363 | pub->public_key->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); | 
| 339 | pub->public_key->flags|=ASN1_STRING_FLAG_BITS_LEFT; | 364 | pub->public_key->flags |= ASN1_STRING_FLAG_BITS_LEFT; | 
| 340 | } | 365 | } | 
| 341 | return 1; | 366 | return 1; | 
| 342 | } | 367 | } | 
| 343 | 368 | ||
| 344 | int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, | 369 | int | 
| 345 | const unsigned char **pk, int *ppklen, | 370 | X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, const unsigned char **pk, | 
| 346 | X509_ALGOR **pa, | 371 | int *ppklen, X509_ALGOR **pa, X509_PUBKEY *pub) | 
| 347 | X509_PUBKEY *pub) | ||
| 348 | { | 372 | { | 
| 349 | if (ppkalg) | 373 | if (ppkalg) | 
| 350 | *ppkalg = pub->algor->algorithm; | 374 | *ppkalg = pub->algor->algorithm; | 
| diff --git a/src/lib/libcrypto/asn1/x_req.c b/src/lib/libcrypto/asn1/x_req.c index d57555827c..442f56a144 100644 --- a/src/lib/libcrypto/asn1/x_req.c +++ b/src/lib/libcrypto/asn1/x_req.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -66,7 +66,7 @@ | |||
| 66 | * encode the attributes field if it is empty. This is in | 66 | * encode the attributes field if it is empty. This is in | 
| 67 | * violation of PKCS#10 but we need to tolerate it. We do | 67 | * violation of PKCS#10 but we need to tolerate it. We do | 
| 68 | * this by making the attributes field OPTIONAL then using | 68 | * this by making the attributes field OPTIONAL then using | 
| 69 | * the callback to initialise it to an empty STACK. | 69 | * the callback to initialise it to an empty STACK. | 
| 70 | * | 70 | * | 
| 71 | * This means that the field will be correctly encoded unless | 71 | * This means that the field will be correctly encoded unless | 
| 72 | * we NULL out the field. | 72 | * we NULL out the field. | 
| @@ -79,14 +79,15 @@ | |||
| 79 | * | 79 | * | 
| 80 | */ | 80 | */ | 
| 81 | 81 | ||
| 82 | static int rinf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | 82 | static int | 
| 83 | void *exarg) | 83 | rinf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | 
| 84 | { | 84 | { | 
| 85 | X509_REQ_INFO *rinf = (X509_REQ_INFO *)*pval; | 85 | X509_REQ_INFO *rinf = (X509_REQ_INFO *)*pval; | 
| 86 | 86 | ||
| 87 | if(operation == ASN1_OP_NEW_POST) { | 87 | if (operation == ASN1_OP_NEW_POST) { | 
| 88 | rinf->attributes = sk_X509_ATTRIBUTE_new_null(); | 88 | rinf->attributes = sk_X509_ATTRIBUTE_new_null(); | 
| 89 | if(!rinf->attributes) return 0; | 89 | if (!rinf->attributes) | 
| 90 | return 0; | ||
| 90 | } | 91 | } | 
| 91 | return 1; | 92 | return 1; | 
| 92 | } | 93 | } | 
| diff --git a/src/lib/libcrypto/asn1/x_sig.c b/src/lib/libcrypto/asn1/x_sig.c index 42efa86c1c..5c9aef0365 100644 --- a/src/lib/libcrypto/asn1/x_sig.c +++ b/src/lib/libcrypto/asn1/x_sig.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| diff --git a/src/lib/libcrypto/asn1/x_spki.c b/src/lib/libcrypto/asn1/x_spki.c index 2aece077c5..34fe81443c 100644 --- a/src/lib/libcrypto/asn1/x_spki.c +++ b/src/lib/libcrypto/asn1/x_spki.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| diff --git a/src/lib/libcrypto/asn1/x_val.c b/src/lib/libcrypto/asn1/x_val.c index dc17c67758..6436f0cb55 100644 --- a/src/lib/libcrypto/asn1/x_val.c +++ b/src/lib/libcrypto/asn1/x_val.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| diff --git a/src/lib/libcrypto/asn1/x_x509.c b/src/lib/libcrypto/asn1/x_x509.c index 20448a8e3b..e7d613e20f 100644 --- a/src/lib/libcrypto/asn1/x_x509.c +++ b/src/lib/libcrypto/asn1/x_x509.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -81,15 +81,15 @@ IMPLEMENT_ASN1_FUNCTIONS(X509_CINF) | |||
| 81 | 81 | ||
| 82 | extern void policy_cache_free(X509_POLICY_CACHE *cache); | 82 | extern void policy_cache_free(X509_POLICY_CACHE *cache); | 
| 83 | 83 | ||
| 84 | static int x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | 84 | static int | 
| 85 | void *exarg) | 85 | x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | 
| 86 | { | 86 | { | 
| 87 | X509 *ret = (X509 *)*pval; | 87 | X509 *ret = (X509 *)*pval; | 
| 88 | 88 | ||
| 89 | switch(operation) { | 89 | switch (operation) { | 
| 90 | 90 | ||
| 91 | case ASN1_OP_NEW_POST: | 91 | case ASN1_OP_NEW_POST: | 
| 92 | ret->valid=0; | 92 | ret->valid = 0; | 
| 93 | ret->name = NULL; | 93 | ret->name = NULL; | 
| 94 | ret->ex_flags = 0; | 94 | ret->ex_flags = 0; | 
| 95 | ret->ex_pathlen = -1; | 95 | ret->ex_pathlen = -1; | 
| @@ -105,8 +105,9 @@ static int x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
| 105 | break; | 105 | break; | 
| 106 | 106 | ||
| 107 | case ASN1_OP_D2I_POST: | 107 | case ASN1_OP_D2I_POST: | 
| 108 | if (ret->name != NULL) free(ret->name); | 108 | if (ret->name != NULL) | 
| 109 | ret->name=X509_NAME_oneline(ret->cert_info->subject,NULL,0); | 109 | free(ret->name); | 
| 110 | ret->name = X509_NAME_oneline(ret->cert_info->subject, NULL, 0); | ||
| 110 | break; | 111 | break; | 
| 111 | 112 | ||
| 112 | case ASN1_OP_FREE_POST: | 113 | case ASN1_OP_FREE_POST: | 
| @@ -122,14 +123,12 @@ static int x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
| 122 | sk_IPAddressFamily_pop_free(ret->rfc3779_addr, IPAddressFamily_free); | 123 | sk_IPAddressFamily_pop_free(ret->rfc3779_addr, IPAddressFamily_free); | 
| 123 | ASIdentifiers_free(ret->rfc3779_asid); | 124 | ASIdentifiers_free(ret->rfc3779_asid); | 
| 124 | #endif | 125 | #endif | 
| 125 | 126 | if (ret->name != NULL) | |
| 126 | if (ret->name != NULL) free(ret->name); | 127 | free(ret->name); | 
| 127 | break; | 128 | break; | 
| 128 | |||
| 129 | } | 129 | } | 
| 130 | 130 | ||
| 131 | return 1; | 131 | return 1; | 
| 132 | |||
| 133 | } | 132 | } | 
| 134 | 133 | ||
| 135 | ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { | 134 | ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { | 
| @@ -141,21 +140,24 @@ ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { | |||
| 141 | IMPLEMENT_ASN1_FUNCTIONS(X509) | 140 | IMPLEMENT_ASN1_FUNCTIONS(X509) | 
| 142 | IMPLEMENT_ASN1_DUP_FUNCTION(X509) | 141 | IMPLEMENT_ASN1_DUP_FUNCTION(X509) | 
| 143 | 142 | ||
| 144 | int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, | 143 | int | 
| 145 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) | 144 | X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, | 
| 145 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) | ||
| 146 | { | 146 | { | 
| 147 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, argl, argp, | 147 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, argl, argp, | 
| 148 | new_func, dup_func, free_func); | 148 | new_func, dup_func, free_func); | 
| 149 | } | 149 | } | 
| 150 | 150 | ||
| 151 | int X509_set_ex_data(X509 *r, int idx, void *arg) | 151 | int | 
| 152 | X509_set_ex_data(X509 *r, int idx, void *arg) | ||
| 152 | { | 153 | { | 
| 153 | return(CRYPTO_set_ex_data(&r->ex_data,idx,arg)); | 154 | return (CRYPTO_set_ex_data(&r->ex_data, idx, arg)); | 
| 154 | } | 155 | } | 
| 155 | 156 | ||
| 156 | void *X509_get_ex_data(X509 *r, int idx) | 157 | void * | 
| 158 | X509_get_ex_data(X509 *r, int idx) | ||
| 157 | { | 159 | { | 
| 158 | return(CRYPTO_get_ex_data(&r->ex_data,idx)); | 160 | return (CRYPTO_get_ex_data(&r->ex_data, idx)); | 
| 159 | } | 161 | } | 
| 160 | 162 | ||
| 161 | /* X509_AUX ASN1 routines. X509_AUX is the name given to | 163 | /* X509_AUX ASN1 routines. X509_AUX is the name given to | 
| @@ -166,29 +168,38 @@ void *X509_get_ex_data(X509 *r, int idx) | |||
| 166 | * | 168 | * | 
| 167 | */ | 169 | */ | 
| 168 | 170 | ||
| 169 | X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length) | 171 | X509 * | 
| 172 | d2i_X509_AUX(X509 **a, const unsigned char **pp, long length) | ||
| 170 | { | 173 | { | 
| 171 | const unsigned char *q; | 174 | const unsigned char *q; | 
| 172 | X509 *ret; | 175 | X509 *ret; | 
| 176 | |||
| 173 | /* Save start position */ | 177 | /* Save start position */ | 
| 174 | q = *pp; | 178 | q = *pp; | 
| 175 | ret = d2i_X509(a, pp, length); | 179 | ret = d2i_X509(a, pp, length); | 
| 176 | /* If certificate unreadable then forget it */ | 180 | /* If certificate unreadable then forget it */ | 
| 177 | if(!ret) return NULL; | 181 | if (!ret) | 
| 182 | return NULL; | ||
| 178 | /* update length */ | 183 | /* update length */ | 
| 179 | length -= *pp - q; | 184 | length -= *pp - q; | 
| 180 | if(!length) return ret; | 185 | if (!length) | 
| 181 | if(!d2i_X509_CERT_AUX(&ret->aux, pp, length)) goto err; | 186 | return ret; | 
| 187 | if (!d2i_X509_CERT_AUX(&ret->aux, pp, length)) | ||
| 188 | goto err; | ||
| 182 | return ret; | 189 | return ret; | 
| 183 | err: | 190 | |
| 191 | err: | ||
| 184 | X509_free(ret); | 192 | X509_free(ret); | 
| 185 | return NULL; | 193 | return NULL; | 
| 186 | } | 194 | } | 
| 187 | 195 | ||
| 188 | int i2d_X509_AUX(X509 *a, unsigned char **pp) | 196 | int | 
| 197 | i2d_X509_AUX(X509 *a, unsigned char **pp) | ||
| 189 | { | 198 | { | 
| 190 | int length; | 199 | int length; | 
| 200 | |||
| 191 | length = i2d_X509(a, pp); | 201 | length = i2d_X509(a, pp); | 
| 192 | if(a) length += i2d_X509_CERT_AUX(a->aux, pp); | 202 | if (a) | 
| 203 | length += i2d_X509_CERT_AUX(a->aux, pp); | ||
| 193 | return length; | 204 | return length; | 
| 194 | } | 205 | } | 
| diff --git a/src/lib/libcrypto/asn1/x_x509a.c b/src/lib/libcrypto/asn1/x_x509a.c index 287d780830..69ea725709 100644 --- a/src/lib/libcrypto/asn1/x_x509a.c +++ b/src/lib/libcrypto/asn1/x_x509a.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -66,7 +66,7 @@ | |||
| 66 | * user modifiable data about a certificate. This data is | 66 | * user modifiable data about a certificate. This data is | 
| 67 | * appended to the X509 encoding when the *_X509_AUX routines | 67 | * appended to the X509 encoding when the *_X509_AUX routines | 
| 68 | * are used. This means that the "traditional" X509 routines | 68 | * are used. This means that the "traditional" X509 routines | 
| 69 | * will simply ignore the extra data. | 69 | * will simply ignore the extra data. | 
| 70 | */ | 70 | */ | 
| 71 | 71 | ||
| 72 | static X509_CERT_AUX *aux_get(X509 *x); | 72 | static X509_CERT_AUX *aux_get(X509 *x); | 
| @@ -81,14 +81,18 @@ ASN1_SEQUENCE(X509_CERT_AUX) = { | |||
| 81 | 81 | ||
| 82 | IMPLEMENT_ASN1_FUNCTIONS(X509_CERT_AUX) | 82 | IMPLEMENT_ASN1_FUNCTIONS(X509_CERT_AUX) | 
| 83 | 83 | ||
| 84 | static X509_CERT_AUX *aux_get(X509 *x) | 84 | static X509_CERT_AUX * | 
| 85 | aux_get(X509 *x) | ||
| 85 | { | 86 | { | 
| 86 | if(!x) return NULL; | 87 | if (!x) | 
| 87 | if(!x->aux && !(x->aux = X509_CERT_AUX_new())) return NULL; | 88 | return NULL; | 
| 89 | if (!x->aux && !(x->aux = X509_CERT_AUX_new())) | ||
| 90 | return NULL; | ||
| 88 | return x->aux; | 91 | return x->aux; | 
| 89 | } | 92 | } | 
| 90 | 93 | ||
| 91 | int X509_alias_set1(X509 *x, unsigned char *name, int len) | 94 | int | 
| 95 | X509_alias_set1(X509 *x, unsigned char *name, int len) | ||
| 92 | { | 96 | { | 
| 93 | X509_CERT_AUX *aux; | 97 | X509_CERT_AUX *aux; | 
| 94 | if (!name) { | 98 | if (!name) { | 
| @@ -98,12 +102,15 @@ int X509_alias_set1(X509 *x, unsigned char *name, int len) | |||
| 98 | x->aux->alias = NULL; | 102 | x->aux->alias = NULL; | 
| 99 | return 1; | 103 | return 1; | 
| 100 | } | 104 | } | 
| 101 | if(!(aux = aux_get(x))) return 0; | 105 | if (!(aux = aux_get(x))) | 
| 102 | if(!aux->alias && !(aux->alias = ASN1_UTF8STRING_new())) return 0; | 106 | return 0; | 
| 107 | if (!aux->alias && !(aux->alias = ASN1_UTF8STRING_new())) | ||
| 108 | return 0; | ||
| 103 | return ASN1_STRING_set(aux->alias, name, len); | 109 | return ASN1_STRING_set(aux->alias, name, len); | 
| 104 | } | 110 | } | 
| 105 | 111 | ||
| 106 | int X509_keyid_set1(X509 *x, unsigned char *id, int len) | 112 | int | 
| 113 | X509_keyid_set1(X509 *x, unsigned char *id, int len) | ||
| 107 | { | 114 | { | 
| 108 | X509_CERT_AUX *aux; | 115 | X509_CERT_AUX *aux; | 
| 109 | if (!id) { | 116 | if (!id) { | 
| @@ -113,58 +120,74 @@ int X509_keyid_set1(X509 *x, unsigned char *id, int len) | |||
| 113 | x->aux->keyid = NULL; | 120 | x->aux->keyid = NULL; | 
| 114 | return 1; | 121 | return 1; | 
| 115 | } | 122 | } | 
| 116 | if(!(aux = aux_get(x))) return 0; | 123 | if (!(aux = aux_get(x))) | 
| 117 | if(!aux->keyid && !(aux->keyid = ASN1_OCTET_STRING_new())) return 0; | 124 | return 0; | 
| 125 | if (!aux->keyid && !(aux->keyid = ASN1_OCTET_STRING_new())) | ||
| 126 | return 0; | ||
| 118 | return ASN1_STRING_set(aux->keyid, id, len); | 127 | return ASN1_STRING_set(aux->keyid, id, len); | 
| 119 | } | 128 | } | 
| 120 | 129 | ||
| 121 | unsigned char *X509_alias_get0(X509 *x, int *len) | 130 | unsigned char * | 
| 131 | X509_alias_get0(X509 *x, int *len) | ||
| 122 | { | 132 | { | 
| 123 | if(!x->aux || !x->aux->alias) return NULL; | 133 | if (!x->aux || !x->aux->alias) | 
| 124 | if(len) *len = x->aux->alias->length; | 134 | return NULL; | 
| 135 | if (len) | ||
| 136 | *len = x->aux->alias->length; | ||
| 125 | return x->aux->alias->data; | 137 | return x->aux->alias->data; | 
| 126 | } | 138 | } | 
| 127 | 139 | ||
| 128 | unsigned char *X509_keyid_get0(X509 *x, int *len) | 140 | unsigned char * | 
| 141 | X509_keyid_get0(X509 *x, int *len) | ||
| 129 | { | 142 | { | 
| 130 | if(!x->aux || !x->aux->keyid) return NULL; | 143 | if (!x->aux || !x->aux->keyid) | 
| 131 | if(len) *len = x->aux->keyid->length; | 144 | return NULL; | 
| 145 | if (len) | ||
| 146 | *len = x->aux->keyid->length; | ||
| 132 | return x->aux->keyid->data; | 147 | return x->aux->keyid->data; | 
| 133 | } | 148 | } | 
| 134 | 149 | ||
| 135 | int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj) | 150 | int | 
| 151 | X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj) | ||
| 136 | { | 152 | { | 
| 137 | X509_CERT_AUX *aux; | 153 | X509_CERT_AUX *aux; | 
| 138 | ASN1_OBJECT *objtmp; | 154 | ASN1_OBJECT *objtmp; | 
| 139 | if(!(objtmp = OBJ_dup(obj))) return 0; | 155 | if (!(objtmp = OBJ_dup(obj))) | 
| 140 | if(!(aux = aux_get(x))) return 0; | 156 | return 0; | 
| 141 | if(!aux->trust | 157 | if (!(aux = aux_get(x))) | 
| 142 | && !(aux->trust = sk_ASN1_OBJECT_new_null())) return 0; | 158 | return 0; | 
| 159 | if (!aux->trust && !(aux->trust = sk_ASN1_OBJECT_new_null())) | ||
| 160 | return 0; | ||
| 143 | return sk_ASN1_OBJECT_push(aux->trust, objtmp); | 161 | return sk_ASN1_OBJECT_push(aux->trust, objtmp); | 
| 144 | } | 162 | } | 
| 145 | 163 | ||
| 146 | int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj) | 164 | int | 
| 165 | X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj) | ||
| 147 | { | 166 | { | 
| 148 | X509_CERT_AUX *aux; | 167 | X509_CERT_AUX *aux; | 
| 149 | ASN1_OBJECT *objtmp; | 168 | ASN1_OBJECT *objtmp; | 
| 150 | if(!(objtmp = OBJ_dup(obj))) return 0; | 169 | if (!(objtmp = OBJ_dup(obj))) | 
| 151 | if(!(aux = aux_get(x))) return 0; | 170 | return 0; | 
| 152 | if(!aux->reject | 171 | if (!(aux = aux_get(x))) | 
| 153 | && !(aux->reject = sk_ASN1_OBJECT_new_null())) return 0; | 172 | return 0; | 
| 173 | if (!aux->reject && !(aux->reject = sk_ASN1_OBJECT_new_null())) | ||
| 174 | return 0; | ||
| 154 | return sk_ASN1_OBJECT_push(aux->reject, objtmp); | 175 | return sk_ASN1_OBJECT_push(aux->reject, objtmp); | 
| 155 | } | 176 | } | 
| 156 | 177 | ||
| 157 | void X509_trust_clear(X509 *x) | 178 | void | 
| 179 | X509_trust_clear(X509 *x) | ||
| 158 | { | 180 | { | 
| 159 | if(x->aux && x->aux->trust) { | 181 | if (x->aux && x->aux->trust) { | 
| 160 | sk_ASN1_OBJECT_pop_free(x->aux->trust, ASN1_OBJECT_free); | 182 | sk_ASN1_OBJECT_pop_free(x->aux->trust, ASN1_OBJECT_free); | 
| 161 | x->aux->trust = NULL; | 183 | x->aux->trust = NULL; | 
| 162 | } | 184 | } | 
| 163 | } | 185 | } | 
| 164 | 186 | ||
| 165 | void X509_reject_clear(X509 *x) | 187 | void | 
| 188 | X509_reject_clear(X509 *x) | ||
| 166 | { | 189 | { | 
| 167 | if(x->aux && x->aux->reject) { | 190 | if (x->aux && x->aux->reject) { | 
| 168 | sk_ASN1_OBJECT_pop_free(x->aux->reject, ASN1_OBJECT_free); | 191 | sk_ASN1_OBJECT_pop_free(x->aux->reject, ASN1_OBJECT_free); | 
| 169 | x->aux->reject = NULL; | 192 | x->aux->reject = NULL; | 
| 170 | } | 193 | } | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_algor.c b/src/lib/libssl/src/crypto/asn1/x_algor.c index 7ae473485c..65f81e8692 100644 --- a/src/lib/libssl/src/crypto/asn1/x_algor.c +++ b/src/lib/libssl/src/crypto/asn1/x_algor.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -66,8 +66,8 @@ ASN1_SEQUENCE(X509_ALGOR) = { | |||
| 66 | ASN1_OPT(X509_ALGOR, parameter, ASN1_ANY) | 66 | ASN1_OPT(X509_ALGOR, parameter, ASN1_ANY) | 
| 67 | } ASN1_SEQUENCE_END(X509_ALGOR) | 67 | } ASN1_SEQUENCE_END(X509_ALGOR) | 
| 68 | 68 | ||
| 69 | ASN1_ITEM_TEMPLATE(X509_ALGORS) = | 69 | ASN1_ITEM_TEMPLATE(X509_ALGORS) = | 
| 70 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR) | 70 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, algorithms, X509_ALGOR) | 
| 71 | ASN1_ITEM_TEMPLATE_END(X509_ALGORS) | 71 | ASN1_ITEM_TEMPLATE_END(X509_ALGORS) | 
| 72 | 72 | ||
| 73 | IMPLEMENT_ASN1_FUNCTIONS(X509_ALGOR) | 73 | IMPLEMENT_ASN1_FUNCTIONS(X509_ALGOR) | 
| @@ -77,7 +77,8 @@ IMPLEMENT_ASN1_DUP_FUNCTION(X509_ALGOR) | |||
| 77 | IMPLEMENT_STACK_OF(X509_ALGOR) | 77 | IMPLEMENT_STACK_OF(X509_ALGOR) | 
| 78 | IMPLEMENT_ASN1_SET_OF(X509_ALGOR) | 78 | IMPLEMENT_ASN1_SET_OF(X509_ALGOR) | 
| 79 | 79 | ||
| 80 | int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval) | 80 | int | 
| 81 | X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval) | ||
| 81 | { | 82 | { | 
| 82 | if (!alg) | 83 | if (!alg) | 
| 83 | return 0; | 84 | return 0; | 
| @@ -93,20 +94,20 @@ int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype, void *pval) | |||
| 93 | alg->algorithm = aobj; | 94 | alg->algorithm = aobj; | 
| 94 | } | 95 | } | 
| 95 | if (ptype == 0) | 96 | if (ptype == 0) | 
| 96 | return 1; | 97 | return 1; | 
| 97 | if (ptype == V_ASN1_UNDEF) { | 98 | if (ptype == V_ASN1_UNDEF) { | 
| 98 | if (alg->parameter) { | 99 | if (alg->parameter) { | 
| 99 | ASN1_TYPE_free(alg->parameter); | 100 | ASN1_TYPE_free(alg->parameter); | 
| 100 | alg->parameter = NULL; | 101 | alg->parameter = NULL; | 
| 101 | } | 102 | } | 
| 102 | } | 103 | } else | 
| 103 | else | ||
| 104 | ASN1_TYPE_set(alg->parameter, ptype, pval); | 104 | ASN1_TYPE_set(alg->parameter, ptype, pval); | 
| 105 | return 1; | 105 | return 1; | 
| 106 | } | 106 | } | 
| 107 | 107 | ||
| 108 | void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, | 108 | void | 
| 109 | X509_ALGOR *algor) | 109 | X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, | 
| 110 | X509_ALGOR *algor) | ||
| 110 | { | 111 | { | 
| 111 | if (paobj) | 112 | if (paobj) | 
| 112 | *paobj = algor->algorithm; | 113 | *paobj = algor->algorithm; | 
| @@ -114,8 +115,7 @@ void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, | |||
| 114 | if (algor->parameter == NULL) { | 115 | if (algor->parameter == NULL) { | 
| 115 | *pptype = V_ASN1_UNDEF; | 116 | *pptype = V_ASN1_UNDEF; | 
| 116 | return; | 117 | return; | 
| 117 | } | 118 | } else | 
| 118 | else | ||
| 119 | *pptype = algor->parameter->type; | 119 | *pptype = algor->parameter->type; | 
| 120 | if (ppval) | 120 | if (ppval) | 
| 121 | *ppval = algor->parameter->value.ptr; | 121 | *ppval = algor->parameter->value.ptr; | 
| @@ -124,7 +124,8 @@ void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, void **ppval, | |||
| 124 | 124 | ||
| 125 | /* Set up an X509_ALGOR DigestAlgorithmIdentifier from an EVP_MD */ | 125 | /* Set up an X509_ALGOR DigestAlgorithmIdentifier from an EVP_MD */ | 
| 126 | 126 | ||
| 127 | void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md) | 127 | void | 
| 128 | X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md) | ||
| 128 | { | 129 | { | 
| 129 | int param_type; | 130 | int param_type; | 
| 130 | 131 | ||
| @@ -134,5 +135,4 @@ void X509_ALGOR_set_md(X509_ALGOR *alg, const EVP_MD *md) | |||
| 134 | param_type = V_ASN1_NULL; | 135 | param_type = V_ASN1_NULL; | 
| 135 | 136 | ||
| 136 | X509_ALGOR_set0(alg, OBJ_nid2obj(EVP_MD_type(md)), param_type, NULL); | 137 | X509_ALGOR_set0(alg, OBJ_nid2obj(EVP_MD_type(md)), param_type, NULL); | 
| 137 | |||
| 138 | } | 138 | } | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_attrib.c b/src/lib/libssl/src/crypto/asn1/x_attrib.c index e620e1224e..248a6efa4e 100644 --- a/src/lib/libssl/src/crypto/asn1/x_attrib.c +++ b/src/lib/libssl/src/crypto/asn1/x_attrib.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -96,23 +96,30 @@ ASN1_SEQUENCE(X509_ATTRIBUTE) = { | |||
| 96 | IMPLEMENT_ASN1_FUNCTIONS(X509_ATTRIBUTE) | 96 | IMPLEMENT_ASN1_FUNCTIONS(X509_ATTRIBUTE) | 
| 97 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) | 97 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_ATTRIBUTE) | 
| 98 | 98 | ||
| 99 | X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value) | 99 | X509_ATTRIBUTE * | 
| 100 | X509_ATTRIBUTE_create(int nid, int atrtype, void *value) | ||
| 100 | { | 101 | { | 
| 101 | X509_ATTRIBUTE *ret=NULL; | 102 | X509_ATTRIBUTE *ret = NULL; | 
| 102 | ASN1_TYPE *val=NULL; | 103 | ASN1_TYPE *val = NULL; | 
| 104 | |||
| 105 | if ((ret = X509_ATTRIBUTE_new()) == NULL) | ||
| 106 | return (NULL); | ||
| 107 | ret->object = OBJ_nid2obj(nid); | ||
| 108 | ret->single = 0; | ||
| 109 | if ((ret->value.set = sk_ASN1_TYPE_new_null()) == NULL) | ||
| 110 | goto err; | ||
| 111 | if ((val = ASN1_TYPE_new()) == NULL) | ||
| 112 | goto err; | ||
| 113 | if (!sk_ASN1_TYPE_push(ret->value.set, val)) | ||
| 114 | goto err; | ||
| 103 | 115 | ||
| 104 | if ((ret=X509_ATTRIBUTE_new()) == NULL) | 116 | ASN1_TYPE_set(val, atrtype, value); | 
| 105 | return(NULL); | 117 | return (ret); | 
| 106 | ret->object=OBJ_nid2obj(nid); | ||
| 107 | ret->single=0; | ||
| 108 | if ((ret->value.set=sk_ASN1_TYPE_new_null()) == NULL) goto err; | ||
| 109 | if ((val=ASN1_TYPE_new()) == NULL) goto err; | ||
| 110 | if (!sk_ASN1_TYPE_push(ret->value.set,val)) goto err; | ||
| 111 | 118 | ||
| 112 | ASN1_TYPE_set(val,atrtype,value); | ||
| 113 | return(ret); | ||
| 114 | err: | 119 | err: | 
| 115 | if (ret != NULL) X509_ATTRIBUTE_free(ret); | 120 | if (ret != NULL) | 
| 116 | if (val != NULL) ASN1_TYPE_free(val); | 121 | X509_ATTRIBUTE_free(ret); | 
| 117 | return(NULL); | 122 | if (val != NULL) | 
| 123 | ASN1_TYPE_free(val); | ||
| 124 | return (NULL); | ||
| 118 | } | 125 | } | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_bignum.c b/src/lib/libssl/src/crypto/asn1/x_bignum.c index 9cf3204a1b..bc74164fdc 100644 --- a/src/lib/libssl/src/crypto/asn1/x_bignum.c +++ b/src/lib/libssl/src/crypto/asn1/x_bignum.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -72,11 +72,14 @@ | |||
| 72 | static int bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it); | 72 | static int bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it); | 
| 73 | static void bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it); | 73 | static void bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it); | 
| 74 | 74 | ||
| 75 | static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it); | 75 | static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, | 
| 76 | static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it); | 76 | const ASN1_ITEM *it); | 
| 77 | static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, | ||
| 78 | int utype, char *free_cont, const ASN1_ITEM *it); | ||
| 77 | 79 | ||
| 78 | static ASN1_PRIMITIVE_FUNCS bignum_pf = { | 80 | static ASN1_PRIMITIVE_FUNCS bignum_pf = { | 
| 79 | NULL, 0, | 81 | NULL, | 
| 82 | 0, | ||
| 80 | bn_new, | 83 | bn_new, | 
| 81 | bn_free, | 84 | bn_free, | 
| 82 | 0, | 85 | 0, | 
| @@ -85,55 +88,69 @@ static ASN1_PRIMITIVE_FUNCS bignum_pf = { | |||
| 85 | }; | 88 | }; | 
| 86 | 89 | ||
| 87 | ASN1_ITEM_start(BIGNUM) | 90 | ASN1_ITEM_start(BIGNUM) | 
| 88 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &bignum_pf, 0, "BIGNUM" | 91 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &bignum_pf, 0, "BIGNUM" | 
| 89 | ASN1_ITEM_end(BIGNUM) | 92 | ASN1_ITEM_end(BIGNUM) | 
| 90 | 93 | ||
| 91 | ASN1_ITEM_start(CBIGNUM) | 94 | ASN1_ITEM_start(CBIGNUM) | 
| 92 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &bignum_pf, BN_SENSITIVE, "BIGNUM" | 95 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &bignum_pf, BN_SENSITIVE, "BIGNUM" | 
| 93 | ASN1_ITEM_end(CBIGNUM) | 96 | ASN1_ITEM_end(CBIGNUM) | 
| 94 | 97 | ||
| 95 | static int bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it) | 98 | static int | 
| 99 | bn_new(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||
| 96 | { | 100 | { | 
| 97 | *pval = (ASN1_VALUE *)BN_new(); | 101 | *pval = (ASN1_VALUE *)BN_new(); | 
| 98 | if(*pval) return 1; | 102 | if (*pval) | 
| 99 | else return 0; | 103 | return 1; | 
| 104 | else | ||
| 105 | return 0; | ||
| 100 | } | 106 | } | 
| 101 | 107 | ||
| 102 | static void bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | 108 | static void | 
| 109 | bn_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||
| 103 | { | 110 | { | 
| 104 | if(!*pval) return; | 111 | if (!*pval) | 
| 105 | if(it->size & BN_SENSITIVE) BN_clear_free((BIGNUM *)*pval); | 112 | return; | 
| 106 | else BN_free((BIGNUM *)*pval); | 113 | if (it->size & BN_SENSITIVE) | 
| 114 | BN_clear_free((BIGNUM *)*pval); | ||
| 115 | else | ||
| 116 | BN_free((BIGNUM *)*pval); | ||
| 107 | *pval = NULL; | 117 | *pval = NULL; | 
| 108 | } | 118 | } | 
| 109 | 119 | ||
| 110 | static int bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it) | 120 | static int | 
| 121 | bn_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it) | ||
| 111 | { | 122 | { | 
| 112 | BIGNUM *bn; | 123 | BIGNUM *bn; | 
| 113 | int pad; | 124 | int pad; | 
| 114 | if(!*pval) return -1; | 125 | |
| 126 | if (!*pval) | ||
| 127 | return -1; | ||
| 115 | bn = (BIGNUM *)*pval; | 128 | bn = (BIGNUM *)*pval; | 
| 116 | /* If MSB set in an octet we need a padding byte */ | 129 | /* If MSB set in an octet we need a padding byte */ | 
| 117 | if(BN_num_bits(bn) & 0x7) pad = 0; | 130 | if (BN_num_bits(bn) & 0x7) | 
| 118 | else pad = 1; | 131 | pad = 0; | 
| 119 | if(cont) { | 132 | else | 
| 120 | if(pad) *cont++ = 0; | 133 | pad = 1; | 
| 134 | if (cont) { | ||
| 135 | if (pad) | ||
| 136 | *cont++ = 0; | ||
| 121 | BN_bn2bin(bn, cont); | 137 | BN_bn2bin(bn, cont); | 
| 122 | } | 138 | } | 
| 123 | return pad + BN_num_bytes(bn); | 139 | return pad + BN_num_bytes(bn); | 
| 124 | } | 140 | } | 
| 125 | 141 | ||
| 126 | static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, | 142 | static int | 
| 127 | int utype, char *free_cont, const ASN1_ITEM *it) | 143 | bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, | 
| 144 | char *free_cont, const ASN1_ITEM *it) | ||
| 128 | { | 145 | { | 
| 129 | BIGNUM *bn; | 146 | BIGNUM *bn; | 
| 130 | if(!*pval) bn_new(pval, it); | 147 | |
| 131 | bn = (BIGNUM *)*pval; | 148 | if (!*pval) | 
| 132 | if(!BN_bin2bn(cont, len, bn)) { | 149 | bn_new(pval, it); | 
| 150 | bn = (BIGNUM *)*pval; | ||
| 151 | if (!BN_bin2bn(cont, len, bn)) { | ||
| 133 | bn_free(pval, it); | 152 | bn_free(pval, it); | 
| 134 | return 0; | 153 | return 0; | 
| 135 | } | 154 | } | 
| 136 | return 1; | 155 | return 1; | 
| 137 | } | 156 | } | 
| 138 | |||
| 139 | |||
| diff --git a/src/lib/libssl/src/crypto/asn1/x_crl.c b/src/lib/libssl/src/crypto/asn1/x_crl.c index ea94f026b2..674cca4a1c 100644 --- a/src/lib/libssl/src/crypto/asn1/x_crl.c +++ b/src/lib/libssl/src/crypto/asn1/x_crl.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -64,23 +64,23 @@ | |||
| 64 | #include <openssl/x509v3.h> | 64 | #include <openssl/x509v3.h> | 
| 65 | 65 | ||
| 66 | static int X509_REVOKED_cmp(const X509_REVOKED * const *a, | 66 | static int X509_REVOKED_cmp(const X509_REVOKED * const *a, | 
| 67 | const X509_REVOKED * const *b); | 67 | const X509_REVOKED * const *b); | 
| 68 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp); | 68 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp); | 
| 69 | 69 | ||
| 70 | ASN1_SEQUENCE(X509_REVOKED) = { | 70 | ASN1_SEQUENCE(X509_REVOKED) = { | 
| 71 | ASN1_SIMPLE(X509_REVOKED,serialNumber, ASN1_INTEGER), | 71 | ASN1_SIMPLE(X509_REVOKED, serialNumber, ASN1_INTEGER), | 
| 72 | ASN1_SIMPLE(X509_REVOKED,revocationDate, ASN1_TIME), | 72 | ASN1_SIMPLE(X509_REVOKED, revocationDate, ASN1_TIME), | 
| 73 | ASN1_SEQUENCE_OF_OPT(X509_REVOKED,extensions, X509_EXTENSION) | 73 | ASN1_SEQUENCE_OF_OPT(X509_REVOKED, extensions, X509_EXTENSION) | 
| 74 | } ASN1_SEQUENCE_END(X509_REVOKED) | 74 | } ASN1_SEQUENCE_END(X509_REVOKED) | 
| 75 | 75 | ||
| 76 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r); | 76 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r); | 
| 77 | static int def_crl_lookup(X509_CRL *crl, | 77 | static int def_crl_lookup(X509_CRL *crl, X509_REVOKED **ret, | 
| 78 | X509_REVOKED **ret, ASN1_INTEGER *serial, X509_NAME *issuer); | 78 | ASN1_INTEGER *serial, X509_NAME *issuer); | 
| 79 | 79 | ||
| 80 | static X509_CRL_METHOD int_crl_meth = | 80 | static X509_CRL_METHOD int_crl_meth = { | 
| 81 | { | 81 | 0, | 
| 82 | 0, | ||
| 82 | 0, | 83 | 0, | 
| 83 | 0,0, | ||
| 84 | def_crl_lookup, | 84 | def_crl_lookup, | 
| 85 | def_crl_verify | 85 | def_crl_verify | 
| 86 | }; | 86 | }; | 
| @@ -91,18 +91,19 @@ static const X509_CRL_METHOD *default_crl_method = &int_crl_meth; | |||
| 91 | * Since we cache the original encoding the signature wont be affected by | 91 | * Since we cache the original encoding the signature wont be affected by | 
| 92 | * reordering of the revoked field. | 92 | * reordering of the revoked field. | 
| 93 | */ | 93 | */ | 
| 94 | static int crl_inf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | 94 | static int | 
| 95 | void *exarg) | 95 | crl_inf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | 
| 96 | { | 96 | { | 
| 97 | X509_CRL_INFO *a = (X509_CRL_INFO *)*pval; | 97 | X509_CRL_INFO *a = (X509_CRL_INFO *)*pval; | 
| 98 | 98 | ||
| 99 | if(!a || !a->revoked) return 1; | 99 | if (!a || !a->revoked) | 
| 100 | switch(operation) { | 100 | return 1; | 
| 101 | switch (operation) { | ||
| 101 | /* Just set cmp function here. We don't sort because that | 102 | /* Just set cmp function here. We don't sort because that | 
| 102 | * would affect the output of X509_CRL_print(). | 103 | * would affect the output of X509_CRL_print(). | 
| 103 | */ | 104 | */ | 
| 104 | case ASN1_OP_D2I_POST: | 105 | case ASN1_OP_D2I_POST: | 
| 105 | (void)sk_X509_REVOKED_set_cmp_func(a->revoked,X509_REVOKED_cmp); | 106 | (void)sk_X509_REVOKED_set_cmp_func(a->revoked, X509_REVOKED_cmp); | 
| 106 | break; | 107 | break; | 
| 107 | } | 108 | } | 
| 108 | return 1; | 109 | return 1; | 
| @@ -123,9 +124,9 @@ ASN1_SEQUENCE_enc(X509_CRL_INFO, enc, crl_inf_cb) = { | |||
| 123 | * Check for unhandled critical CRL entry extensions. | 124 | * Check for unhandled critical CRL entry extensions. | 
| 124 | */ | 125 | */ | 
| 125 | 126 | ||
| 126 | static int crl_set_issuers(X509_CRL *crl) | 127 | static int | 
| 128 | crl_set_issuers(X509_CRL *crl) | ||
| 127 | { | 129 | { | 
| 128 | |||
| 129 | int i, j; | 130 | int i, j; | 
| 130 | GENERAL_NAMES *gens, *gtmp; | 131 | GENERAL_NAMES *gens, *gtmp; | 
| 131 | STACK_OF(X509_REVOKED) *revoked; | 132 | STACK_OF(X509_REVOKED) *revoked; | 
| @@ -138,9 +139,8 @@ static int crl_set_issuers(X509_CRL *crl) | |||
| 138 | STACK_OF(X509_EXTENSION) *exts; | 139 | STACK_OF(X509_EXTENSION) *exts; | 
| 139 | ASN1_ENUMERATED *reason; | 140 | ASN1_ENUMERATED *reason; | 
| 140 | X509_EXTENSION *ext; | 141 | X509_EXTENSION *ext; | 
| 141 | gtmp = X509_REVOKED_get_ext_d2i(rev, | 142 | gtmp = X509_REVOKED_get_ext_d2i(rev, NID_certificate_issuer, | 
| 142 | NID_certificate_issuer, | 143 | &j, NULL); | 
| 143 | &j, NULL); | ||
| 144 | if (!gtmp && (j != -1)) { | 144 | if (!gtmp && (j != -1)) { | 
| 145 | crl->flags |= EXFLAG_INVALID; | 145 | crl->flags |= EXFLAG_INVALID; | 
| 146 | return 1; | 146 | return 1; | 
| @@ -159,7 +159,7 @@ static int crl_set_issuers(X509_CRL *crl) | |||
| 159 | rev->issuer = gens; | 159 | rev->issuer = gens; | 
| 160 | 160 | ||
| 161 | reason = X509_REVOKED_get_ext_d2i(rev, NID_crl_reason, | 161 | reason = X509_REVOKED_get_ext_d2i(rev, NID_crl_reason, | 
| 162 | &j, NULL); | 162 | &j, NULL); | 
| 163 | if (!reason && (j != -1)) { | 163 | if (!reason && (j != -1)) { | 
| 164 | crl->flags |= EXFLAG_INVALID; | 164 | crl->flags |= EXFLAG_INVALID; | 
| 165 | return 1; | 165 | return 1; | 
| @@ -169,7 +169,7 @@ static int crl_set_issuers(X509_CRL *crl) | |||
| 169 | rev->reason = ASN1_ENUMERATED_get(reason); | 169 | rev->reason = ASN1_ENUMERATED_get(reason); | 
| 170 | ASN1_ENUMERATED_free(reason); | 170 | ASN1_ENUMERATED_free(reason); | 
| 171 | } else | 171 | } else | 
| 172 | rev->reason = CRL_REASON_NONE; | 172 | rev->reason = CRL_REASON_NONE; | 
| 173 | 173 | ||
| 174 | /* Check for critical CRL entry extensions */ | 174 | /* Check for critical CRL entry extensions */ | 
| 175 | 175 | ||
| @@ -179,32 +179,29 @@ static int crl_set_issuers(X509_CRL *crl) | |||
| 179 | ext = sk_X509_EXTENSION_value(exts, j); | 179 | ext = sk_X509_EXTENSION_value(exts, j); | 
| 180 | if (ext->critical > 0) { | 180 | if (ext->critical > 0) { | 
| 181 | if (OBJ_obj2nid(ext->object) == | 181 | if (OBJ_obj2nid(ext->object) == | 
| 182 | NID_certificate_issuer) | 182 | NID_certificate_issuer) | 
| 183 | continue; | 183 | continue; | 
| 184 | crl->flags |= EXFLAG_CRITICAL; | 184 | crl->flags |= EXFLAG_CRITICAL; | 
| 185 | break; | 185 | break; | 
| 186 | } | 186 | } | 
| 187 | } | 187 | } | 
| 188 | |||
| 189 | |||
| 190 | } | 188 | } | 
| 191 | 189 | ||
| 192 | return 1; | 190 | return 1; | 
| 193 | |||
| 194 | } | 191 | } | 
| 195 | 192 | ||
| 196 | /* The X509_CRL structure needs a bit of customisation. Cache some extensions | 193 | /* The X509_CRL structure needs a bit of customisation. Cache some extensions | 
| 197 | * and hash of the whole CRL. | 194 | * and hash of the whole CRL. | 
| 198 | */ | 195 | */ | 
| 199 | static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | 196 | static int | 
| 200 | void *exarg) | 197 | crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | 
| 201 | { | 198 | { | 
| 202 | X509_CRL *crl = (X509_CRL *)*pval; | 199 | X509_CRL *crl = (X509_CRL *)*pval; | 
| 203 | STACK_OF(X509_EXTENSION) *exts; | 200 | STACK_OF(X509_EXTENSION) *exts; | 
| 204 | X509_EXTENSION *ext; | 201 | X509_EXTENSION *ext; | 
| 205 | int idx; | 202 | int idx; | 
| 206 | 203 | ||
| 207 | switch(operation) { | 204 | switch (operation) { | 
| 208 | case ASN1_OP_NEW_POST: | 205 | case ASN1_OP_NEW_POST: | 
| 209 | crl->idp = NULL; | 206 | crl->idp = NULL; | 
| 210 | crl->akid = NULL; | 207 | crl->akid = NULL; | 
| @@ -223,23 +220,23 @@ static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
| 223 | X509_CRL_digest(crl, EVP_sha1(), crl->sha1_hash, NULL); | 220 | X509_CRL_digest(crl, EVP_sha1(), crl->sha1_hash, NULL); | 
| 224 | #endif | 221 | #endif | 
| 225 | crl->idp = X509_CRL_get_ext_d2i(crl, | 222 | crl->idp = X509_CRL_get_ext_d2i(crl, | 
| 226 | NID_issuing_distribution_point, NULL, NULL); | 223 | NID_issuing_distribution_point, NULL, NULL); | 
| 227 | if (crl->idp) | 224 | if (crl->idp) | 
| 228 | setup_idp(crl, crl->idp); | 225 | setup_idp(crl, crl->idp); | 
| 229 | 226 | ||
| 230 | crl->akid = X509_CRL_get_ext_d2i(crl, | 227 | crl->akid = X509_CRL_get_ext_d2i(crl, | 
| 231 | NID_authority_key_identifier, NULL, NULL); | 228 | NID_authority_key_identifier, NULL, NULL); | 
| 232 | 229 | ||
| 233 | crl->crl_number = X509_CRL_get_ext_d2i(crl, | 230 | crl->crl_number = X509_CRL_get_ext_d2i(crl, | 
| 234 | NID_crl_number, NULL, NULL); | 231 | NID_crl_number, NULL, NULL); | 
| 235 | 232 | ||
| 236 | crl->base_crl_number = X509_CRL_get_ext_d2i(crl, | 233 | crl->base_crl_number = X509_CRL_get_ext_d2i(crl, | 
| 237 | NID_delta_crl, NULL, NULL); | 234 | NID_delta_crl, NULL, NULL); | 
| 238 | /* Delta CRLs must have CRL number */ | 235 | /* Delta CRLs must have CRL number */ | 
| 239 | if (crl->base_crl_number && !crl->crl_number) | 236 | if (crl->base_crl_number && !crl->crl_number) | 
| 240 | crl->flags |= EXFLAG_INVALID; | 237 | crl->flags |= EXFLAG_INVALID; | 
| 241 | 238 | ||
| 242 | /* See if we have any unhandled critical CRL extensions and | 239 | /* See if we have any unhandled critical CRL extensions and | 
| 243 | * indicate this in a flag. We only currently handle IDP so | 240 | * indicate this in a flag. We only currently handle IDP so | 
| 244 | * anything else critical sets the flag. | 241 | * anything else critical sets the flag. | 
| 245 | * | 242 | * | 
| @@ -257,15 +254,14 @@ static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
| 257 | crl->flags |= EXFLAG_FRESHEST; | 254 | crl->flags |= EXFLAG_FRESHEST; | 
| 258 | if (ext->critical > 0) { | 255 | if (ext->critical > 0) { | 
| 259 | /* We handle IDP and deltas */ | 256 | /* We handle IDP and deltas */ | 
| 260 | if ((nid == NID_issuing_distribution_point) | 257 | if ((nid == NID_issuing_distribution_point) || | 
| 261 | || (nid == NID_delta_crl)) | 258 | (nid == NID_delta_crl)) | 
| 262 | break;; | 259 | break;; | 
| 263 | crl->flags |= EXFLAG_CRITICAL; | 260 | crl->flags |= EXFLAG_CRITICAL; | 
| 264 | break; | 261 | break; | 
| 265 | } | 262 | } | 
| 266 | } | 263 | } | 
| 267 | 264 | ||
| 268 | |||
| 269 | if (!crl_set_issuers(crl)) | 265 | if (!crl_set_issuers(crl)) | 
| 270 | return 0; | 266 | return 0; | 
| 271 | 267 | ||
| @@ -294,9 +290,11 @@ static int crl_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
| 294 | 290 | ||
| 295 | /* Convert IDP into a more convenient form */ | 291 | /* Convert IDP into a more convenient form */ | 
| 296 | 292 | ||
| 297 | static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp) | 293 | static void | 
| 294 | setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp) | ||
| 298 | { | 295 | { | 
| 299 | int idp_only = 0; | 296 | int idp_only = 0; | 
| 297 | |||
| 300 | /* Set various flags according to IDP */ | 298 | /* Set various flags according to IDP */ | 
| 301 | crl->idp_flags |= IDP_PRESENT; | 299 | crl->idp_flags |= IDP_PRESENT; | 
| 302 | if (idp->onlyuser > 0) { | 300 | if (idp->onlyuser > 0) { | 
| @@ -324,7 +322,7 @@ static void setup_idp(X509_CRL *crl, ISSUING_DIST_POINT *idp) | |||
| 324 | crl->idp_reasons = idp->onlysomereasons->data[0]; | 322 | crl->idp_reasons = idp->onlysomereasons->data[0]; | 
| 325 | if (idp->onlysomereasons->length > 1) | 323 | if (idp->onlysomereasons->length > 1) | 
| 326 | crl->idp_reasons |= | 324 | crl->idp_reasons |= | 
| 327 | (idp->onlysomereasons->data[1] << 8); | 325 | (idp->onlysomereasons->data[1] << 8); | 
| 328 | crl->idp_reasons &= CRLDP_ALL_REASONS; | 326 | crl->idp_reasons &= CRLDP_ALL_REASONS; | 
| 329 | } | 327 | } | 
| 330 | 328 | ||
| @@ -342,60 +340,65 @@ IMPLEMENT_ASN1_FUNCTIONS(X509_CRL_INFO) | |||
| 342 | IMPLEMENT_ASN1_FUNCTIONS(X509_CRL) | 340 | IMPLEMENT_ASN1_FUNCTIONS(X509_CRL) | 
| 343 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_CRL) | 341 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_CRL) | 
| 344 | 342 | ||
| 345 | static int X509_REVOKED_cmp(const X509_REVOKED * const *a, | 343 | static int | 
| 346 | const X509_REVOKED * const *b) | 344 | X509_REVOKED_cmp(const X509_REVOKED * const *a, const X509_REVOKED * const *b) | 
| 347 | { | 345 | { | 
| 348 | return(ASN1_STRING_cmp( | 346 | return(ASN1_STRING_cmp( | 
| 349 | (ASN1_STRING *)(*a)->serialNumber, | 347 | (ASN1_STRING *)(*a)->serialNumber, | 
| 350 | (ASN1_STRING *)(*b)->serialNumber)); | 348 | (ASN1_STRING *)(*b)->serialNumber)); | 
| 351 | } | 349 | } | 
| 352 | 350 | ||
| 353 | int X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev) | 351 | int | 
| 352 | X509_CRL_add0_revoked(X509_CRL *crl, X509_REVOKED *rev) | ||
| 354 | { | 353 | { | 
| 355 | X509_CRL_INFO *inf; | 354 | X509_CRL_INFO *inf; | 
| 355 | |||
| 356 | inf = crl->crl; | 356 | inf = crl->crl; | 
| 357 | if(!inf->revoked) | 357 | if (!inf->revoked) | 
| 358 | inf->revoked = sk_X509_REVOKED_new(X509_REVOKED_cmp); | 358 | inf->revoked = sk_X509_REVOKED_new(X509_REVOKED_cmp); | 
| 359 | if(!inf->revoked || !sk_X509_REVOKED_push(inf->revoked, rev)) { | 359 | if (!inf->revoked || !sk_X509_REVOKED_push(inf->revoked, rev)) { | 
| 360 | ASN1err(ASN1_F_X509_CRL_ADD0_REVOKED, ERR_R_MALLOC_FAILURE); | 360 | ASN1err(ASN1_F_X509_CRL_ADD0_REVOKED, ERR_R_MALLOC_FAILURE); | 
| 361 | return 0; | 361 | return 0; | 
| 362 | } | 362 | } | 
| 363 | inf->enc.modified = 1; | 363 | inf->enc.modified = 1; | 
| 364 | return 1; | 364 | return 1; | 
| 365 | } | 365 | } | 
| 366 | 366 | ||
| 367 | int X509_CRL_verify(X509_CRL *crl, EVP_PKEY *r) | 367 | int | 
| 368 | X509_CRL_verify(X509_CRL *crl, EVP_PKEY *r) | ||
| 368 | { | 369 | { | 
| 369 | if (crl->meth->crl_verify) | 370 | if (crl->meth->crl_verify) | 
| 370 | return crl->meth->crl_verify(crl, r); | 371 | return crl->meth->crl_verify(crl, r); | 
| 371 | return 0; | 372 | return 0; | 
| 372 | } | 373 | } | 
| 373 | 374 | ||
| 374 | int X509_CRL_get0_by_serial(X509_CRL *crl, | 375 | int | 
| 375 | X509_REVOKED **ret, ASN1_INTEGER *serial) | 376 | X509_CRL_get0_by_serial(X509_CRL *crl, X509_REVOKED **ret, | 
| 377 | ASN1_INTEGER *serial) | ||
| 376 | { | 378 | { | 
| 377 | if (crl->meth->crl_lookup) | 379 | if (crl->meth->crl_lookup) | 
| 378 | return crl->meth->crl_lookup(crl, ret, serial, NULL); | 380 | return crl->meth->crl_lookup(crl, ret, serial, NULL); | 
| 379 | return 0; | 381 | return 0; | 
| 380 | } | 382 | } | 
| 381 | 383 | ||
| 382 | int X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x) | 384 | int | 
| 385 | X509_CRL_get0_by_cert(X509_CRL *crl, X509_REVOKED **ret, X509 *x) | ||
| 383 | { | 386 | { | 
| 384 | if (crl->meth->crl_lookup) | 387 | if (crl->meth->crl_lookup) | 
| 385 | return crl->meth->crl_lookup(crl, ret, | 388 | return crl->meth->crl_lookup(crl, ret, | 
| 386 | X509_get_serialNumber(x), | 389 | X509_get_serialNumber(x), X509_get_issuer_name(x)); | 
| 387 | X509_get_issuer_name(x)); | ||
| 388 | return 0; | 390 | return 0; | 
| 389 | } | 391 | } | 
| 390 | 392 | ||
| 391 | static int def_crl_verify(X509_CRL *crl, EVP_PKEY *r) | 393 | static int | 
| 394 | def_crl_verify(X509_CRL *crl, EVP_PKEY *r) | ||
| 392 | { | 395 | { | 
| 393 | return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CRL_INFO), | 396 | return(ASN1_item_verify(ASN1_ITEM_rptr(X509_CRL_INFO), | 
| 394 | crl->sig_alg, crl->signature,crl->crl,r)); | 397 | crl->sig_alg, crl->signature, crl->crl, r)); | 
| 395 | } | 398 | } | 
| 396 | 399 | ||
| 397 | static int crl_revoked_issuer_match(X509_CRL *crl, X509_NAME *nm, | 400 | static int | 
| 398 | X509_REVOKED *rev) | 401 | crl_revoked_issuer_match(X509_CRL *crl, X509_NAME *nm, X509_REVOKED *rev) | 
| 399 | { | 402 | { | 
| 400 | int i; | 403 | int i; | 
| 401 | 404 | ||
| @@ -421,11 +424,13 @@ static int crl_revoked_issuer_match(X509_CRL *crl, X509_NAME *nm, | |||
| 421 | 424 | ||
| 422 | } | 425 | } | 
| 423 | 426 | ||
| 424 | static int def_crl_lookup(X509_CRL *crl, | 427 | static int | 
| 425 | X509_REVOKED **ret, ASN1_INTEGER *serial, X509_NAME *issuer) | 428 | def_crl_lookup(X509_CRL *crl, X509_REVOKED **ret, ASN1_INTEGER *serial, | 
| 429 | X509_NAME *issuer) | ||
| 426 | { | 430 | { | 
| 427 | X509_REVOKED rtmp, *rev; | 431 | X509_REVOKED rtmp, *rev; | 
| 428 | int idx; | 432 | int idx; | 
| 433 | |||
| 429 | rtmp.serialNumber = serial; | 434 | rtmp.serialNumber = serial; | 
| 430 | /* Sort revoked into serial number order if not already sorted. | 435 | /* Sort revoked into serial number order if not already sorted. | 
| 431 | * Do this under a lock to avoid race condition. | 436 | * Do this under a lock to avoid race condition. | 
| @@ -436,10 +441,10 @@ static int def_crl_lookup(X509_CRL *crl, | |||
| 436 | CRYPTO_w_unlock(CRYPTO_LOCK_X509_CRL); | 441 | CRYPTO_w_unlock(CRYPTO_LOCK_X509_CRL); | 
| 437 | } | 442 | } | 
| 438 | idx = sk_X509_REVOKED_find(crl->crl->revoked, &rtmp); | 443 | idx = sk_X509_REVOKED_find(crl->crl->revoked, &rtmp); | 
| 439 | if(idx < 0) | 444 | if (idx < 0) | 
| 440 | return 0; | 445 | return 0; | 
| 441 | /* Need to look for matching name */ | 446 | /* Need to look for matching name */ | 
| 442 | for(;idx < sk_X509_REVOKED_num(crl->crl->revoked); idx++) { | 447 | for (; idx < sk_X509_REVOKED_num(crl->crl->revoked); idx++) { | 
| 443 | rev = sk_X509_REVOKED_value(crl->crl->revoked, idx); | 448 | rev = sk_X509_REVOKED_value(crl->crl->revoked, idx); | 
| 444 | if (ASN1_INTEGER_cmp(rev->serialNumber, serial)) | 449 | if (ASN1_INTEGER_cmp(rev->serialNumber, serial)) | 
| 445 | return 0; | 450 | return 0; | 
| @@ -454,22 +459,24 @@ static int def_crl_lookup(X509_CRL *crl, | |||
| 454 | return 0; | 459 | return 0; | 
| 455 | } | 460 | } | 
| 456 | 461 | ||
| 457 | void X509_CRL_set_default_method(const X509_CRL_METHOD *meth) | 462 | void | 
| 463 | X509_CRL_set_default_method(const X509_CRL_METHOD *meth) | ||
| 458 | { | 464 | { | 
| 459 | if (meth == NULL) | 465 | if (meth == NULL) | 
| 460 | default_crl_method = &int_crl_meth; | 466 | default_crl_method = &int_crl_meth; | 
| 461 | else | 467 | else | 
| 462 | default_crl_method = meth; | 468 | default_crl_method = meth; | 
| 463 | } | 469 | } | 
| 464 | 470 | ||
| 465 | X509_CRL_METHOD *X509_CRL_METHOD_new( | 471 | X509_CRL_METHOD * | 
| 466 | int (*crl_init)(X509_CRL *crl), | 472 | X509_CRL_METHOD_new(int (*crl_init)(X509_CRL *crl), | 
| 467 | int (*crl_free)(X509_CRL *crl), | 473 | int (*crl_free)(X509_CRL *crl), | 
| 468 | int (*crl_lookup)(X509_CRL *crl, X509_REVOKED **ret, | 474 | int (*crl_lookup)(X509_CRL *crl, X509_REVOKED **ret, | 
| 469 | ASN1_INTEGER *ser, X509_NAME *issuer), | 475 | ASN1_INTEGER *ser, X509_NAME *issuer), | 
| 470 | int (*crl_verify)(X509_CRL *crl, EVP_PKEY *pk)) | 476 | int (*crl_verify)(X509_CRL *crl, EVP_PKEY *pk)) | 
| 471 | { | 477 | { | 
| 472 | X509_CRL_METHOD *m; | 478 | X509_CRL_METHOD *m; | 
| 479 | |||
| 473 | m = malloc(sizeof(X509_CRL_METHOD)); | 480 | m = malloc(sizeof(X509_CRL_METHOD)); | 
| 474 | if (!m) | 481 | if (!m) | 
| 475 | return NULL; | 482 | return NULL; | 
| @@ -481,19 +488,22 @@ X509_CRL_METHOD *X509_CRL_METHOD_new( | |||
| 481 | return m; | 488 | return m; | 
| 482 | } | 489 | } | 
| 483 | 490 | ||
| 484 | void X509_CRL_METHOD_free(X509_CRL_METHOD *m) | 491 | void | 
| 492 | X509_CRL_METHOD_free(X509_CRL_METHOD *m) | ||
| 485 | { | 493 | { | 
| 486 | if (!(m->flags & X509_CRL_METHOD_DYNAMIC)) | 494 | if (!(m->flags & X509_CRL_METHOD_DYNAMIC)) | 
| 487 | return; | 495 | return; | 
| 488 | free(m); | 496 | free(m); | 
| 489 | } | 497 | } | 
| 490 | 498 | ||
| 491 | void X509_CRL_set_meth_data(X509_CRL *crl, void *dat) | 499 | void | 
| 500 | X509_CRL_set_meth_data(X509_CRL *crl, void *dat) | ||
| 492 | { | 501 | { | 
| 493 | crl->meth_data = dat; | 502 | crl->meth_data = dat; | 
| 494 | } | 503 | } | 
| 495 | 504 | ||
| 496 | void *X509_CRL_get_meth_data(X509_CRL *crl) | 505 | void * | 
| 506 | X509_CRL_get_meth_data(X509_CRL *crl) | ||
| 497 | { | 507 | { | 
| 498 | return crl->meth_data; | 508 | return crl->meth_data; | 
| 499 | } | 509 | } | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_exten.c b/src/lib/libssl/src/crypto/asn1/x_exten.c index 3a21239926..5b3f49ed0f 100644 --- a/src/lib/libssl/src/crypto/asn1/x_exten.c +++ b/src/lib/libssl/src/crypto/asn1/x_exten.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -67,8 +67,8 @@ ASN1_SEQUENCE(X509_EXTENSION) = { | |||
| 67 | ASN1_SIMPLE(X509_EXTENSION, value, ASN1_OCTET_STRING) | 67 | ASN1_SIMPLE(X509_EXTENSION, value, ASN1_OCTET_STRING) | 
| 68 | } ASN1_SEQUENCE_END(X509_EXTENSION) | 68 | } ASN1_SEQUENCE_END(X509_EXTENSION) | 
| 69 | 69 | ||
| 70 | ASN1_ITEM_TEMPLATE(X509_EXTENSIONS) = | 70 | ASN1_ITEM_TEMPLATE(X509_EXTENSIONS) = | 
| 71 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Extension, X509_EXTENSION) | 71 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Extension, X509_EXTENSION) | 
| 72 | ASN1_ITEM_TEMPLATE_END(X509_EXTENSIONS) | 72 | ASN1_ITEM_TEMPLATE_END(X509_EXTENSIONS) | 
| 73 | 73 | ||
| 74 | IMPLEMENT_ASN1_FUNCTIONS(X509_EXTENSION) | 74 | IMPLEMENT_ASN1_FUNCTIONS(X509_EXTENSION) | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_info.c b/src/lib/libssl/src/crypto/asn1/x_info.c index 07ce15dbd7..4d3e2ebd17 100644 --- a/src/lib/libssl/src/crypto/asn1/x_info.c +++ b/src/lib/libssl/src/crypto/asn1/x_info.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -62,42 +62,49 @@ | |||
| 62 | #include <openssl/asn1.h> | 62 | #include <openssl/asn1.h> | 
| 63 | #include <openssl/x509.h> | 63 | #include <openssl/x509.h> | 
| 64 | 64 | ||
| 65 | X509_INFO *X509_INFO_new(void) | 65 | X509_INFO * | 
| 66 | X509_INFO_new(void) | ||
| 66 | { | 67 | { | 
| 67 | X509_INFO *ret=NULL; | 68 | X509_INFO *ret = NULL; | 
| 68 | 69 | ||
| 69 | ret=(X509_INFO *)malloc(sizeof(X509_INFO)); | 70 | ret = (X509_INFO *)malloc(sizeof(X509_INFO)); | 
| 70 | if (ret == NULL) { | 71 | if (ret == NULL) { | 
| 71 | ASN1err(ASN1_F_X509_INFO_NEW,ERR_R_MALLOC_FAILURE); | 72 | ASN1err(ASN1_F_X509_INFO_NEW, ERR_R_MALLOC_FAILURE); | 
| 72 | return(NULL); | 73 | return (NULL); | 
| 73 | } | 74 | } | 
| 74 | 75 | ||
| 75 | ret->enc_cipher.cipher=NULL; | 76 | ret->enc_cipher.cipher = NULL; | 
| 76 | ret->enc_len=0; | 77 | ret->enc_len = 0; | 
| 77 | ret->enc_data=NULL; | 78 | ret->enc_data = NULL; | 
| 78 | 79 | ||
| 79 | ret->references=1; | 80 | ret->references = 1; | 
| 80 | ret->x509=NULL; | 81 | ret->x509 = NULL; | 
| 81 | ret->crl=NULL; | 82 | ret->crl = NULL; | 
| 82 | ret->x_pkey=NULL; | 83 | ret->x_pkey = NULL; | 
| 83 | return(ret); | 84 | return (ret); | 
| 84 | } | 85 | } | 
| 85 | 86 | ||
| 86 | void X509_INFO_free(X509_INFO *x) | 87 | void | 
| 88 | X509_INFO_free(X509_INFO *x) | ||
| 87 | { | 89 | { | 
| 88 | int i; | 90 | int i; | 
| 89 | 91 | ||
| 90 | if (x == NULL) return; | 92 | if (x == NULL) | 
| 93 | return; | ||
| 91 | 94 | ||
| 92 | i=CRYPTO_add(&x->references,-1,CRYPTO_LOCK_X509_INFO); | 95 | i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_INFO); | 
| 93 | if (i > 0) return; | 96 | if (i > 0) | 
| 97 | return; | ||
| 94 | 98 | ||
| 95 | if (x->x509 != NULL) X509_free(x->x509); | 99 | if (x->x509 != NULL) | 
| 96 | if (x->crl != NULL) X509_CRL_free(x->crl); | 100 | X509_free(x->x509); | 
| 97 | if (x->x_pkey != NULL) X509_PKEY_free(x->x_pkey); | 101 | if (x->crl != NULL) | 
| 98 | if (x->enc_data != NULL) free(x->enc_data); | 102 | X509_CRL_free(x->crl); | 
| 103 | if (x->x_pkey != NULL) | ||
| 104 | X509_PKEY_free(x->x_pkey); | ||
| 105 | if (x->enc_data != NULL) | ||
| 106 | free(x->enc_data); | ||
| 99 | free(x); | 107 | free(x); | 
| 100 | } | 108 | } | 
| 101 | 109 | ||
| 102 | IMPLEMENT_STACK_OF(X509_INFO) | 110 | IMPLEMENT_STACK_OF(X509_INFO) | 
| 103 | |||
| diff --git a/src/lib/libssl/src/crypto/asn1/x_long.c b/src/lib/libssl/src/crypto/asn1/x_long.c index 1417284d3c..81dcc4fc29 100644 --- a/src/lib/libssl/src/crypto/asn1/x_long.c +++ b/src/lib/libssl/src/crypto/asn1/x_long.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -84,25 +84,29 @@ static ASN1_PRIMITIVE_FUNCS long_pf = { | |||
| 84 | }; | 84 | }; | 
| 85 | 85 | ||
| 86 | ASN1_ITEM_start(LONG) | 86 | ASN1_ITEM_start(LONG) | 
| 87 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, ASN1_LONG_UNDEF, "LONG" | 87 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, ASN1_LONG_UNDEF, "LONG" | 
| 88 | ASN1_ITEM_end(LONG) | 88 | ASN1_ITEM_end(LONG) | 
| 89 | 89 | ||
| 90 | ASN1_ITEM_start(ZLONG) | 90 | ASN1_ITEM_start(ZLONG) | 
| 91 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, 0, "ZLONG" | 91 | ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, 0, "ZLONG" | 
| 92 | ASN1_ITEM_end(ZLONG) | 92 | ASN1_ITEM_end(ZLONG) | 
| 93 | 93 | ||
| 94 | static int long_new(ASN1_VALUE **pval, const ASN1_ITEM *it) | 94 | static int | 
| 95 | long_new(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||
| 95 | { | 96 | { | 
| 96 | *(long *)pval = it->size; | 97 | *(long *)pval = it->size; | 
| 97 | return 1; | 98 | return 1; | 
| 98 | } | 99 | } | 
| 99 | 100 | ||
| 100 | static void long_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | 101 | static void | 
| 102 | long_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||
| 101 | { | 103 | { | 
| 102 | *(long *)pval = it->size; | 104 | *(long *)pval = it->size; | 
| 103 | } | 105 | } | 
| 104 | 106 | ||
| 105 | static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it) | 107 | static int | 
| 108 | long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, | ||
| 109 | const ASN1_ITEM *it) | ||
| 106 | { | 110 | { | 
| 107 | long ltmp; | 111 | long ltmp; | 
| 108 | unsigned long utmp; | 112 | unsigned long utmp; | 
| @@ -113,58 +117,70 @@ static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const A | |||
| 113 | /* use memcpy, because we may not be long aligned */ | 117 | /* use memcpy, because we may not be long aligned */ | 
| 114 | memcpy(<mp, cp, sizeof(long)); | 118 | memcpy(<mp, cp, sizeof(long)); | 
| 115 | 119 | ||
| 116 | if(ltmp == it->size) return -1; | 120 | if (ltmp == it->size) | 
| 121 | return -1; | ||
| 117 | /* Convert the long to positive: we subtract one if negative so | 122 | /* Convert the long to positive: we subtract one if negative so | 
| 118 | * we can cleanly handle the padding if only the MSB of the leading | 123 | * we can cleanly handle the padding if only the MSB of the leading | 
| 119 | * octet is set. | 124 | * octet is set. | 
| 120 | */ | 125 | */ | 
| 121 | if(ltmp < 0) utmp = -ltmp - 1; | 126 | if (ltmp < 0) | 
| 122 | else utmp = ltmp; | 127 | utmp = -ltmp - 1; | 
| 128 | else | ||
| 129 | utmp = ltmp; | ||
| 123 | clen = BN_num_bits_word(utmp); | 130 | clen = BN_num_bits_word(utmp); | 
| 124 | /* If MSB of leading octet set we need to pad */ | 131 | /* If MSB of leading octet set we need to pad */ | 
| 125 | if(!(clen & 0x7)) pad = 1; | 132 | if (!(clen & 0x7)) | 
| 126 | else pad = 0; | 133 | pad = 1; | 
| 134 | else | ||
| 135 | pad = 0; | ||
| 127 | 136 | ||
| 128 | /* Convert number of bits to number of octets */ | 137 | /* Convert number of bits to number of octets */ | 
| 129 | clen = (clen + 7) >> 3; | 138 | clen = (clen + 7) >> 3; | 
| 130 | 139 | ||
| 131 | if(cont) { | 140 | if (cont) { | 
| 132 | if(pad) *cont++ = (ltmp < 0) ? 0xff : 0; | 141 | if (pad) | 
| 133 | for(i = clen - 1; i >= 0; i--) { | 142 | *cont++ = (ltmp < 0) ? 0xff : 0; | 
| 143 | for (i = clen - 1; i >= 0; i--) { | ||
| 134 | cont[i] = (unsigned char)(utmp & 0xff); | 144 | cont[i] = (unsigned char)(utmp & 0xff); | 
| 135 | if(ltmp < 0) cont[i] ^= 0xff; | 145 | if (ltmp < 0) | 
| 146 | cont[i] ^= 0xff; | ||
| 136 | utmp >>= 8; | 147 | utmp >>= 8; | 
| 137 | } | 148 | } | 
| 138 | } | 149 | } | 
| 139 | return clen + pad; | 150 | return clen + pad; | 
| 140 | } | 151 | } | 
| 141 | 152 | ||
| 142 | static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, | 153 | static int | 
| 143 | int utype, char *free_cont, const ASN1_ITEM *it) | 154 | long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, | 
| 155 | char *free_cont, const ASN1_ITEM *it) | ||
| 144 | { | 156 | { | 
| 145 | int neg, i; | 157 | int neg, i; | 
| 146 | long ltmp; | 158 | long ltmp; | 
| 147 | unsigned long utmp = 0; | 159 | unsigned long utmp = 0; | 
| 148 | char *cp = (char *)pval; | 160 | char *cp = (char *)pval; | 
| 149 | if(len > (int)sizeof(long)) { | 161 | if (len > (int)sizeof(long)) { | 
| 150 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); | 162 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); | 
| 151 | return 0; | 163 | return 0; | 
| 152 | } | 164 | } | 
| 153 | /* Is it negative? */ | 165 | /* Is it negative? */ | 
| 154 | if(len && (cont[0] & 0x80)) neg = 1; | 166 | if (len && (cont[0] & 0x80)) | 
| 155 | else neg = 0; | 167 | neg = 1; | 
| 168 | else | ||
| 169 | neg = 0; | ||
| 156 | utmp = 0; | 170 | utmp = 0; | 
| 157 | for(i = 0; i < len; i++) { | 171 | for (i = 0; i < len; i++) { | 
| 158 | utmp <<= 8; | 172 | utmp <<= 8; | 
| 159 | if(neg) utmp |= cont[i] ^ 0xff; | 173 | if (neg) | 
| 160 | else utmp |= cont[i]; | 174 | utmp |= cont[i] ^ 0xff; | 
| 175 | else | ||
| 176 | utmp |= cont[i]; | ||
| 161 | } | 177 | } | 
| 162 | ltmp = (long)utmp; | 178 | ltmp = (long)utmp; | 
| 163 | if(neg) { | 179 | if (neg) { | 
| 164 | ltmp++; | 180 | ltmp++; | 
| 165 | ltmp = -ltmp; | 181 | ltmp = -ltmp; | 
| 166 | } | 182 | } | 
| 167 | if(ltmp == it->size) { | 183 | if (ltmp == it->size) { | 
| 168 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); | 184 | ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); | 
| 169 | return 0; | 185 | return 0; | 
| 170 | } | 186 | } | 
| @@ -172,8 +188,9 @@ static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, | |||
| 172 | return 1; | 188 | return 1; | 
| 173 | } | 189 | } | 
| 174 | 190 | ||
| 175 | static int long_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, | 191 | static int | 
| 176 | int indent, const ASN1_PCTX *pctx) | 192 | long_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, | 
| 193 | const ASN1_PCTX *pctx) | ||
| 177 | { | 194 | { | 
| 178 | return BIO_printf(out, "%ld\n", *(long *)pval); | 195 | return BIO_printf(out, "%ld\n", *(long *)pval); | 
| 179 | } | 196 | } | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_name.c b/src/lib/libssl/src/crypto/asn1/x_name.c index d10ac5acd1..70459babc4 100644 --- a/src/lib/libssl/src/crypto/asn1/x_name.c +++ b/src/lib/libssl/src/crypto/asn1/x_name.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -66,13 +66,12 @@ | |||
| 66 | typedef STACK_OF(X509_NAME_ENTRY) STACK_OF_X509_NAME_ENTRY; | 66 | typedef STACK_OF(X509_NAME_ENTRY) STACK_OF_X509_NAME_ENTRY; | 
| 67 | DECLARE_STACK_OF(STACK_OF_X509_NAME_ENTRY) | 67 | DECLARE_STACK_OF(STACK_OF_X509_NAME_ENTRY) | 
| 68 | 68 | ||
| 69 | static int x509_name_ex_d2i(ASN1_VALUE **val, | 69 | static int x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in, | 
| 70 | const unsigned char **in, long len, | 70 | long len, const ASN1_ITEM *it, int tag, int aclass, char opt, | 
| 71 | const ASN1_ITEM *it, | 71 | ASN1_TLC *ctx); | 
| 72 | int tag, int aclass, char opt, ASN1_TLC *ctx); | ||
| 73 | 72 | ||
| 74 | static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out, | 73 | static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out, | 
| 75 | const ASN1_ITEM *it, int tag, int aclass); | 74 | const ASN1_ITEM *it, int tag, int aclass); | 
| 76 | static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it); | 75 | static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it); | 
| 77 | static void x509_name_ex_free(ASN1_VALUE **val, const ASN1_ITEM *it); | 76 | static void x509_name_ex_free(ASN1_VALUE **val, const ASN1_ITEM *it); | 
| 78 | 77 | ||
| @@ -80,13 +79,10 @@ static int x509_name_encode(X509_NAME *a); | |||
| 80 | static int x509_name_canon(X509_NAME *a); | 79 | static int x509_name_canon(X509_NAME *a); | 
| 81 | static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in); | 80 | static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in); | 
| 82 | static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname, | 81 | static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname, | 
| 83 | unsigned char **in); | 82 | unsigned char **in); | 
| 84 | 83 | ||
| 85 | 84 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, int indent, | |
| 86 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, | 85 | const char *fname, const ASN1_PCTX *pctx); | 
| 87 | int indent, | ||
| 88 | const char *fname, | ||
| 89 | const ASN1_PCTX *pctx); | ||
| 90 | 86 | ||
| 91 | ASN1_SEQUENCE(X509_NAME_ENTRY) = { | 87 | ASN1_SEQUENCE(X509_NAME_ENTRY) = { | 
| 92 | ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT), | 88 | ASN1_SIMPLE(X509_NAME_ENTRY, object, ASN1_OBJECT), | 
| @@ -101,11 +97,11 @@ IMPLEMENT_ASN1_DUP_FUNCTION(X509_NAME_ENTRY) | |||
| 101 | */ | 97 | */ | 
| 102 | 98 | ||
| 103 | ASN1_ITEM_TEMPLATE(X509_NAME_ENTRIES) = | 99 | ASN1_ITEM_TEMPLATE(X509_NAME_ENTRIES) = | 
| 104 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SET_OF, 0, RDNS, X509_NAME_ENTRY) | 100 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SET_OF, 0, RDNS, X509_NAME_ENTRY) | 
| 105 | ASN1_ITEM_TEMPLATE_END(X509_NAME_ENTRIES) | 101 | ASN1_ITEM_TEMPLATE_END(X509_NAME_ENTRIES) | 
| 106 | 102 | ||
| 107 | ASN1_ITEM_TEMPLATE(X509_NAME_INTERNAL) = | 103 | ASN1_ITEM_TEMPLATE(X509_NAME_INTERNAL) = | 
| 108 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Name, X509_NAME_ENTRIES) | 104 | ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, Name, X509_NAME_ENTRIES) | 
| 109 | ASN1_ITEM_TEMPLATE_END(X509_NAME_INTERNAL) | 105 | ASN1_ITEM_TEMPLATE_END(X509_NAME_INTERNAL) | 
| 110 | 106 | ||
| 111 | /* Normally that's where it would end: we'd have two nested STACK structures | 107 | /* Normally that's where it would end: we'd have two nested STACK structures | 
| @@ -124,26 +120,30 @@ const ASN1_EXTERN_FUNCS x509_name_ff = { | |||
| 124 | x509_name_ex_print | 120 | x509_name_ex_print | 
| 125 | }; | 121 | }; | 
| 126 | 122 | ||
| 127 | IMPLEMENT_EXTERN_ASN1(X509_NAME, V_ASN1_SEQUENCE, x509_name_ff) | 123 | IMPLEMENT_EXTERN_ASN1(X509_NAME, V_ASN1_SEQUENCE, x509_name_ff) | 
| 128 | 124 | ||
| 129 | IMPLEMENT_ASN1_FUNCTIONS(X509_NAME) | 125 | IMPLEMENT_ASN1_FUNCTIONS(X509_NAME) | 
| 130 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_NAME) | 126 | IMPLEMENT_ASN1_DUP_FUNCTION(X509_NAME) | 
| 131 | 127 | ||
| 132 | static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it) | 128 | static int | 
| 129 | x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it) | ||
| 133 | { | 130 | { | 
| 134 | X509_NAME *ret = NULL; | 131 | X509_NAME *ret = NULL; | 
| 132 | |||
| 135 | ret = malloc(sizeof(X509_NAME)); | 133 | ret = malloc(sizeof(X509_NAME)); | 
| 136 | if(!ret) goto memerr; | 134 | if (!ret) | 
| 137 | if ((ret->entries=sk_X509_NAME_ENTRY_new_null()) == NULL) | 135 | goto memerr; | 
| 136 | if ((ret->entries = sk_X509_NAME_ENTRY_new_null()) == NULL) | ||
| 137 | goto memerr; | ||
| 138 | if ((ret->bytes = BUF_MEM_new()) == NULL) | ||
| 138 | goto memerr; | 139 | goto memerr; | 
| 139 | if((ret->bytes = BUF_MEM_new()) == NULL) goto memerr; | ||
| 140 | ret->canon_enc = NULL; | 140 | ret->canon_enc = NULL; | 
| 141 | ret->canon_enclen = 0; | 141 | ret->canon_enclen = 0; | 
| 142 | ret->modified=1; | 142 | ret->modified = 1; | 
| 143 | *val = (ASN1_VALUE *)ret; | 143 | *val = (ASN1_VALUE *)ret; | 
| 144 | return 1; | 144 | return 1; | 
| 145 | 145 | ||
| 146 | memerr: | 146 | memerr: | 
| 147 | ASN1err(ASN1_F_X509_NAME_EX_NEW, ERR_R_MALLOC_FAILURE); | 147 | ASN1err(ASN1_F_X509_NAME_EX_NEW, ERR_R_MALLOC_FAILURE); | 
| 148 | if (ret) { | 148 | if (ret) { | 
| 149 | if (ret->entries) | 149 | if (ret->entries) | 
| @@ -153,54 +153,64 @@ static int x509_name_ex_new(ASN1_VALUE **val, const ASN1_ITEM *it) | |||
| 153 | return 0; | 153 | return 0; | 
| 154 | } | 154 | } | 
| 155 | 155 | ||
| 156 | static void x509_name_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | 156 | static void | 
| 157 | x509_name_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||
| 157 | { | 158 | { | 
| 158 | X509_NAME *a; | 159 | X509_NAME *a; | 
| 159 | if(!pval || !*pval) | 160 | |
| 160 | return; | 161 | if (!pval || !*pval) | 
| 162 | return; | ||
| 161 | a = (X509_NAME *)*pval; | 163 | a = (X509_NAME *)*pval; | 
| 162 | 164 | ||
| 163 | BUF_MEM_free(a->bytes); | 165 | BUF_MEM_free(a->bytes); | 
| 164 | sk_X509_NAME_ENTRY_pop_free(a->entries,X509_NAME_ENTRY_free); | 166 | sk_X509_NAME_ENTRY_pop_free(a->entries, X509_NAME_ENTRY_free); | 
| 165 | if (a->canon_enc) | 167 | if (a->canon_enc) | 
| 166 | free(a->canon_enc); | 168 | free(a->canon_enc); | 
| 167 | free(a); | 169 | free(a); | 
| 168 | *pval = NULL; | 170 | *pval = NULL; | 
| 169 | } | 171 | } | 
| 170 | 172 | ||
| 171 | static int x509_name_ex_d2i(ASN1_VALUE **val, | 173 | static int | 
| 172 | const unsigned char **in, long len, const ASN1_ITEM *it, | 174 | x509_name_ex_d2i(ASN1_VALUE **val, const unsigned char **in, long len, | 
| 173 | int tag, int aclass, char opt, ASN1_TLC *ctx) | 175 | const ASN1_ITEM *it, int tag, int aclass, char opt, ASN1_TLC *ctx) | 
| 174 | { | 176 | { | 
| 175 | const unsigned char *p = *in, *q; | 177 | const unsigned char *p = *in, *q; | 
| 176 | union { STACK_OF(STACK_OF_X509_NAME_ENTRY) *s; | 178 | union { | 
| 177 | ASN1_VALUE *a; } intname = {NULL}; | 179 | STACK_OF(STACK_OF_X509_NAME_ENTRY) *s; | 
| 178 | union { X509_NAME *x; ASN1_VALUE *a; } nm = {NULL}; | 180 | ASN1_VALUE *a; | 
| 181 | } intname = {NULL}; | ||
| 182 | union { | ||
| 183 | X509_NAME *x; | ||
| 184 | ASN1_VALUE *a; | ||
| 185 | } nm = {NULL}; | ||
| 179 | int i, j, ret; | 186 | int i, j, ret; | 
| 180 | STACK_OF(X509_NAME_ENTRY) *entries; | 187 | STACK_OF(X509_NAME_ENTRY) *entries; | 
| 181 | X509_NAME_ENTRY *entry; | 188 | X509_NAME_ENTRY *entry; | 
| 182 | q = p; | 189 | q = p; | 
| 183 | 190 | ||
| 184 | /* Get internal representation of Name */ | 191 | /* Get internal representation of Name */ | 
| 185 | ret = ASN1_item_ex_d2i(&intname.a, | 192 | ret = ASN1_item_ex_d2i(&intname.a, &p, len, | 
| 186 | &p, len, ASN1_ITEM_rptr(X509_NAME_INTERNAL), | 193 | ASN1_ITEM_rptr(X509_NAME_INTERNAL), tag, aclass, opt, ctx); | 
| 187 | tag, aclass, opt, ctx); | 194 | |
| 188 | 195 | if (ret <= 0) | |
| 189 | if(ret <= 0) return ret; | 196 | return ret; | 
| 190 | 197 | ||
| 191 | if(*val) x509_name_ex_free(val, NULL); | 198 | if (*val) | 
| 192 | if(!x509_name_ex_new(&nm.a, NULL)) goto err; | 199 | x509_name_ex_free(val, NULL); | 
| 200 | if (!x509_name_ex_new(&nm.a, NULL)) | ||
| 201 | goto err; | ||
| 193 | /* We've decoded it: now cache encoding */ | 202 | /* We've decoded it: now cache encoding */ | 
| 194 | if(!BUF_MEM_grow(nm.x->bytes, p - q)) goto err; | 203 | if (!BUF_MEM_grow(nm.x->bytes, p - q)) | 
| 204 | goto err; | ||
| 195 | memcpy(nm.x->bytes->data, q, p - q); | 205 | memcpy(nm.x->bytes->data, q, p - q); | 
| 196 | 206 | ||
| 197 | /* Convert internal representation to X509_NAME structure */ | 207 | /* Convert internal representation to X509_NAME structure */ | 
| 198 | for(i = 0; i < sk_STACK_OF_X509_NAME_ENTRY_num(intname.s); i++) { | 208 | for (i = 0; i < sk_STACK_OF_X509_NAME_ENTRY_num(intname.s); i++) { | 
| 199 | entries = sk_STACK_OF_X509_NAME_ENTRY_value(intname.s, i); | 209 | entries = sk_STACK_OF_X509_NAME_ENTRY_value(intname.s, i); | 
| 200 | for(j = 0; j < sk_X509_NAME_ENTRY_num(entries); j++) { | 210 | for (j = 0; j < sk_X509_NAME_ENTRY_num(entries); j++) { | 
| 201 | entry = sk_X509_NAME_ENTRY_value(entries, j); | 211 | entry = sk_X509_NAME_ENTRY_value(entries, j); | 
| 202 | entry->set = i; | 212 | entry->set = i; | 
| 203 | if(!sk_X509_NAME_ENTRY_push(nm.x->entries, entry)) | 213 | if (!sk_X509_NAME_ENTRY_push(nm.x->entries, entry)) | 
| 204 | goto err; | 214 | goto err; | 
| 205 | } | 215 | } | 
| 206 | sk_X509_NAME_ENTRY_free(entries); | 216 | sk_X509_NAME_ENTRY_free(entries); | 
| @@ -213,90 +223,104 @@ static int x509_name_ex_d2i(ASN1_VALUE **val, | |||
| 213 | *val = nm.a; | 223 | *val = nm.a; | 
| 214 | *in = p; | 224 | *in = p; | 
| 215 | return ret; | 225 | return ret; | 
| 226 | |||
| 216 | err: | 227 | err: | 
| 217 | if (nm.x != NULL) | 228 | if (nm.x != NULL) | 
| 218 | X509_NAME_free(nm.x); | 229 | X509_NAME_free(nm.x); | 
| 219 | ASN1err(ASN1_F_X509_NAME_EX_D2I, ERR_R_NESTED_ASN1_ERROR); | 230 | ASN1err(ASN1_F_X509_NAME_EX_D2I, ERR_R_NESTED_ASN1_ERROR); | 
| 220 | return 0; | 231 | return 0; | 
| 221 | } | 232 | } | 
| 222 | 233 | ||
| 223 | static int x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out, const ASN1_ITEM *it, int tag, int aclass) | 234 | static int | 
| 235 | x509_name_ex_i2d(ASN1_VALUE **val, unsigned char **out, const ASN1_ITEM *it, | ||
| 236 | int tag, int aclass) | ||
| 224 | { | 237 | { | 
| 225 | int ret; | 238 | int ret; | 
| 226 | X509_NAME *a = (X509_NAME *)*val; | 239 | X509_NAME *a = (X509_NAME *)*val; | 
| 227 | if(a->modified) { | 240 | |
| 241 | if (a->modified) { | ||
| 228 | ret = x509_name_encode(a); | 242 | ret = x509_name_encode(a); | 
| 229 | if(ret < 0) | 243 | if (ret < 0) | 
| 230 | return ret; | 244 | return ret; | 
| 231 | ret = x509_name_canon(a); | 245 | ret = x509_name_canon(a); | 
| 232 | if(ret < 0) | 246 | if (ret < 0) | 
| 233 | return ret; | 247 | return ret; | 
| 234 | } | 248 | } | 
| 235 | ret = a->bytes->length; | 249 | ret = a->bytes->length; | 
| 236 | if(out != NULL) { | 250 | if (out != NULL) { | 
| 237 | memcpy(*out,a->bytes->data,ret); | 251 | memcpy(*out, a->bytes->data, ret); | 
| 238 | *out+=ret; | 252 | *out += ret; | 
| 239 | } | 253 | } | 
| 240 | return ret; | 254 | return ret; | 
| 241 | } | 255 | } | 
| 242 | 256 | ||
| 243 | static void local_sk_X509_NAME_ENTRY_free(STACK_OF(X509_NAME_ENTRY) *ne) | 257 | static void | 
| 258 | local_sk_X509_NAME_ENTRY_free(STACK_OF(X509_NAME_ENTRY) *ne) | ||
| 244 | { | 259 | { | 
| 245 | sk_X509_NAME_ENTRY_free(ne); | 260 | sk_X509_NAME_ENTRY_free(ne); | 
| 246 | } | 261 | } | 
| 247 | 262 | ||
| 248 | static void local_sk_X509_NAME_ENTRY_pop_free(STACK_OF(X509_NAME_ENTRY) *ne) | 263 | static void | 
| 264 | local_sk_X509_NAME_ENTRY_pop_free(STACK_OF(X509_NAME_ENTRY) *ne) | ||
| 249 | { | 265 | { | 
| 250 | sk_X509_NAME_ENTRY_pop_free(ne, X509_NAME_ENTRY_free); | 266 | sk_X509_NAME_ENTRY_pop_free(ne, X509_NAME_ENTRY_free); | 
| 251 | } | 267 | } | 
| 252 | 268 | ||
| 253 | static int x509_name_encode(X509_NAME *a) | 269 | static int | 
| 270 | x509_name_encode(X509_NAME *a) | ||
| 254 | { | 271 | { | 
| 255 | union { STACK_OF(STACK_OF_X509_NAME_ENTRY) *s; | 272 | union { | 
| 256 | ASN1_VALUE *a; } intname = {NULL}; | 273 | STACK_OF(STACK_OF_X509_NAME_ENTRY) *s; | 
| 274 | ASN1_VALUE *a; | ||
| 275 | } intname = {NULL}; | ||
| 257 | int len; | 276 | int len; | 
| 258 | unsigned char *p; | 277 | unsigned char *p; | 
| 259 | STACK_OF(X509_NAME_ENTRY) *entries = NULL; | 278 | STACK_OF(X509_NAME_ENTRY) *entries = NULL; | 
| 260 | X509_NAME_ENTRY *entry; | 279 | X509_NAME_ENTRY *entry; | 
| 261 | int i, set = -1; | 280 | int i, set = -1; | 
| 281 | |||
| 262 | intname.s = sk_STACK_OF_X509_NAME_ENTRY_new_null(); | 282 | intname.s = sk_STACK_OF_X509_NAME_ENTRY_new_null(); | 
| 263 | if(!intname.s) goto memerr; | 283 | if (!intname.s) | 
| 264 | for(i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) { | 284 | goto memerr; | 
| 285 | for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) { | ||
| 265 | entry = sk_X509_NAME_ENTRY_value(a->entries, i); | 286 | entry = sk_X509_NAME_ENTRY_value(a->entries, i); | 
| 266 | if(entry->set != set) { | 287 | if (entry->set != set) { | 
| 267 | entries = sk_X509_NAME_ENTRY_new_null(); | 288 | entries = sk_X509_NAME_ENTRY_new_null(); | 
| 268 | if(!entries) goto memerr; | 289 | if (!entries) | 
| 269 | if(!sk_STACK_OF_X509_NAME_ENTRY_push(intname.s, | 290 | goto memerr; | 
| 270 | entries)) | 291 | if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname.s, | 
| 292 | entries)) | ||
| 271 | goto memerr; | 293 | goto memerr; | 
| 272 | set = entry->set; | 294 | set = entry->set; | 
| 273 | } | 295 | } | 
| 274 | if(!sk_X509_NAME_ENTRY_push(entries, entry)) goto memerr; | 296 | if (!sk_X509_NAME_ENTRY_push(entries, entry)) | 
| 297 | goto memerr; | ||
| 275 | } | 298 | } | 
| 276 | len = ASN1_item_ex_i2d(&intname.a, NULL, | 299 | len = ASN1_item_ex_i2d(&intname.a, NULL, | 
| 277 | ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1); | 300 | ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1); | 
| 278 | if (!BUF_MEM_grow(a->bytes,len)) goto memerr; | 301 | if (!BUF_MEM_grow(a->bytes, len)) | 
| 279 | p=(unsigned char *)a->bytes->data; | 302 | goto memerr; | 
| 280 | ASN1_item_ex_i2d(&intname.a, | 303 | p = (unsigned char *)a->bytes->data; | 
| 281 | &p, ASN1_ITEM_rptr(X509_NAME_INTERNAL), -1, -1); | 304 | ASN1_item_ex_i2d(&intname.a, &p, ASN1_ITEM_rptr(X509_NAME_INTERNAL), | 
| 305 | -1, -1); | ||
| 282 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s, | 306 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s, | 
| 283 | local_sk_X509_NAME_ENTRY_free); | 307 | local_sk_X509_NAME_ENTRY_free); | 
| 284 | a->modified = 0; | 308 | a->modified = 0; | 
| 285 | return len; | 309 | return len; | 
| 310 | |||
| 286 | memerr: | 311 | memerr: | 
| 287 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s, | 312 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname.s, | 
| 288 | local_sk_X509_NAME_ENTRY_free); | 313 | local_sk_X509_NAME_ENTRY_free); | 
| 289 | ASN1err(ASN1_F_X509_NAME_ENCODE, ERR_R_MALLOC_FAILURE); | 314 | ASN1err(ASN1_F_X509_NAME_ENCODE, ERR_R_MALLOC_FAILURE); | 
| 290 | return -1; | 315 | return -1; | 
| 291 | } | 316 | } | 
| 292 | 317 | ||
| 293 | static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, | 318 | static int | 
| 294 | int indent, | 319 | x509_name_ex_print(BIO *out, ASN1_VALUE **pval, int indent, const char *fname, | 
| 295 | const char *fname, | 320 | const ASN1_PCTX *pctx) | 
| 296 | const ASN1_PCTX *pctx) | ||
| 297 | { | 321 | { | 
| 298 | if (X509_NAME_print_ex(out, (X509_NAME *)*pval, | 322 | if (X509_NAME_print_ex(out, (X509_NAME *)*pval, indent, | 
| 299 | indent, pctx->nm_flags) <= 0) | 323 | pctx->nm_flags) <= 0) | 
| 300 | return 0; | 324 | return 0; | 
| 301 | return 2; | 325 | return 2; | 
| 302 | } | 326 | } | 
| @@ -314,7 +338,8 @@ static int x509_name_ex_print(BIO *out, ASN1_VALUE **pval, | |||
| 314 | * dirName can also be checked with a simple memcmp(). | 338 | * dirName can also be checked with a simple memcmp(). | 
| 315 | */ | 339 | */ | 
| 316 | 340 | ||
| 317 | static int x509_name_canon(X509_NAME *a) | 341 | static int | 
| 342 | x509_name_canon(X509_NAME *a) | ||
| 318 | { | 343 | { | 
| 319 | unsigned char *p; | 344 | unsigned char *p; | 
| 320 | STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL; | 345 | STACK_OF(STACK_OF_X509_NAME_ENTRY) *intname = NULL; | 
| @@ -325,22 +350,22 @@ static int x509_name_canon(X509_NAME *a) | |||
| 325 | if (a->canon_enc) { | 350 | if (a->canon_enc) { | 
| 326 | free(a->canon_enc); | 351 | free(a->canon_enc); | 
| 327 | a->canon_enc = NULL; | 352 | a->canon_enc = NULL; | 
| 328 | } | 353 | } | 
| 329 | /* Special case: empty X509_NAME => null encoding */ | 354 | /* Special case: empty X509_NAME => null encoding */ | 
| 330 | if (sk_X509_NAME_ENTRY_num(a->entries) == 0) { | 355 | if (sk_X509_NAME_ENTRY_num(a->entries) == 0) { | 
| 331 | a->canon_enclen = 0; | 356 | a->canon_enclen = 0; | 
| 332 | return 1; | 357 | return 1; | 
| 333 | } | 358 | } | 
| 334 | intname = sk_STACK_OF_X509_NAME_ENTRY_new_null(); | 359 | intname = sk_STACK_OF_X509_NAME_ENTRY_new_null(); | 
| 335 | if(!intname) | 360 | if (!intname) | 
| 336 | goto err; | 361 | goto err; | 
| 337 | for(i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) { | 362 | for (i = 0; i < sk_X509_NAME_ENTRY_num(a->entries); i++) { | 
| 338 | entry = sk_X509_NAME_ENTRY_value(a->entries, i); | 363 | entry = sk_X509_NAME_ENTRY_value(a->entries, i); | 
| 339 | if(entry->set != set) { | 364 | if (entry->set != set) { | 
| 340 | entries = sk_X509_NAME_ENTRY_new_null(); | 365 | entries = sk_X509_NAME_ENTRY_new_null(); | 
| 341 | if(!entries) | 366 | if (!entries) | 
| 342 | goto err; | 367 | goto err; | 
| 343 | if(!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) | 368 | if (!sk_STACK_OF_X509_NAME_ENTRY_push(intname, entries)) | 
| 344 | goto err; | 369 | goto err; | 
| 345 | set = entry->set; | 370 | set = entry->set; | 
| 346 | } | 371 | } | 
| @@ -348,33 +373,27 @@ static int x509_name_canon(X509_NAME *a) | |||
| 348 | tmpentry->object = OBJ_dup(entry->object); | 373 | tmpentry->object = OBJ_dup(entry->object); | 
| 349 | if (!asn1_string_canon(tmpentry->value, entry->value)) | 374 | if (!asn1_string_canon(tmpentry->value, entry->value)) | 
| 350 | goto err; | 375 | goto err; | 
| 351 | if(!sk_X509_NAME_ENTRY_push(entries, tmpentry)) | 376 | if (!sk_X509_NAME_ENTRY_push(entries, tmpentry)) | 
| 352 | goto err; | 377 | goto err; | 
| 353 | tmpentry = NULL; | 378 | tmpentry = NULL; | 
| 354 | } | 379 | } | 
| 355 | 380 | ||
| 356 | /* Finally generate encoding */ | 381 | /* Finally generate encoding */ | 
| 357 | |||
| 358 | a->canon_enclen = i2d_name_canon(intname, NULL); | 382 | a->canon_enclen = i2d_name_canon(intname, NULL); | 
| 359 | |||
| 360 | p = malloc(a->canon_enclen); | 383 | p = malloc(a->canon_enclen); | 
| 361 | |||
| 362 | if (!p) | 384 | if (!p) | 
| 363 | goto err; | 385 | goto err; | 
| 364 | |||
| 365 | a->canon_enc = p; | 386 | a->canon_enc = p; | 
| 366 | |||
| 367 | i2d_name_canon(intname, &p); | 387 | i2d_name_canon(intname, &p); | 
| 368 | |||
| 369 | ret = 1; | 388 | ret = 1; | 
| 370 | 389 | ||
| 371 | err: | 390 | err: | 
| 372 | 391 | ||
| 373 | if (tmpentry) | 392 | if (tmpentry) | 
| 374 | X509_NAME_ENTRY_free(tmpentry); | 393 | X509_NAME_ENTRY_free(tmpentry); | 
| 375 | if (intname) | 394 | if (intname) | 
| 376 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname, | 395 | sk_STACK_OF_X509_NAME_ENTRY_pop_free(intname, | 
| 377 | local_sk_X509_NAME_ENTRY_pop_free); | 396 | local_sk_X509_NAME_ENTRY_pop_free); | 
| 378 | return ret; | 397 | return ret; | 
| 379 | } | 398 | } | 
| 380 | 399 | ||
| @@ -384,9 +403,10 @@ static int x509_name_canon(X509_NAME *a) | |||
| 384 | (B_ASN1_UTF8STRING | B_ASN1_BMPSTRING | B_ASN1_UNIVERSALSTRING \ | 403 | (B_ASN1_UTF8STRING | B_ASN1_BMPSTRING | B_ASN1_UNIVERSALSTRING \ | 
| 385 | | B_ASN1_PRINTABLESTRING | B_ASN1_T61STRING | B_ASN1_IA5STRING \ | 404 | | B_ASN1_PRINTABLESTRING | B_ASN1_T61STRING | B_ASN1_IA5STRING \ | 
| 386 | | B_ASN1_VISIBLESTRING) | 405 | | B_ASN1_VISIBLESTRING) | 
| 387 | |||
| 388 | 406 | ||
| 389 | static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) | 407 | |
| 408 | static int | ||
| 409 | asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) | ||
| 390 | { | 410 | { | 
| 391 | unsigned char *to, *from; | 411 | unsigned char *to, *from; | 
| 392 | int len, i; | 412 | int len, i; | 
| @@ -415,7 +435,7 @@ static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) | |||
| 415 | */ | 435 | */ | 
| 416 | 436 | ||
| 417 | /* Ignore leading spaces */ | 437 | /* Ignore leading spaces */ | 
| 418 | while((len > 0) && !(*from & 0x80) && isspace(*from)) { | 438 | while ((len > 0) && !(*from & 0x80) && isspace(*from)) { | 
| 419 | from++; | 439 | from++; | 
| 420 | len--; | 440 | len--; | 
| 421 | } | 441 | } | 
| @@ -431,24 +451,24 @@ static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) | |||
| 431 | to = out->data; | 451 | to = out->data; | 
| 432 | 452 | ||
| 433 | i = 0; | 453 | i = 0; | 
| 434 | while(i < len) { | 454 | while (i < len) { | 
| 435 | /* If MSB set just copy across */ | 455 | /* If MSB set just copy across */ | 
| 436 | if (*from & 0x80) { | 456 | if (*from & 0x80) { | 
| 437 | *to++ = *from++; | 457 | *to++ = *from++; | 
| 438 | i++; | 458 | i++; | 
| 439 | } | 459 | } | 
| 440 | /* Collapse multiple spaces */ | 460 | /* Collapse multiple spaces */ | 
| 441 | else if (isspace(*from)) { | 461 | else if (isspace(*from)) { | 
| 442 | /* Copy one space across */ | 462 | /* Copy one space across */ | 
| 443 | *to++ = ' '; | 463 | *to++ = ' '; | 
| 444 | /* Ignore subsequent spaces. Note: don't need to | 464 | /* Ignore subsequent spaces. Note: don't need to | 
| 445 | * check len here because we know the last | 465 | * check len here because we know the last | 
| 446 | * character is a non-space so we can't overflow. | 466 | * character is a non-space so we can't overflow. | 
| 447 | */ | 467 | */ | 
| 448 | do { | 468 | do { | 
| 449 | from++; | 469 | from++; | 
| 450 | i++; | 470 | i++; | 
| 451 | } while(!(*from & 0x80) && isspace(*from)); | 471 | } while (!(*from & 0x80) && isspace(*from)); | 
| 452 | } else { | 472 | } else { | 
| 453 | *to++ = tolower(*from); | 473 | *to++ = tolower(*from); | 
| 454 | from++; | 474 | from++; | 
| @@ -459,11 +479,10 @@ static int asn1_string_canon(ASN1_STRING *out, ASN1_STRING *in) | |||
| 459 | out->length = to - out->data; | 479 | out->length = to - out->data; | 
| 460 | 480 | ||
| 461 | return 1; | 481 | return 1; | 
| 462 | |||
| 463 | } | 482 | } | 
| 464 | 483 | ||
| 465 | static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *_intname, | 484 | static int | 
| 466 | unsigned char **in) | 485 | i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *_intname, unsigned char **in) | 
| 467 | { | 486 | { | 
| 468 | int i, len, ltmp; | 487 | int i, len, ltmp; | 
| 469 | ASN1_VALUE *v; | 488 | ASN1_VALUE *v; | 
| @@ -473,7 +492,7 @@ static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *_intname, | |||
| 473 | for (i = 0; i < sk_ASN1_VALUE_num(intname); i++) { | 492 | for (i = 0; i < sk_ASN1_VALUE_num(intname); i++) { | 
| 474 | v = sk_ASN1_VALUE_value(intname, i); | 493 | v = sk_ASN1_VALUE_value(intname, i); | 
| 475 | ltmp = ASN1_item_ex_i2d(&v, in, | 494 | ltmp = ASN1_item_ex_i2d(&v, in, | 
| 476 | ASN1_ITEM_rptr(X509_NAME_ENTRIES), -1, -1); | 495 | ASN1_ITEM_rptr(X509_NAME_ENTRIES), -1, -1); | 
| 477 | if (ltmp < 0) | 496 | if (ltmp < 0) | 
| 478 | return ltmp; | 497 | return ltmp; | 
| 479 | len += ltmp; | 498 | len += ltmp; | 
| @@ -481,21 +500,23 @@ static int i2d_name_canon(STACK_OF(STACK_OF_X509_NAME_ENTRY) *_intname, | |||
| 481 | return len; | 500 | return len; | 
| 482 | } | 501 | } | 
| 483 | 502 | ||
| 484 | int X509_NAME_set(X509_NAME **xn, X509_NAME *name) | 503 | int | 
| 504 | X509_NAME_set(X509_NAME **xn, X509_NAME *name) | ||
| 485 | { | 505 | { | 
| 486 | X509_NAME *in; | 506 | X509_NAME *in; | 
| 487 | 507 | ||
| 488 | if (!xn || !name) return(0); | 508 | if (!xn || !name) | 
| 509 | return (0); | ||
| 489 | 510 | ||
| 490 | if (*xn != name) { | 511 | if (*xn != name) { | 
| 491 | in=X509_NAME_dup(name); | 512 | in = X509_NAME_dup(name); | 
| 492 | if (in != NULL) { | 513 | if (in != NULL) { | 
| 493 | X509_NAME_free(*xn); | 514 | X509_NAME_free(*xn); | 
| 494 | *xn=in; | 515 | *xn = in; | 
| 495 | } | 516 | } | 
| 496 | } | 517 | } | 
| 497 | return(*xn != NULL); | 518 | return (*xn != NULL); | 
| 498 | } | 519 | } | 
| 499 | 520 | ||
| 500 | IMPLEMENT_STACK_OF(X509_NAME_ENTRY) | 521 | IMPLEMENT_STACK_OF(X509_NAME_ENTRY) | 
| 501 | IMPLEMENT_ASN1_SET_OF(X509_NAME_ENTRY) | 522 | IMPLEMENT_ASN1_SET_OF(X509_NAME_ENTRY) | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_nx509.c b/src/lib/libssl/src/crypto/asn1/x_nx509.c index fbd9a22db3..538a9f95eb 100644 --- a/src/lib/libssl/src/crypto/asn1/x_nx509.c +++ b/src/lib/libssl/src/crypto/asn1/x_nx509.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -69,4 +69,3 @@ ASN1_SEQUENCE(NETSCAPE_X509) = { | |||
| 69 | } ASN1_SEQUENCE_END(NETSCAPE_X509) | 69 | } ASN1_SEQUENCE_END(NETSCAPE_X509) | 
| 70 | 70 | ||
| 71 | IMPLEMENT_ASN1_FUNCTIONS(NETSCAPE_X509) | 71 | IMPLEMENT_ASN1_FUNCTIONS(NETSCAPE_X509) | 
| 72 | |||
| diff --git a/src/lib/libssl/src/crypto/asn1/x_pkey.c b/src/lib/libssl/src/crypto/asn1/x_pkey.c index eac134a1ee..d18b8f6f5e 100644 --- a/src/lib/libssl/src/crypto/asn1/x_pkey.c +++ b/src/lib/libssl/src/crypto/asn1/x_pkey.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -64,75 +64,85 @@ | |||
| 64 | #include <openssl/x509.h> | 64 | #include <openssl/x509.h> | 
| 65 | 65 | ||
| 66 | /* need to implement */ | 66 | /* need to implement */ | 
| 67 | int i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp) | 67 | int | 
| 68 | i2d_X509_PKEY(X509_PKEY *a, unsigned char **pp) | ||
| 68 | { | 69 | { | 
| 69 | return(0); | 70 | return (0); | 
| 70 | } | 71 | } | 
| 71 | 72 | ||
| 72 | X509_PKEY *d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp, long length) | 73 | X509_PKEY * | 
| 74 | d2i_X509_PKEY(X509_PKEY **a, const unsigned char **pp, long length) | ||
| 73 | { | 75 | { | 
| 74 | int i; | 76 | int i; | 
| 75 | M_ASN1_D2I_vars(a,X509_PKEY *,X509_PKEY_new); | 77 | M_ASN1_D2I_vars(a, X509_PKEY *, X509_PKEY_new); | 
| 76 | 78 | ||
| 77 | M_ASN1_D2I_Init(); | 79 | M_ASN1_D2I_Init(); | 
| 78 | M_ASN1_D2I_start_sequence(); | 80 | M_ASN1_D2I_start_sequence(); | 
| 79 | M_ASN1_D2I_get_x(X509_ALGOR,ret->enc_algor,d2i_X509_ALGOR); | 81 | M_ASN1_D2I_get_x(X509_ALGOR, ret->enc_algor, d2i_X509_ALGOR); | 
| 80 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING,ret->enc_pkey,d2i_ASN1_OCTET_STRING); | 82 | M_ASN1_D2I_get_x(ASN1_OCTET_STRING, ret->enc_pkey, | 
| 83 | d2i_ASN1_OCTET_STRING); | ||
| 81 | 84 | ||
| 82 | ret->cipher.cipher=EVP_get_cipherbyname( | 85 | ret->cipher.cipher = EVP_get_cipherbyname( | 
| 83 | OBJ_nid2ln(OBJ_obj2nid(ret->enc_algor->algorithm))); | 86 | OBJ_nid2ln(OBJ_obj2nid(ret->enc_algor->algorithm))); | 
| 84 | if (ret->cipher.cipher == NULL) { | 87 | if (ret->cipher.cipher == NULL) { | 
| 85 | c.error=ASN1_R_UNSUPPORTED_CIPHER; | 88 | c.error = ASN1_R_UNSUPPORTED_CIPHER; | 
| 86 | c.line=__LINE__; | 89 | c.line = __LINE__; | 
| 87 | goto err; | 90 | goto err; | 
| 88 | } | 91 | } | 
| 89 | if (ret->enc_algor->parameter->type == V_ASN1_OCTET_STRING) { | 92 | if (ret->enc_algor->parameter->type == V_ASN1_OCTET_STRING) { | 
| 90 | i=ret->enc_algor->parameter->value.octet_string->length; | 93 | i = ret->enc_algor->parameter->value.octet_string->length; | 
| 91 | if (i > EVP_MAX_IV_LENGTH) { | 94 | if (i > EVP_MAX_IV_LENGTH) { | 
| 92 | c.error=ASN1_R_IV_TOO_LARGE; | 95 | c.error = ASN1_R_IV_TOO_LARGE; | 
| 93 | c.line=__LINE__; | 96 | c.line = __LINE__; | 
| 94 | goto err; | 97 | goto err; | 
| 95 | } | 98 | } | 
| 96 | memcpy(ret->cipher.iv, | 99 | memcpy(ret->cipher.iv, | 
| 97 | ret->enc_algor->parameter->value.octet_string->data,i); | 100 | ret->enc_algor->parameter->value.octet_string->data, i); | 
| 98 | } | 101 | } else | 
| 99 | else | 102 | memset(ret->cipher.iv, 0, EVP_MAX_IV_LENGTH); | 
| 100 | memset(ret->cipher.iv,0,EVP_MAX_IV_LENGTH); | 103 | M_ASN1_D2I_Finish(a, X509_PKEY_free, ASN1_F_D2I_X509_PKEY); | 
| 101 | M_ASN1_D2I_Finish(a,X509_PKEY_free,ASN1_F_D2I_X509_PKEY); | ||
| 102 | } | 104 | } | 
| 103 | 105 | ||
| 104 | X509_PKEY *X509_PKEY_new(void) | 106 | X509_PKEY * | 
| 107 | X509_PKEY_new(void) | ||
| 105 | { | 108 | { | 
| 106 | X509_PKEY *ret=NULL; | 109 | X509_PKEY *ret = NULL; | 
| 107 | ASN1_CTX c; | 110 | ASN1_CTX c; | 
| 108 | 111 | ||
| 109 | M_ASN1_New_Malloc(ret,X509_PKEY); | 112 | M_ASN1_New_Malloc(ret, X509_PKEY); | 
| 110 | ret->version=0; | 113 | ret->version = 0; | 
| 111 | M_ASN1_New(ret->enc_algor,X509_ALGOR_new); | 114 | M_ASN1_New(ret->enc_algor, X509_ALGOR_new); | 
| 112 | M_ASN1_New(ret->enc_pkey,M_ASN1_OCTET_STRING_new); | 115 | M_ASN1_New(ret->enc_pkey, M_ASN1_OCTET_STRING_new); | 
| 113 | ret->dec_pkey=NULL; | 116 | ret->dec_pkey = NULL; | 
| 114 | ret->key_length=0; | 117 | ret->key_length = 0; | 
| 115 | ret->key_data=NULL; | 118 | ret->key_data = NULL; | 
| 116 | ret->key_free=0; | 119 | ret->key_free = 0; | 
| 117 | ret->cipher.cipher=NULL; | 120 | ret->cipher.cipher = NULL; | 
| 118 | memset(ret->cipher.iv,0,EVP_MAX_IV_LENGTH); | 121 | memset(ret->cipher.iv, 0, EVP_MAX_IV_LENGTH); | 
| 119 | ret->references=1; | 122 | ret->references = 1; | 
| 120 | return(ret); | 123 | return (ret); | 
| 121 | M_ASN1_New_Error(ASN1_F_X509_PKEY_NEW); | 124 | M_ASN1_New_Error(ASN1_F_X509_PKEY_NEW); | 
| 122 | } | 125 | } | 
| 123 | 126 | ||
| 124 | void X509_PKEY_free(X509_PKEY *x) | 127 | void | 
| 128 | X509_PKEY_free(X509_PKEY *x) | ||
| 125 | { | 129 | { | 
| 126 | int i; | 130 | int i; | 
| 127 | 131 | ||
| 128 | if (x == NULL) return; | 132 | if (x == NULL) | 
| 133 | return; | ||
| 129 | 134 | ||
| 130 | i=CRYPTO_add(&x->references,-1,CRYPTO_LOCK_X509_PKEY); | 135 | i = CRYPTO_add(&x->references, -1, CRYPTO_LOCK_X509_PKEY); | 
| 131 | if (i > 0) return; | 136 | if (i > 0) | 
| 137 | return; | ||
| 132 | 138 | ||
| 133 | if (x->enc_algor != NULL) X509_ALGOR_free(x->enc_algor); | 139 | if (x->enc_algor != NULL) | 
| 134 | if (x->enc_pkey != NULL) M_ASN1_OCTET_STRING_free(x->enc_pkey); | 140 | X509_ALGOR_free(x->enc_algor); | 
| 135 | if (x->dec_pkey != NULL)EVP_PKEY_free(x->dec_pkey); | 141 | if (x->enc_pkey != NULL) | 
| 136 | if ((x->key_data != NULL) && (x->key_free)) free(x->key_data); | 142 | M_ASN1_OCTET_STRING_free(x->enc_pkey); | 
| 143 | if (x->dec_pkey != NULL) | ||
| 144 | EVP_PKEY_free(x->dec_pkey); | ||
| 145 | if ((x->key_data != NULL) && (x->key_free)) | ||
| 146 | free(x->key_data); | ||
| 137 | free(x); | 147 | free(x); | 
| 138 | } | 148 | } | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_pubkey.c b/src/lib/libssl/src/crypto/asn1/x_pubkey.c index 1d6ab6580a..df915e2dfd 100644 --- a/src/lib/libssl/src/crypto/asn1/x_pubkey.c +++ b/src/lib/libssl/src/crypto/asn1/x_pubkey.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -69,8 +69,8 @@ | |||
| 69 | #endif | 69 | #endif | 
| 70 | 70 | ||
| 71 | /* Minor tweak to operation: free up EVP_PKEY */ | 71 | /* Minor tweak to operation: free up EVP_PKEY */ | 
| 72 | static int pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | 72 | static int | 
| 73 | void *exarg) | 73 | pubkey_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | 
| 74 | { | 74 | { | 
| 75 | if (operation == ASN1_OP_FREE_POST) { | 75 | if (operation == ASN1_OP_FREE_POST) { | 
| 76 | X509_PUBKEY *pubkey = (X509_PUBKEY *)*pval; | 76 | X509_PUBKEY *pubkey = (X509_PUBKEY *)*pval; | 
| @@ -86,54 +86,61 @@ ASN1_SEQUENCE_cb(X509_PUBKEY, pubkey_cb) = { | |||
| 86 | 86 | ||
| 87 | IMPLEMENT_ASN1_FUNCTIONS(X509_PUBKEY) | 87 | IMPLEMENT_ASN1_FUNCTIONS(X509_PUBKEY) | 
| 88 | 88 | ||
| 89 | int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | 89 | int | 
| 90 | X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey) | ||
| 90 | { | 91 | { | 
| 91 | X509_PUBKEY *pk=NULL; | 92 | X509_PUBKEY *pk = NULL; | 
| 92 | 93 | ||
| 93 | if (x == NULL) return(0); | 94 | if (x == NULL) | 
| 94 | 95 | return (0); | |
| 95 | if ((pk=X509_PUBKEY_new()) == NULL) goto error; | 96 | if ((pk = X509_PUBKEY_new()) == NULL) | 
| 97 | goto error; | ||
| 96 | 98 | ||
| 97 | if (pkey->ameth) { | 99 | if (pkey->ameth) { | 
| 98 | if (pkey->ameth->pub_encode) { | 100 | if (pkey->ameth->pub_encode) { | 
| 99 | if (!pkey->ameth->pub_encode(pk, pkey)) { | 101 | if (!pkey->ameth->pub_encode(pk, pkey)) { | 
| 100 | X509err(X509_F_X509_PUBKEY_SET, | 102 | X509err(X509_F_X509_PUBKEY_SET, | 
| 101 | X509_R_PUBLIC_KEY_ENCODE_ERROR); | 103 | X509_R_PUBLIC_KEY_ENCODE_ERROR); | 
| 102 | goto error; | 104 | goto error; | 
| 103 | } | 105 | } | 
| 104 | } else { | 106 | } else { | 
| 105 | X509err(X509_F_X509_PUBKEY_SET, | 107 | X509err(X509_F_X509_PUBKEY_SET, | 
| 106 | X509_R_METHOD_NOT_SUPPORTED); | 108 | X509_R_METHOD_NOT_SUPPORTED); | 
| 107 | goto error; | 109 | goto error; | 
| 108 | } | 110 | } | 
| 109 | } else { | 111 | } else { | 
| 110 | X509err(X509_F_X509_PUBKEY_SET,X509_R_UNSUPPORTED_ALGORITHM); | 112 | X509err(X509_F_X509_PUBKEY_SET, X509_R_UNSUPPORTED_ALGORITHM); | 
| 111 | goto error; | 113 | goto error; | 
| 112 | } | 114 | } | 
| 113 | 115 | ||
| 114 | if (*x != NULL) | 116 | if (*x != NULL) | 
| 115 | X509_PUBKEY_free(*x); | 117 | X509_PUBKEY_free(*x); | 
| 116 | 118 | ||
| 117 | *x=pk; | 119 | *x = pk; | 
| 118 | 120 | ||
| 119 | return 1; | 121 | return 1; | 
| 122 | |||
| 120 | error: | 123 | error: | 
| 121 | if (pk != NULL) X509_PUBKEY_free(pk); | 124 | if (pk != NULL) | 
| 125 | X509_PUBKEY_free(pk); | ||
| 122 | return 0; | 126 | return 0; | 
| 123 | } | 127 | } | 
| 124 | 128 | ||
| 125 | EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) | 129 | EVP_PKEY * | 
| 130 | X509_PUBKEY_get(X509_PUBKEY *key) | ||
| 126 | { | 131 | { | 
| 127 | EVP_PKEY *ret=NULL; | 132 | EVP_PKEY *ret = NULL; | 
| 128 | 133 | ||
| 129 | if (key == NULL) goto error; | 134 | if (key == NULL) | 
| 135 | goto error; | ||
| 130 | 136 | ||
| 131 | if (key->pkey != NULL) { | 137 | if (key->pkey != NULL) { | 
| 132 | CRYPTO_add(&key->pkey->references, 1, CRYPTO_LOCK_EVP_PKEY); | 138 | CRYPTO_add(&key->pkey->references, 1, CRYPTO_LOCK_EVP_PKEY); | 
| 133 | return key->pkey; | 139 | return key->pkey; | 
| 134 | } | 140 | } | 
| 135 | 141 | ||
| 136 | if (key->public_key == NULL) goto error; | 142 | if (key->public_key == NULL) | 
| 143 | goto error; | ||
| 137 | 144 | ||
| 138 | if ((ret = EVP_PKEY_new()) == NULL) { | 145 | if ((ret = EVP_PKEY_new()) == NULL) { | 
| 139 | X509err(X509_F_X509_PUBKEY_GET, ERR_R_MALLOC_FAILURE); | 146 | X509err(X509_F_X509_PUBKEY_GET, ERR_R_MALLOC_FAILURE); | 
| @@ -141,14 +148,14 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) | |||
| 141 | } | 148 | } | 
| 142 | 149 | ||
| 143 | if (!EVP_PKEY_set_type(ret, OBJ_obj2nid(key->algor->algorithm))) { | 150 | if (!EVP_PKEY_set_type(ret, OBJ_obj2nid(key->algor->algorithm))) { | 
| 144 | X509err(X509_F_X509_PUBKEY_GET,X509_R_UNSUPPORTED_ALGORITHM); | 151 | X509err(X509_F_X509_PUBKEY_GET, X509_R_UNSUPPORTED_ALGORITHM); | 
| 145 | goto error; | 152 | goto error; | 
| 146 | } | 153 | } | 
| 147 | 154 | ||
| 148 | if (ret->ameth->pub_decode) { | 155 | if (ret->ameth->pub_decode) { | 
| 149 | if (!ret->ameth->pub_decode(ret, key)) { | 156 | if (!ret->ameth->pub_decode(ret, key)) { | 
| 150 | X509err(X509_F_X509_PUBKEY_GET, | 157 | X509err(X509_F_X509_PUBKEY_GET, | 
| 151 | X509_R_PUBLIC_KEY_DECODE_ERROR); | 158 | X509_R_PUBLIC_KEY_DECODE_ERROR); | 
| 152 | goto error; | 159 | goto error; | 
| 153 | } | 160 | } | 
| 154 | } else { | 161 | } else { | 
| @@ -170,39 +177,44 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key) | |||
| 170 | 177 | ||
| 171 | return ret; | 178 | return ret; | 
| 172 | 179 | ||
| 173 | error: | 180 | error: | 
| 174 | if (ret != NULL) | 181 | if (ret != NULL) | 
| 175 | EVP_PKEY_free(ret); | 182 | EVP_PKEY_free(ret); | 
| 176 | return(NULL); | 183 | return (NULL); | 
| 177 | } | 184 | } | 
| 178 | 185 | ||
| 179 | /* Now two pseudo ASN1 routines that take an EVP_PKEY structure | 186 | /* Now two pseudo ASN1 routines that take an EVP_PKEY structure | 
| 180 | * and encode or decode as X509_PUBKEY | 187 | * and encode or decode as X509_PUBKEY | 
| 181 | */ | 188 | */ | 
| 182 | 189 | ||
| 183 | EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, | 190 | EVP_PKEY * | 
| 184 | long length) | 191 | d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length) | 
| 185 | { | 192 | { | 
| 186 | X509_PUBKEY *xpk; | 193 | X509_PUBKEY *xpk; | 
| 187 | EVP_PKEY *pktmp; | 194 | EVP_PKEY *pktmp; | 
| 188 | xpk = d2i_X509_PUBKEY(NULL, pp, length); | 195 | xpk = d2i_X509_PUBKEY(NULL, pp, length); | 
| 189 | if(!xpk) return NULL; | 196 | if (!xpk) | 
| 197 | return NULL; | ||
| 190 | pktmp = X509_PUBKEY_get(xpk); | 198 | pktmp = X509_PUBKEY_get(xpk); | 
| 191 | X509_PUBKEY_free(xpk); | 199 | X509_PUBKEY_free(xpk); | 
| 192 | if(!pktmp) return NULL; | 200 | if (!pktmp) | 
| 193 | if(a) { | 201 | return NULL; | 
| 202 | if (a) { | ||
| 194 | EVP_PKEY_free(*a); | 203 | EVP_PKEY_free(*a); | 
| 195 | *a = pktmp; | 204 | *a = pktmp; | 
| 196 | } | 205 | } | 
| 197 | return pktmp; | 206 | return pktmp; | 
| 198 | } | 207 | } | 
| 199 | 208 | ||
| 200 | int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp) | 209 | int | 
| 210 | i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp) | ||
| 201 | { | 211 | { | 
| 202 | X509_PUBKEY *xpk=NULL; | 212 | X509_PUBKEY *xpk = NULL; | 
| 203 | int ret; | 213 | int ret; | 
| 204 | if(!a) return 0; | 214 | if (!a) | 
| 205 | if(!X509_PUBKEY_set(&xpk, a)) return 0; | 215 | return 0; | 
| 216 | if (!X509_PUBKEY_set(&xpk, a)) | ||
| 217 | return 0; | ||
| 206 | ret = i2d_X509_PUBKEY(xpk, pp); | 218 | ret = i2d_X509_PUBKEY(xpk, pp); | 
| 207 | X509_PUBKEY_free(xpk); | 219 | X509_PUBKEY_free(xpk); | 
| 208 | return ret; | 220 | return ret; | 
| @@ -212,18 +224,20 @@ int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp) | |||
| 212 | * keys | 224 | * keys | 
| 213 | */ | 225 | */ | 
| 214 | #ifndef OPENSSL_NO_RSA | 226 | #ifndef OPENSSL_NO_RSA | 
| 215 | RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, | 227 | RSA * | 
| 216 | long length) | 228 | d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, long length) | 
| 217 | { | 229 | { | 
| 218 | EVP_PKEY *pkey; | 230 | EVP_PKEY *pkey; | 
| 219 | RSA *key; | 231 | RSA *key; | 
| 220 | const unsigned char *q; | 232 | const unsigned char *q; | 
| 221 | q = *pp; | 233 | q = *pp; | 
| 222 | pkey = d2i_PUBKEY(NULL, &q, length); | 234 | pkey = d2i_PUBKEY(NULL, &q, length); | 
| 223 | if (!pkey) return NULL; | 235 | if (!pkey) | 
| 236 | return NULL; | ||
| 224 | key = EVP_PKEY_get1_RSA(pkey); | 237 | key = EVP_PKEY_get1_RSA(pkey); | 
| 225 | EVP_PKEY_free(pkey); | 238 | EVP_PKEY_free(pkey); | 
| 226 | if (!key) return NULL; | 239 | if (!key) | 
| 240 | return NULL; | ||
| 227 | *pp = q; | 241 | *pp = q; | 
| 228 | if (a) { | 242 | if (a) { | 
| 229 | RSA_free(*a); | 243 | RSA_free(*a); | 
| @@ -232,11 +246,13 @@ RSA *d2i_RSA_PUBKEY(RSA **a, const unsigned char **pp, | |||
| 232 | return key; | 246 | return key; | 
| 233 | } | 247 | } | 
| 234 | 248 | ||
| 235 | int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp) | 249 | int | 
| 250 | i2d_RSA_PUBKEY(RSA *a, unsigned char **pp) | ||
| 236 | { | 251 | { | 
| 237 | EVP_PKEY *pktmp; | 252 | EVP_PKEY *pktmp; | 
| 238 | int ret; | 253 | int ret; | 
| 239 | if (!a) return 0; | 254 | if (!a) | 
| 255 | return 0; | ||
| 240 | pktmp = EVP_PKEY_new(); | 256 | pktmp = EVP_PKEY_new(); | 
| 241 | if (!pktmp) { | 257 | if (!pktmp) { | 
| 242 | ASN1err(ASN1_F_I2D_RSA_PUBKEY, ERR_R_MALLOC_FAILURE); | 258 | ASN1err(ASN1_F_I2D_RSA_PUBKEY, ERR_R_MALLOC_FAILURE); | 
| @@ -250,18 +266,20 @@ int i2d_RSA_PUBKEY(RSA *a, unsigned char **pp) | |||
| 250 | #endif | 266 | #endif | 
| 251 | 267 | ||
| 252 | #ifndef OPENSSL_NO_DSA | 268 | #ifndef OPENSSL_NO_DSA | 
| 253 | DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, | 269 | DSA * | 
| 254 | long length) | 270 | d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length) | 
| 255 | { | 271 | { | 
| 256 | EVP_PKEY *pkey; | 272 | EVP_PKEY *pkey; | 
| 257 | DSA *key; | 273 | DSA *key; | 
| 258 | const unsigned char *q; | 274 | const unsigned char *q; | 
| 259 | q = *pp; | 275 | q = *pp; | 
| 260 | pkey = d2i_PUBKEY(NULL, &q, length); | 276 | pkey = d2i_PUBKEY(NULL, &q, length); | 
| 261 | if (!pkey) return NULL; | 277 | if (!pkey) | 
| 278 | return NULL; | ||
| 262 | key = EVP_PKEY_get1_DSA(pkey); | 279 | key = EVP_PKEY_get1_DSA(pkey); | 
| 263 | EVP_PKEY_free(pkey); | 280 | EVP_PKEY_free(pkey); | 
| 264 | if (!key) return NULL; | 281 | if (!key) | 
| 282 | return NULL; | ||
| 265 | *pp = q; | 283 | *pp = q; | 
| 266 | if (a) { | 284 | if (a) { | 
| 267 | DSA_free(*a); | 285 | DSA_free(*a); | 
| @@ -270,13 +288,15 @@ DSA *d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, | |||
| 270 | return key; | 288 | return key; | 
| 271 | } | 289 | } | 
| 272 | 290 | ||
| 273 | int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp) | 291 | int | 
| 292 | i2d_DSA_PUBKEY(DSA *a, unsigned char **pp) | ||
| 274 | { | 293 | { | 
| 275 | EVP_PKEY *pktmp; | 294 | EVP_PKEY *pktmp; | 
| 276 | int ret; | 295 | int ret; | 
| 277 | if(!a) return 0; | 296 | if (!a) | 
| 297 | return 0; | ||
| 278 | pktmp = EVP_PKEY_new(); | 298 | pktmp = EVP_PKEY_new(); | 
| 279 | if(!pktmp) { | 299 | if (!pktmp) { | 
| 280 | ASN1err(ASN1_F_I2D_DSA_PUBKEY, ERR_R_MALLOC_FAILURE); | 300 | ASN1err(ASN1_F_I2D_DSA_PUBKEY, ERR_R_MALLOC_FAILURE); | 
| 281 | return 0; | 301 | return 0; | 
| 282 | } | 302 | } | 
| @@ -288,44 +308,49 @@ int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp) | |||
| 288 | #endif | 308 | #endif | 
| 289 | 309 | ||
| 290 | #ifndef OPENSSL_NO_EC | 310 | #ifndef OPENSSL_NO_EC | 
| 291 | EC_KEY *d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length) | 311 | EC_KEY * | 
| 312 | d2i_EC_PUBKEY(EC_KEY **a, const unsigned char **pp, long length) | ||
| 292 | { | 313 | { | 
| 293 | EVP_PKEY *pkey; | 314 | EVP_PKEY *pkey; | 
| 294 | EC_KEY *key; | 315 | EC_KEY *key; | 
| 295 | const unsigned char *q; | 316 | const unsigned char *q; | 
| 296 | q = *pp; | 317 | q = *pp; | 
| 297 | pkey = d2i_PUBKEY(NULL, &q, length); | 318 | pkey = d2i_PUBKEY(NULL, &q, length); | 
| 298 | if (!pkey) return(NULL); | 319 | if (!pkey) | 
| 320 | return (NULL); | ||
| 299 | key = EVP_PKEY_get1_EC_KEY(pkey); | 321 | key = EVP_PKEY_get1_EC_KEY(pkey); | 
| 300 | EVP_PKEY_free(pkey); | 322 | EVP_PKEY_free(pkey); | 
| 301 | if (!key) return(NULL); | 323 | if (!key) | 
| 324 | return (NULL); | ||
| 302 | *pp = q; | 325 | *pp = q; | 
| 303 | if (a) { | 326 | if (a) { | 
| 304 | EC_KEY_free(*a); | 327 | EC_KEY_free(*a); | 
| 305 | *a = key; | 328 | *a = key; | 
| 306 | } | 329 | } | 
| 307 | return(key); | 330 | return (key); | 
| 308 | } | 331 | } | 
| 309 | 332 | ||
| 310 | int i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp) | 333 | int | 
| 334 | i2d_EC_PUBKEY(EC_KEY *a, unsigned char **pp) | ||
| 311 | { | 335 | { | 
| 312 | EVP_PKEY *pktmp; | 336 | EVP_PKEY *pktmp; | 
| 313 | int ret; | 337 | int ret; | 
| 314 | if (!a) return(0); | 338 | if (!a) | 
| 339 | return (0); | ||
| 315 | if ((pktmp = EVP_PKEY_new()) == NULL) { | 340 | if ((pktmp = EVP_PKEY_new()) == NULL) { | 
| 316 | ASN1err(ASN1_F_I2D_EC_PUBKEY, ERR_R_MALLOC_FAILURE); | 341 | ASN1err(ASN1_F_I2D_EC_PUBKEY, ERR_R_MALLOC_FAILURE); | 
| 317 | return(0); | 342 | return (0); | 
| 318 | } | 343 | } | 
| 319 | EVP_PKEY_set1_EC_KEY(pktmp, a); | 344 | EVP_PKEY_set1_EC_KEY(pktmp, a); | 
| 320 | ret = i2d_PUBKEY(pktmp, pp); | 345 | ret = i2d_PUBKEY(pktmp, pp); | 
| 321 | EVP_PKEY_free(pktmp); | 346 | EVP_PKEY_free(pktmp); | 
| 322 | return(ret); | 347 | return (ret); | 
| 323 | } | 348 | } | 
| 324 | #endif | 349 | #endif | 
| 325 | 350 | ||
| 326 | int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, | 351 | int | 
| 327 | int ptype, void *pval, | 352 | X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, int ptype, | 
| 328 | unsigned char *penc, int penclen) | 353 | void *pval, unsigned char *penc, int penclen) | 
| 329 | { | 354 | { | 
| 330 | if (!X509_ALGOR_set0(pub->algor, aobj, ptype, pval)) | 355 | if (!X509_ALGOR_set0(pub->algor, aobj, ptype, pval)) | 
| 331 | return 0; | 356 | return 0; | 
| @@ -334,17 +359,16 @@ int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj, | |||
| 334 | free(pub->public_key->data); | 359 | free(pub->public_key->data); | 
| 335 | pub->public_key->data = penc; | 360 | pub->public_key->data = penc; | 
| 336 | pub->public_key->length = penclen; | 361 | pub->public_key->length = penclen; | 
| 337 | /* Set number of unused bits to zero */ | 362 | /* Set number of unused bits to zero */ | 
| 338 | pub->public_key->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); | 363 | pub->public_key->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); | 
| 339 | pub->public_key->flags|=ASN1_STRING_FLAG_BITS_LEFT; | 364 | pub->public_key->flags |= ASN1_STRING_FLAG_BITS_LEFT; | 
| 340 | } | 365 | } | 
| 341 | return 1; | 366 | return 1; | 
| 342 | } | 367 | } | 
| 343 | 368 | ||
| 344 | int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, | 369 | int | 
| 345 | const unsigned char **pk, int *ppklen, | 370 | X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg, const unsigned char **pk, | 
| 346 | X509_ALGOR **pa, | 371 | int *ppklen, X509_ALGOR **pa, X509_PUBKEY *pub) | 
| 347 | X509_PUBKEY *pub) | ||
| 348 | { | 372 | { | 
| 349 | if (ppkalg) | 373 | if (ppkalg) | 
| 350 | *ppkalg = pub->algor->algorithm; | 374 | *ppkalg = pub->algor->algorithm; | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_req.c b/src/lib/libssl/src/crypto/asn1/x_req.c index d57555827c..442f56a144 100644 --- a/src/lib/libssl/src/crypto/asn1/x_req.c +++ b/src/lib/libssl/src/crypto/asn1/x_req.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -66,7 +66,7 @@ | |||
| 66 | * encode the attributes field if it is empty. This is in | 66 | * encode the attributes field if it is empty. This is in | 
| 67 | * violation of PKCS#10 but we need to tolerate it. We do | 67 | * violation of PKCS#10 but we need to tolerate it. We do | 
| 68 | * this by making the attributes field OPTIONAL then using | 68 | * this by making the attributes field OPTIONAL then using | 
| 69 | * the callback to initialise it to an empty STACK. | 69 | * the callback to initialise it to an empty STACK. | 
| 70 | * | 70 | * | 
| 71 | * This means that the field will be correctly encoded unless | 71 | * This means that the field will be correctly encoded unless | 
| 72 | * we NULL out the field. | 72 | * we NULL out the field. | 
| @@ -79,14 +79,15 @@ | |||
| 79 | * | 79 | * | 
| 80 | */ | 80 | */ | 
| 81 | 81 | ||
| 82 | static int rinf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | 82 | static int | 
| 83 | void *exarg) | 83 | rinf_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | 
| 84 | { | 84 | { | 
| 85 | X509_REQ_INFO *rinf = (X509_REQ_INFO *)*pval; | 85 | X509_REQ_INFO *rinf = (X509_REQ_INFO *)*pval; | 
| 86 | 86 | ||
| 87 | if(operation == ASN1_OP_NEW_POST) { | 87 | if (operation == ASN1_OP_NEW_POST) { | 
| 88 | rinf->attributes = sk_X509_ATTRIBUTE_new_null(); | 88 | rinf->attributes = sk_X509_ATTRIBUTE_new_null(); | 
| 89 | if(!rinf->attributes) return 0; | 89 | if (!rinf->attributes) | 
| 90 | return 0; | ||
| 90 | } | 91 | } | 
| 91 | return 1; | 92 | return 1; | 
| 92 | } | 93 | } | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_sig.c b/src/lib/libssl/src/crypto/asn1/x_sig.c index 42efa86c1c..5c9aef0365 100644 --- a/src/lib/libssl/src/crypto/asn1/x_sig.c +++ b/src/lib/libssl/src/crypto/asn1/x_sig.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_spki.c b/src/lib/libssl/src/crypto/asn1/x_spki.c index 2aece077c5..34fe81443c 100644 --- a/src/lib/libssl/src/crypto/asn1/x_spki.c +++ b/src/lib/libssl/src/crypto/asn1/x_spki.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_val.c b/src/lib/libssl/src/crypto/asn1/x_val.c index dc17c67758..6436f0cb55 100644 --- a/src/lib/libssl/src/crypto/asn1/x_val.c +++ b/src/lib/libssl/src/crypto/asn1/x_val.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_x509.c b/src/lib/libssl/src/crypto/asn1/x_x509.c index 20448a8e3b..e7d613e20f 100644 --- a/src/lib/libssl/src/crypto/asn1/x_x509.c +++ b/src/lib/libssl/src/crypto/asn1/x_x509.c | |||
| @@ -5,21 +5,21 @@ | |||
| 5 | * This package is an SSL implementation written | 5 | * This package is an SSL implementation written | 
| 6 | * by Eric Young (eay@cryptsoft.com). | 6 | * by Eric Young (eay@cryptsoft.com). | 
| 7 | * The implementation was written so as to conform with Netscapes SSL. | 7 | * The implementation was written so as to conform with Netscapes SSL. | 
| 8 | * | 8 | * | 
| 9 | * This library is free for commercial and non-commercial use as long as | 9 | * This library is free for commercial and non-commercial use as long as | 
| 10 | * the following conditions are aheared to. The following conditions | 10 | * the following conditions are aheared to. The following conditions | 
| 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 11 | * apply to all code found in this distribution, be it the RC4, RSA, | 
| 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 12 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation | 
| 13 | * included with this distribution is covered by the same copyright terms | 13 | * included with this distribution is covered by the same copyright terms | 
| 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 14 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). | 
| 15 | * | 15 | * | 
| 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 16 | * Copyright remains Eric Young's, and as such any Copyright notices in | 
| 17 | * the code are not to be removed. | 17 | * the code are not to be removed. | 
| 18 | * If this package is used in a product, Eric Young should be given attribution | 18 | * If this package is used in a product, Eric Young should be given attribution | 
| 19 | * as the author of the parts of the library used. | 19 | * as the author of the parts of the library used. | 
| 20 | * This can be in the form of a textual message at program startup or | 20 | * This can be in the form of a textual message at program startup or | 
| 21 | * in documentation (online or textual) provided with the package. | 21 | * in documentation (online or textual) provided with the package. | 
| 22 | * | 22 | * | 
| 23 | * Redistribution and use in source and binary forms, with or without | 23 | * Redistribution and use in source and binary forms, with or without | 
| 24 | * modification, are permitted provided that the following conditions | 24 | * modification, are permitted provided that the following conditions | 
| 25 | * are met: | 25 | * are met: | 
| @@ -34,10 +34,10 @@ | |||
| 34 | * Eric Young (eay@cryptsoft.com)" | 34 | * Eric Young (eay@cryptsoft.com)" | 
| 35 | * The word 'cryptographic' can be left out if the rouines from the library | 35 | * The word 'cryptographic' can be left out if the rouines from the library | 
| 36 | * being used are not cryptographic related :-). | 36 | * being used are not cryptographic related :-). | 
| 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 37 | * 4. If you include any Windows specific code (or a derivative thereof) from | 
| 38 | * the apps directory (application code) you must include an acknowledgement: | 38 | * the apps directory (application code) you must include an acknowledgement: | 
| 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 39 | * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" | 
| 40 | * | 40 | * | 
| 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 41 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND | 
| 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 42 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 43 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| @@ -49,7 +49,7 @@ | |||
| 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 49 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
| 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 50 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
| 51 | * SUCH DAMAGE. | 51 | * SUCH DAMAGE. | 
| 52 | * | 52 | * | 
| 53 | * The licence and distribution terms for any publically available version or | 53 | * The licence and distribution terms for any publically available version or | 
| 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 54 | * derivative of this code cannot be changed. i.e. this code cannot simply be | 
| 55 | * copied and put under another distribution licence | 55 | * copied and put under another distribution licence | 
| @@ -81,15 +81,15 @@ IMPLEMENT_ASN1_FUNCTIONS(X509_CINF) | |||
| 81 | 81 | ||
| 82 | extern void policy_cache_free(X509_POLICY_CACHE *cache); | 82 | extern void policy_cache_free(X509_POLICY_CACHE *cache); | 
| 83 | 83 | ||
| 84 | static int x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | 84 | static int | 
| 85 | void *exarg) | 85 | x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, void *exarg) | 
| 86 | { | 86 | { | 
| 87 | X509 *ret = (X509 *)*pval; | 87 | X509 *ret = (X509 *)*pval; | 
| 88 | 88 | ||
| 89 | switch(operation) { | 89 | switch (operation) { | 
| 90 | 90 | ||
| 91 | case ASN1_OP_NEW_POST: | 91 | case ASN1_OP_NEW_POST: | 
| 92 | ret->valid=0; | 92 | ret->valid = 0; | 
| 93 | ret->name = NULL; | 93 | ret->name = NULL; | 
| 94 | ret->ex_flags = 0; | 94 | ret->ex_flags = 0; | 
| 95 | ret->ex_pathlen = -1; | 95 | ret->ex_pathlen = -1; | 
| @@ -105,8 +105,9 @@ static int x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
| 105 | break; | 105 | break; | 
| 106 | 106 | ||
| 107 | case ASN1_OP_D2I_POST: | 107 | case ASN1_OP_D2I_POST: | 
| 108 | if (ret->name != NULL) free(ret->name); | 108 | if (ret->name != NULL) | 
| 109 | ret->name=X509_NAME_oneline(ret->cert_info->subject,NULL,0); | 109 | free(ret->name); | 
| 110 | ret->name = X509_NAME_oneline(ret->cert_info->subject, NULL, 0); | ||
| 110 | break; | 111 | break; | 
| 111 | 112 | ||
| 112 | case ASN1_OP_FREE_POST: | 113 | case ASN1_OP_FREE_POST: | 
| @@ -122,14 +123,12 @@ static int x509_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
| 122 | sk_IPAddressFamily_pop_free(ret->rfc3779_addr, IPAddressFamily_free); | 123 | sk_IPAddressFamily_pop_free(ret->rfc3779_addr, IPAddressFamily_free); | 
| 123 | ASIdentifiers_free(ret->rfc3779_asid); | 124 | ASIdentifiers_free(ret->rfc3779_asid); | 
| 124 | #endif | 125 | #endif | 
| 125 | 126 | if (ret->name != NULL) | |
| 126 | if (ret->name != NULL) free(ret->name); | 127 | free(ret->name); | 
| 127 | break; | 128 | break; | 
| 128 | |||
| 129 | } | 129 | } | 
| 130 | 130 | ||
| 131 | return 1; | 131 | return 1; | 
| 132 | |||
| 133 | } | 132 | } | 
| 134 | 133 | ||
| 135 | ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { | 134 | ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { | 
| @@ -141,21 +140,24 @@ ASN1_SEQUENCE_ref(X509, x509_cb, CRYPTO_LOCK_X509) = { | |||
| 141 | IMPLEMENT_ASN1_FUNCTIONS(X509) | 140 | IMPLEMENT_ASN1_FUNCTIONS(X509) | 
| 142 | IMPLEMENT_ASN1_DUP_FUNCTION(X509) | 141 | IMPLEMENT_ASN1_DUP_FUNCTION(X509) | 
| 143 | 142 | ||
| 144 | int X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, | 143 | int | 
| 145 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) | 144 | X509_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, | 
| 145 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) | ||
| 146 | { | 146 | { | 
| 147 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, argl, argp, | 147 | return CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_X509, argl, argp, | 
| 148 | new_func, dup_func, free_func); | 148 | new_func, dup_func, free_func); | 
| 149 | } | 149 | } | 
| 150 | 150 | ||
| 151 | int X509_set_ex_data(X509 *r, int idx, void *arg) | 151 | int | 
| 152 | X509_set_ex_data(X509 *r, int idx, void *arg) | ||
| 152 | { | 153 | { | 
| 153 | return(CRYPTO_set_ex_data(&r->ex_data,idx,arg)); | 154 | return (CRYPTO_set_ex_data(&r->ex_data, idx, arg)); | 
| 154 | } | 155 | } | 
| 155 | 156 | ||
| 156 | void *X509_get_ex_data(X509 *r, int idx) | 157 | void * | 
| 158 | X509_get_ex_data(X509 *r, int idx) | ||
| 157 | { | 159 | { | 
| 158 | return(CRYPTO_get_ex_data(&r->ex_data,idx)); | 160 | return (CRYPTO_get_ex_data(&r->ex_data, idx)); | 
| 159 | } | 161 | } | 
| 160 | 162 | ||
| 161 | /* X509_AUX ASN1 routines. X509_AUX is the name given to | 163 | /* X509_AUX ASN1 routines. X509_AUX is the name given to | 
| @@ -166,29 +168,38 @@ void *X509_get_ex_data(X509 *r, int idx) | |||
| 166 | * | 168 | * | 
| 167 | */ | 169 | */ | 
| 168 | 170 | ||
| 169 | X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length) | 171 | X509 * | 
| 172 | d2i_X509_AUX(X509 **a, const unsigned char **pp, long length) | ||
| 170 | { | 173 | { | 
| 171 | const unsigned char *q; | 174 | const unsigned char *q; | 
| 172 | X509 *ret; | 175 | X509 *ret; | 
| 176 | |||
| 173 | /* Save start position */ | 177 | /* Save start position */ | 
| 174 | q = *pp; | 178 | q = *pp; | 
| 175 | ret = d2i_X509(a, pp, length); | 179 | ret = d2i_X509(a, pp, length); | 
| 176 | /* If certificate unreadable then forget it */ | 180 | /* If certificate unreadable then forget it */ | 
| 177 | if(!ret) return NULL; | 181 | if (!ret) | 
| 182 | return NULL; | ||
| 178 | /* update length */ | 183 | /* update length */ | 
| 179 | length -= *pp - q; | 184 | length -= *pp - q; | 
| 180 | if(!length) return ret; | 185 | if (!length) | 
| 181 | if(!d2i_X509_CERT_AUX(&ret->aux, pp, length)) goto err; | 186 | return ret; | 
| 187 | if (!d2i_X509_CERT_AUX(&ret->aux, pp, length)) | ||
| 188 | goto err; | ||
| 182 | return ret; | 189 | return ret; | 
| 183 | err: | 190 | |
| 191 | err: | ||
| 184 | X509_free(ret); | 192 | X509_free(ret); | 
| 185 | return NULL; | 193 | return NULL; | 
| 186 | } | 194 | } | 
| 187 | 195 | ||
| 188 | int i2d_X509_AUX(X509 *a, unsigned char **pp) | 196 | int | 
| 197 | i2d_X509_AUX(X509 *a, unsigned char **pp) | ||
| 189 | { | 198 | { | 
| 190 | int length; | 199 | int length; | 
| 200 | |||
| 191 | length = i2d_X509(a, pp); | 201 | length = i2d_X509(a, pp); | 
| 192 | if(a) length += i2d_X509_CERT_AUX(a->aux, pp); | 202 | if (a) | 
| 203 | length += i2d_X509_CERT_AUX(a->aux, pp); | ||
| 193 | return length; | 204 | return length; | 
| 194 | } | 205 | } | 
| diff --git a/src/lib/libssl/src/crypto/asn1/x_x509a.c b/src/lib/libssl/src/crypto/asn1/x_x509a.c index 287d780830..69ea725709 100644 --- a/src/lib/libssl/src/crypto/asn1/x_x509a.c +++ b/src/lib/libssl/src/crypto/asn1/x_x509a.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * are met: | 10 | * are met: | 
| 11 | * | 11 | * | 
| 12 | * 1. Redistributions of source code must retain the above copyright | 12 | * 1. Redistributions of source code must retain the above copyright | 
| 13 | * notice, this list of conditions and the following disclaimer. | 13 | * notice, this list of conditions and the following disclaimer. | 
| 14 | * | 14 | * | 
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 16 | * notice, this list of conditions and the following disclaimer in | 16 | * notice, this list of conditions and the following disclaimer in | 
| @@ -66,7 +66,7 @@ | |||
| 66 | * user modifiable data about a certificate. This data is | 66 | * user modifiable data about a certificate. This data is | 
| 67 | * appended to the X509 encoding when the *_X509_AUX routines | 67 | * appended to the X509 encoding when the *_X509_AUX routines | 
| 68 | * are used. This means that the "traditional" X509 routines | 68 | * are used. This means that the "traditional" X509 routines | 
| 69 | * will simply ignore the extra data. | 69 | * will simply ignore the extra data. | 
| 70 | */ | 70 | */ | 
| 71 | 71 | ||
| 72 | static X509_CERT_AUX *aux_get(X509 *x); | 72 | static X509_CERT_AUX *aux_get(X509 *x); | 
| @@ -81,14 +81,18 @@ ASN1_SEQUENCE(X509_CERT_AUX) = { | |||
| 81 | 81 | ||
| 82 | IMPLEMENT_ASN1_FUNCTIONS(X509_CERT_AUX) | 82 | IMPLEMENT_ASN1_FUNCTIONS(X509_CERT_AUX) | 
| 83 | 83 | ||
| 84 | static X509_CERT_AUX *aux_get(X509 *x) | 84 | static X509_CERT_AUX * | 
| 85 | aux_get(X509 *x) | ||
| 85 | { | 86 | { | 
| 86 | if(!x) return NULL; | 87 | if (!x) | 
| 87 | if(!x->aux && !(x->aux = X509_CERT_AUX_new())) return NULL; | 88 | return NULL; | 
| 89 | if (!x->aux && !(x->aux = X509_CERT_AUX_new())) | ||
| 90 | return NULL; | ||
| 88 | return x->aux; | 91 | return x->aux; | 
| 89 | } | 92 | } | 
| 90 | 93 | ||
| 91 | int X509_alias_set1(X509 *x, unsigned char *name, int len) | 94 | int | 
| 95 | X509_alias_set1(X509 *x, unsigned char *name, int len) | ||
| 92 | { | 96 | { | 
| 93 | X509_CERT_AUX *aux; | 97 | X509_CERT_AUX *aux; | 
| 94 | if (!name) { | 98 | if (!name) { | 
| @@ -98,12 +102,15 @@ int X509_alias_set1(X509 *x, unsigned char *name, int len) | |||
| 98 | x->aux->alias = NULL; | 102 | x->aux->alias = NULL; | 
| 99 | return 1; | 103 | return 1; | 
| 100 | } | 104 | } | 
| 101 | if(!(aux = aux_get(x))) return 0; | 105 | if (!(aux = aux_get(x))) | 
| 102 | if(!aux->alias && !(aux->alias = ASN1_UTF8STRING_new())) return 0; | 106 | return 0; | 
| 107 | if (!aux->alias && !(aux->alias = ASN1_UTF8STRING_new())) | ||
| 108 | return 0; | ||
| 103 | return ASN1_STRING_set(aux->alias, name, len); | 109 | return ASN1_STRING_set(aux->alias, name, len); | 
| 104 | } | 110 | } | 
| 105 | 111 | ||
| 106 | int X509_keyid_set1(X509 *x, unsigned char *id, int len) | 112 | int | 
| 113 | X509_keyid_set1(X509 *x, unsigned char *id, int len) | ||
| 107 | { | 114 | { | 
| 108 | X509_CERT_AUX *aux; | 115 | X509_CERT_AUX *aux; | 
| 109 | if (!id) { | 116 | if (!id) { | 
| @@ -113,58 +120,74 @@ int X509_keyid_set1(X509 *x, unsigned char *id, int len) | |||
| 113 | x->aux->keyid = NULL; | 120 | x->aux->keyid = NULL; | 
| 114 | return 1; | 121 | return 1; | 
| 115 | } | 122 | } | 
| 116 | if(!(aux = aux_get(x))) return 0; | 123 | if (!(aux = aux_get(x))) | 
| 117 | if(!aux->keyid && !(aux->keyid = ASN1_OCTET_STRING_new())) return 0; | 124 | return 0; | 
| 125 | if (!aux->keyid && !(aux->keyid = ASN1_OCTET_STRING_new())) | ||
| 126 | return 0; | ||
| 118 | return ASN1_STRING_set(aux->keyid, id, len); | 127 | return ASN1_STRING_set(aux->keyid, id, len); | 
| 119 | } | 128 | } | 
| 120 | 129 | ||
| 121 | unsigned char *X509_alias_get0(X509 *x, int *len) | 130 | unsigned char * | 
| 131 | X509_alias_get0(X509 *x, int *len) | ||
| 122 | { | 132 | { | 
| 123 | if(!x->aux || !x->aux->alias) return NULL; | 133 | if (!x->aux || !x->aux->alias) | 
| 124 | if(len) *len = x->aux->alias->length; | 134 | return NULL; | 
| 135 | if (len) | ||
| 136 | *len = x->aux->alias->length; | ||
| 125 | return x->aux->alias->data; | 137 | return x->aux->alias->data; | 
| 126 | } | 138 | } | 
| 127 | 139 | ||
| 128 | unsigned char *X509_keyid_get0(X509 *x, int *len) | 140 | unsigned char * | 
| 141 | X509_keyid_get0(X509 *x, int *len) | ||
| 129 | { | 142 | { | 
| 130 | if(!x->aux || !x->aux->keyid) return NULL; | 143 | if (!x->aux || !x->aux->keyid) | 
| 131 | if(len) *len = x->aux->keyid->length; | 144 | return NULL; | 
| 145 | if (len) | ||
| 146 | *len = x->aux->keyid->length; | ||
| 132 | return x->aux->keyid->data; | 147 | return x->aux->keyid->data; | 
| 133 | } | 148 | } | 
| 134 | 149 | ||
| 135 | int X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj) | 150 | int | 
| 151 | X509_add1_trust_object(X509 *x, ASN1_OBJECT *obj) | ||
| 136 | { | 152 | { | 
| 137 | X509_CERT_AUX *aux; | 153 | X509_CERT_AUX *aux; | 
| 138 | ASN1_OBJECT *objtmp; | 154 | ASN1_OBJECT *objtmp; | 
| 139 | if(!(objtmp = OBJ_dup(obj))) return 0; | 155 | if (!(objtmp = OBJ_dup(obj))) | 
| 140 | if(!(aux = aux_get(x))) return 0; | 156 | return 0; | 
| 141 | if(!aux->trust | 157 | if (!(aux = aux_get(x))) | 
| 142 | && !(aux->trust = sk_ASN1_OBJECT_new_null())) return 0; | 158 | return 0; | 
| 159 | if (!aux->trust && !(aux->trust = sk_ASN1_OBJECT_new_null())) | ||
| 160 | return 0; | ||
| 143 | return sk_ASN1_OBJECT_push(aux->trust, objtmp); | 161 | return sk_ASN1_OBJECT_push(aux->trust, objtmp); | 
| 144 | } | 162 | } | 
| 145 | 163 | ||
| 146 | int X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj) | 164 | int | 
| 165 | X509_add1_reject_object(X509 *x, ASN1_OBJECT *obj) | ||
| 147 | { | 166 | { | 
| 148 | X509_CERT_AUX *aux; | 167 | X509_CERT_AUX *aux; | 
| 149 | ASN1_OBJECT *objtmp; | 168 | ASN1_OBJECT *objtmp; | 
| 150 | if(!(objtmp = OBJ_dup(obj))) return 0; | 169 | if (!(objtmp = OBJ_dup(obj))) | 
| 151 | if(!(aux = aux_get(x))) return 0; | 170 | return 0; | 
| 152 | if(!aux->reject | 171 | if (!(aux = aux_get(x))) | 
| 153 | && !(aux->reject = sk_ASN1_OBJECT_new_null())) return 0; | 172 | return 0; | 
| 173 | if (!aux->reject && !(aux->reject = sk_ASN1_OBJECT_new_null())) | ||
| 174 | return 0; | ||
| 154 | return sk_ASN1_OBJECT_push(aux->reject, objtmp); | 175 | return sk_ASN1_OBJECT_push(aux->reject, objtmp); | 
| 155 | } | 176 | } | 
| 156 | 177 | ||
| 157 | void X509_trust_clear(X509 *x) | 178 | void | 
| 179 | X509_trust_clear(X509 *x) | ||
| 158 | { | 180 | { | 
| 159 | if(x->aux && x->aux->trust) { | 181 | if (x->aux && x->aux->trust) { | 
| 160 | sk_ASN1_OBJECT_pop_free(x->aux->trust, ASN1_OBJECT_free); | 182 | sk_ASN1_OBJECT_pop_free(x->aux->trust, ASN1_OBJECT_free); | 
| 161 | x->aux->trust = NULL; | 183 | x->aux->trust = NULL; | 
| 162 | } | 184 | } | 
| 163 | } | 185 | } | 
| 164 | 186 | ||
| 165 | void X509_reject_clear(X509 *x) | 187 | void | 
| 188 | X509_reject_clear(X509 *x) | ||
| 166 | { | 189 | { | 
| 167 | if(x->aux && x->aux->reject) { | 190 | if (x->aux && x->aux->reject) { | 
| 168 | sk_ASN1_OBJECT_pop_free(x->aux->reject, ASN1_OBJECT_free); | 191 | sk_ASN1_OBJECT_pop_free(x->aux->reject, ASN1_OBJECT_free); | 
| 169 | x->aux->reject = NULL; | 192 | x->aux->reject = NULL; | 
| 170 | } | 193 | } | 
