diff options
| author | beck <> | 1999-09-29 04:37:45 +0000 |
|---|---|---|
| committer | beck <> | 1999-09-29 04:37:45 +0000 |
| commit | de8f24ea083384bb66b32ec105dc4743c5663cdf (patch) | |
| tree | 1412176ae62a3cab2cf2b0b92150fcbceaac6092 /src/lib/libcrypto/asn1/x_attrib.c | |
| parent | cb929d29896bcb87c2a97417fbd03e50078fc178 (diff) | |
| download | openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.gz openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.bz2 openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.zip | |
OpenSSL 0.9.4 merge
Diffstat (limited to 'src/lib/libcrypto/asn1/x_attrib.c')
| -rw-r--r-- | src/lib/libcrypto/asn1/x_attrib.c | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/src/lib/libcrypto/asn1/x_attrib.c b/src/lib/libcrypto/asn1/x_attrib.c index e52ced8627..a1cbebf5a5 100644 --- a/src/lib/libcrypto/asn1/x_attrib.c +++ b/src/lib/libcrypto/asn1/x_attrib.c | |||
| @@ -58,19 +58,12 @@ | |||
| 58 | 58 | ||
| 59 | #include <stdio.h> | 59 | #include <stdio.h> |
| 60 | #include "cryptlib.h" | 60 | #include "cryptlib.h" |
| 61 | #include "objects.h" | 61 | #include <openssl/objects.h> |
| 62 | #include "asn1_mac.h" | 62 | #include <openssl/asn1_mac.h> |
| 63 | 63 | #include <openssl/x509.h> | |
| 64 | /* | ||
| 65 | * ASN1err(ASN1_F_D2I_X509_ATTRIBUTE,ASN1_R_LENGTH_MISMATCH); | ||
| 66 | * ASN1err(ASN1_F_X509_ATTRIBUTE_NEW,ASN1_R_UNKNOWN_ATTRIBUTE_TYPE); | ||
| 67 | * ASN1err(ASN1_F_I2D_X509_ATTRIBUTE,ASN1_R_UNKNOWN_ATTRIBUTE_TYPE); | ||
| 68 | */ | ||
| 69 | 64 | ||
| 70 | /* sequence */ | 65 | /* sequence */ |
| 71 | int i2d_X509_ATTRIBUTE(a,pp) | 66 | int i2d_X509_ATTRIBUTE(X509_ATTRIBUTE *a, unsigned char **pp) |
| 72 | X509_ATTRIBUTE *a; | ||
| 73 | unsigned char **pp; | ||
| 74 | { | 67 | { |
| 75 | int k=0; | 68 | int k=0; |
| 76 | int r=0,ret=0; | 69 | int r=0,ret=0; |
| @@ -92,18 +85,16 @@ unsigned char **pp; | |||
| 92 | 85 | ||
| 93 | ret+=i2d_ASN1_OBJECT(a->object,p); | 86 | ret+=i2d_ASN1_OBJECT(a->object,p); |
| 94 | if (a->set) | 87 | if (a->set) |
| 95 | ret+=i2d_ASN1_SET(a->value.set,p,i2d_ASN1_TYPE, | 88 | ret+=i2d_ASN1_SET_OF_ASN1_TYPE(a->value.set,p,i2d_ASN1_TYPE, |
| 96 | V_ASN1_SET,V_ASN1_UNIVERSAL); | 89 | V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET); |
| 97 | else | 90 | else |
| 98 | ret+=i2d_ASN1_TYPE(a->value.single,p); | 91 | ret+=i2d_ASN1_TYPE(a->value.single,p); |
| 99 | if (k++) return(r); | 92 | if (k++) return(r); |
| 100 | } | 93 | } |
| 101 | } | 94 | } |
| 102 | 95 | ||
| 103 | X509_ATTRIBUTE *d2i_X509_ATTRIBUTE(a,pp,length) | 96 | X509_ATTRIBUTE *d2i_X509_ATTRIBUTE(X509_ATTRIBUTE **a, unsigned char **pp, |
| 104 | X509_ATTRIBUTE **a; | 97 | long length) |
| 105 | unsigned char **pp; | ||
| 106 | long length; | ||
| 107 | { | 98 | { |
| 108 | M_ASN1_D2I_vars(a,X509_ATTRIBUTE *,X509_ATTRIBUTE_new); | 99 | M_ASN1_D2I_vars(a,X509_ATTRIBUTE *,X509_ATTRIBUTE_new); |
| 109 | 100 | ||
| @@ -115,7 +106,8 @@ long length; | |||
| 115 | (M_ASN1_next == (V_ASN1_CONSTRUCTED|V_ASN1_UNIVERSAL|V_ASN1_SET))) | 106 | (M_ASN1_next == (V_ASN1_CONSTRUCTED|V_ASN1_UNIVERSAL|V_ASN1_SET))) |
| 116 | { | 107 | { |
| 117 | ret->set=1; | 108 | ret->set=1; |
| 118 | M_ASN1_D2I_get_set(ret->value.set,d2i_ASN1_TYPE); | 109 | M_ASN1_D2I_get_set_type(ASN1_TYPE,ret->value.set,d2i_ASN1_TYPE, |
| 110 | ASN1_TYPE_free); | ||
| 119 | } | 111 | } |
| 120 | else | 112 | else |
| 121 | { | 113 | { |
| @@ -126,25 +118,46 @@ long length; | |||
| 126 | M_ASN1_D2I_Finish(a,X509_ATTRIBUTE_free,ASN1_F_D2I_X509_ATTRIBUTE); | 118 | M_ASN1_D2I_Finish(a,X509_ATTRIBUTE_free,ASN1_F_D2I_X509_ATTRIBUTE); |
| 127 | } | 119 | } |
| 128 | 120 | ||
| 129 | X509_ATTRIBUTE *X509_ATTRIBUTE_new() | 121 | X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, void *value) |
| 122 | { | ||
| 123 | X509_ATTRIBUTE *ret=NULL; | ||
| 124 | ASN1_TYPE *val=NULL; | ||
| 125 | |||
| 126 | if ((ret=X509_ATTRIBUTE_new()) == NULL) | ||
| 127 | return(NULL); | ||
| 128 | ret->object=OBJ_nid2obj(nid); | ||
| 129 | ret->set=1; | ||
| 130 | if ((ret->value.set=sk_ASN1_TYPE_new_null()) == NULL) goto err; | ||
| 131 | if ((val=ASN1_TYPE_new()) == NULL) goto err; | ||
| 132 | if (!sk_ASN1_TYPE_push(ret->value.set,val)) goto err; | ||
| 133 | |||
| 134 | ASN1_TYPE_set(val,atrtype,value); | ||
| 135 | return(ret); | ||
| 136 | err: | ||
| 137 | if (ret != NULL) X509_ATTRIBUTE_free(ret); | ||
| 138 | if (val != NULL) ASN1_TYPE_free(val); | ||
| 139 | return(NULL); | ||
| 140 | } | ||
| 141 | |||
| 142 | X509_ATTRIBUTE *X509_ATTRIBUTE_new(void) | ||
| 130 | { | 143 | { |
| 131 | X509_ATTRIBUTE *ret=NULL; | 144 | X509_ATTRIBUTE *ret=NULL; |
| 145 | ASN1_CTX c; | ||
| 132 | 146 | ||
| 133 | M_ASN1_New_Malloc(ret,X509_ATTRIBUTE); | 147 | M_ASN1_New_Malloc(ret,X509_ATTRIBUTE); |
| 134 | M_ASN1_New(ret->object,ASN1_OBJECT_new); | 148 | ret->object=OBJ_nid2obj(NID_undef); |
| 135 | ret->set=0; | 149 | ret->set=0; |
| 136 | ret->value.ptr=NULL; | 150 | ret->value.ptr=NULL; |
| 137 | return(ret); | 151 | return(ret); |
| 138 | M_ASN1_New_Error(ASN1_F_X509_ATTRIBUTE_NEW); | 152 | M_ASN1_New_Error(ASN1_F_X509_ATTRIBUTE_NEW); |
| 139 | } | 153 | } |
| 140 | 154 | ||
| 141 | void X509_ATTRIBUTE_free(a) | 155 | void X509_ATTRIBUTE_free(X509_ATTRIBUTE *a) |
| 142 | X509_ATTRIBUTE *a; | ||
| 143 | { | 156 | { |
| 144 | if (a == NULL) return; | 157 | if (a == NULL) return; |
| 145 | ASN1_OBJECT_free(a->object); | 158 | ASN1_OBJECT_free(a->object); |
| 146 | if (a->set) | 159 | if (a->set) |
| 147 | sk_pop_free(a->value.set,ASN1_TYPE_free); | 160 | sk_ASN1_TYPE_pop_free(a->value.set,ASN1_TYPE_free); |
| 148 | else | 161 | else |
| 149 | ASN1_TYPE_free(a->value.single); | 162 | ASN1_TYPE_free(a->value.single); |
| 150 | Free((char *)a); | 163 | Free((char *)a); |
