summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/x_attrib.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/x_attrib.c')
-rw-r--r--src/lib/libcrypto/asn1/x_attrib.c59
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 */
71int i2d_X509_ATTRIBUTE(a,pp) 66int i2d_X509_ATTRIBUTE(X509_ATTRIBUTE *a, unsigned char **pp)
72X509_ATTRIBUTE *a;
73unsigned 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
103X509_ATTRIBUTE *d2i_X509_ATTRIBUTE(a,pp,length) 96X509_ATTRIBUTE *d2i_X509_ATTRIBUTE(X509_ATTRIBUTE **a, unsigned char **pp,
104X509_ATTRIBUTE **a; 97 long length)
105unsigned char **pp;
106long 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
129X509_ATTRIBUTE *X509_ATTRIBUTE_new() 121X509_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);
136err:
137 if (ret != NULL) X509_ATTRIBUTE_free(ret);
138 if (val != NULL) ASN1_TYPE_free(val);
139 return(NULL);
140 }
141
142X509_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
141void X509_ATTRIBUTE_free(a) 155void X509_ATTRIBUTE_free(X509_ATTRIBUTE *a)
142X509_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);