summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/req.c4
-rw-r--r--crypto/asn1/a_type.c2
-rw-r--r--crypto/asn1/asn1.h58
-rw-r--r--crypto/asn1/t_req.c4
-rw-r--r--crypto/asn1/x_attrib.c11
-rw-r--r--crypto/pkcs12/p12_attr.c17
-rw-r--r--crypto/pkcs7/pk7_doit.c11
-rw-r--r--crypto/x509/x509.h2
8 files changed, 58 insertions, 51 deletions
diff --git a/apps/req.c b/apps/req.c
index c3f6a1a0ca..7459f7b7da 100644
--- a/apps/req.c
+++ b/apps/req.c
@@ -1069,7 +1069,7 @@ start:
/* add object plus value */
if ((xa=X509_ATTRIBUTE_new()) == NULL)
goto err;
- if ((xa->value.set=sk_new_null()) == NULL)
+ if ((xa->value.set=sk_ASN1_TYPE_new_null()) == NULL)
goto err;
xa->set=1;
@@ -1095,7 +1095,7 @@ start:
{ BIO_printf(bio_err,"Malloc failure\n"); goto err; }
ASN1_TYPE_set(at,bs->type,(char *)bs);
- sk_push(xa->value.set,(char *)at);
+ sk_ASN1_TYPE_push(xa->value.set,at);
bs=NULL;
at=NULL;
/* only one item per attribute */
diff --git a/crypto/asn1/a_type.c b/crypto/asn1/a_type.c
index c1ca8b20ff..72240a0b25 100644
--- a/crypto/asn1/a_type.c
+++ b/crypto/asn1/a_type.c
@@ -344,3 +344,5 @@ static void ASN1_TYPE_component_free(ASN1_TYPE *a)
}
}
+IMPLEMENT_STACK_OF(ASN1_TYPE)
+IMPLEMENT_ASN1_SET_OF(ASN1_TYPE)
diff --git a/crypto/asn1/asn1.h b/crypto/asn1/asn1.h
index 7ce7eb3fe2..5050d572e4 100644
--- a/crypto/asn1/asn1.h
+++ b/crypto/asn1/asn1.h
@@ -66,6 +66,7 @@ extern "C" {
#include <time.h>
#include <openssl/bn.h>
#include <openssl/stack.h>
+#include <openssl/safestack.h>
#define V_ASN1_UNIVERSAL 0x00
#define V_ASN1_APPLICATION 0x40
@@ -127,6 +128,33 @@ extern "C" {
#define B_ASN1_UNKNOWN 0x1000
#define B_ASN1_UTF8STRING 0x2000
+#define DECLARE_ASN1_SET_OF(type) \
+int i2d_ASN1_SET_OF_##type(STACK_OF(type) *a,unsigned char **pp, \
+ int (*func)(type *,unsigned char **), int ex_tag, \
+ int ex_class, int is_set); \
+STACK_OF(type) *d2i_ASN1_SET_OF_##type(STACK_OF(type) **a,unsigned char **pp, \
+ long length, \
+ type *(*func)(type **, \
+ unsigned char **,long), \
+ void (*free_func)(type *), \
+ int ex_tag,int ex_class);
+
+#define IMPLEMENT_ASN1_SET_OF(type) \
+int i2d_ASN1_SET_OF_##type(STACK_OF(type) *a,unsigned char **pp, \
+ int (*func)(type *,unsigned char **), int ex_tag, \
+ int ex_class, int is_set) \
+ { return i2d_ASN1_SET((STACK *)a,pp,func,ex_tag,ex_class,is_set); } \
+STACK_OF(type) *d2i_ASN1_SET_OF_##type(STACK_OF(type) **a,unsigned char **pp, \
+ long length, \
+ type *(*func)(type **, \
+ unsigned char **,long), \
+ void (*free_func)(type *), \
+ int ex_tag,int ex_class) \
+ { return (STACK_OF(type) *)d2i_ASN1_SET((STACK **)a,pp,length, \
+ (char *(*)())func, \
+ (void (*)())free_func, \
+ ex_tag,ex_class); }
+
typedef struct asn1_ctx_st
{
unsigned char *p;/* work char pointer */
@@ -233,6 +261,9 @@ typedef struct asn1_type_st
} value;
} ASN1_TYPE;
+DECLARE_STACK_OF(ASN1_TYPE)
+DECLARE_ASN1_SET_OF(ASN1_TYPE)
+
typedef struct asn1_method_st
{
int (*i2d)();
@@ -553,33 +584,6 @@ STACK * d2i_ASN1_SET(STACK **a, unsigned char **pp, long length,
char *(*func)(), void (*free_func)(),
int ex_tag, int ex_class);
-#define DECLARE_ASN1_SET_OF(type) \
-int i2d_ASN1_SET_OF_##type(STACK_OF(type) *a,unsigned char **pp, \
- int (*func)(type *,unsigned char **), int ex_tag, \
- int ex_class, int is_set); \
-STACK_OF(type) *d2i_ASN1_SET_OF_##type(STACK_OF(type) **a,unsigned char **pp, \
- long length, \
- type *(*func)(type **, \
- unsigned char **,long), \
- void (*free_func)(type *), \
- int ex_tag,int ex_class);
-
-#define IMPLEMENT_ASN1_SET_OF(type) \
-int i2d_ASN1_SET_OF_##type(STACK_OF(type) *a,unsigned char **pp, \
- int (*func)(type *,unsigned char **), int ex_tag, \
- int ex_class, int is_set) \
- { return i2d_ASN1_SET((STACK *)a,pp,func,ex_tag,ex_class,is_set); } \
-STACK_OF(type) *d2i_ASN1_SET_OF_##type(STACK_OF(type) **a,unsigned char **pp, \
- long length, \
- type *(*func)(type **, \
- unsigned char **,long), \
- void (*free_func)(type *), \
- int ex_tag,int ex_class) \
- { return (STACK_OF(type) *)d2i_ASN1_SET((STACK **)a,pp,length, \
- (char *(*)())func, \
- (void (*)())free_func, \
- ex_tag,ex_class); }
-
#ifdef HEADER_BIO_H
int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a);
int a2i_ASN1_INTEGER(BIO *bp,ASN1_INTEGER *bs,char *buf,int size);
diff --git a/crypto/asn1/t_req.c b/crypto/asn1/t_req.c
index b83684416d..bdd749436a 100644
--- a/crypto/asn1/t_req.c
+++ b/crypto/asn1/t_req.c
@@ -168,9 +168,9 @@ int X509_REQ_print(BIO *bp, X509_REQ *x)
if (a->set)
{
ii=0;
- count=sk_num(a->value.set);
+ count=sk_ASN1_TYPE_num(a->value.set);
get_next:
- at=(ASN1_TYPE *)sk_value(a->value.set,ii);
+ at=sk_ASN1_TYPE_value(a->value.set,ii);
type=at->type;
bs=at->value.asn1_string;
}
diff --git a/crypto/asn1/x_attrib.c b/crypto/asn1/x_attrib.c
index 78a7990c2f..274c9a920d 100644
--- a/crypto/asn1/x_attrib.c
+++ b/crypto/asn1/x_attrib.c
@@ -84,7 +84,7 @@ int i2d_X509_ATTRIBUTE(X509_ATTRIBUTE *a, unsigned char **pp)
ret+=i2d_ASN1_OBJECT(a->object,p);
if (a->set)
- ret+=i2d_ASN1_SET(a->value.set,p,i2d_ASN1_TYPE,
+ ret+=i2d_ASN1_SET_OF_ASN1_TYPE(a->value.set,p,i2d_ASN1_TYPE,
V_ASN1_SET,V_ASN1_UNIVERSAL,IS_SET);
else
ret+=i2d_ASN1_TYPE(a->value.single,p);
@@ -105,7 +105,8 @@ X509_ATTRIBUTE *d2i_X509_ATTRIBUTE(X509_ATTRIBUTE **a, unsigned char **pp,
(M_ASN1_next == (V_ASN1_CONSTRUCTED|V_ASN1_UNIVERSAL|V_ASN1_SET)))
{
ret->set=1;
- M_ASN1_D2I_get_set(ret->value.set,d2i_ASN1_TYPE,ASN1_TYPE_free);
+ M_ASN1_D2I_get_set_type(ASN1_TYPE,ret->value.set,d2i_ASN1_TYPE,
+ ASN1_TYPE_free);
}
else
{
@@ -125,9 +126,9 @@ X509_ATTRIBUTE *X509_ATTRIBUTE_create(int nid, int atrtype, char *value)
return(NULL);
ret->object=OBJ_nid2obj(nid);
ret->set=1;
- if ((ret->value.set=sk_new_null()) == NULL) goto err;
+ if ((ret->value.set=sk_ASN1_TYPE_new_null()) == NULL) goto err;
if ((val=ASN1_TYPE_new()) == NULL) goto err;
- if (!sk_push(ret->value.set,(char *)val)) goto err;
+ if (!sk_ASN1_TYPE_push(ret->value.set,val)) goto err;
ASN1_TYPE_set(val,atrtype,value);
return(ret);
@@ -155,7 +156,7 @@ void X509_ATTRIBUTE_free(X509_ATTRIBUTE *a)
if (a == NULL) return;
ASN1_OBJECT_free(a->object);
if (a->set)
- sk_pop_free(a->value.set,ASN1_TYPE_free);
+ sk_ASN1_TYPE_pop_free(a->value.set,ASN1_TYPE_free);
else
ASN1_TYPE_free(a->value.single);
Free((char *)a);
diff --git a/crypto/pkcs12/p12_attr.c b/crypto/pkcs12/p12_attr.c
index 0bd91e388c..e096023c32 100644
--- a/crypto/pkcs12/p12_attr.c
+++ b/crypto/pkcs12/p12_attr.c
@@ -87,11 +87,11 @@ int PKCS12_add_localkeyid (PKCS12_SAFEBAG *bag, unsigned char *name,
return 0;
}
attrib->object = OBJ_nid2obj(NID_localKeyID);
- if (!(attrib->value.set = sk_new(NULL))) {
+ if (!(attrib->value.set = sk_ASN1_TYPE_new(NULL))) {
PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE);
return 0;
}
- sk_push (attrib->value.set, (char *)keyid);
+ sk_ASN1_TYPE_push (attrib->value.set,keyid);
attrib->set = 1;
if (!bag->attrib && !(bag->attrib = sk_new (NULL))) {
PKCS12err(PKCS12_F_PKCS12_ADD_LOCALKEYID, ERR_R_MALLOC_FAILURE);
@@ -129,11 +129,11 @@ int PKCS8_add_keyusage (PKCS8_PRIV_KEY_INFO *p8, int usage)
return 0;
}
attrib->object = OBJ_nid2obj(NID_key_usage);
- if (!(attrib->value.set = sk_new(NULL))) {
+ if (!(attrib->value.set = sk_ASN1_TYPE_new(NULL))) {
PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE);
return 0;
}
- sk_push (attrib->value.set, (char *)keyid);
+ sk_ASN1_TYPE_push (attrib->value.set,keyid);
attrib->set = 1;
if (!p8->attributes && !(p8->attributes = sk_new (NULL))) {
PKCS12err(PKCS12_F_PKCS8_ADD_KEYUSAGE, ERR_R_MALLOC_FAILURE);
@@ -194,12 +194,12 @@ int PKCS12_add_friendlyname_uni (PKCS12_SAFEBAG *bag,
return 0;
}
attrib->object = OBJ_nid2obj(NID_friendlyName);
- if (!(attrib->value.set = sk_new(NULL))) {
+ if (!(attrib->value.set = sk_ASN1_TYPE_new(NULL))) {
PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME,
ERR_R_MALLOC_FAILURE);
return 0;
}
- sk_push (attrib->value.set, (char *)fname);
+ sk_ASN1_TYPE_push (attrib->value.set,fname);
attrib->set = 1;
if (!bag->attrib && !(bag->attrib = sk_new (NULL))) {
PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI,
@@ -218,9 +218,8 @@ ASN1_TYPE *PKCS12_get_attr_gen (STACK *attrs, int attr_nid)
for (i = 0; i < sk_num (attrs); i++) {
attrib = (X509_ATTRIBUTE *) sk_value (attrs, i);
if (OBJ_obj2nid (attrib->object) == attr_nid) {
- if (sk_num (attrib->value.set))
- return (ASN1_TYPE *)
- sk_value (attrib->value.set, 0);
+ if (sk_ASN1_TYPE_num (attrib->value.set))
+ return sk_ASN1_TYPE_value(attrib->value.set, 0);
else return NULL;
}
}
diff --git a/crypto/pkcs7/pk7_doit.c b/crypto/pkcs7/pk7_doit.c
index cb0bd95f9c..67085e3956 100644
--- a/crypto/pkcs7/pk7_doit.c
+++ b/crypto/pkcs7/pk7_doit.c
@@ -809,8 +809,8 @@ static ASN1_TYPE *get_attribute(STACK *sk, int nid)
xa=(X509_ATTRIBUTE *)sk_value(sk,i);
if (OBJ_cmp(xa->object,o) == 0)
{
- if (xa->set && sk_num(xa->value.set))
- return((ASN1_TYPE *)sk_value(xa->value.set,0));
+ if (xa->set && sk_ASN1_TYPE_num(xa->value.set))
+ return(sk_ASN1_TYPE_value(xa->value.set,0));
else
return(NULL);
}
@@ -831,9 +831,10 @@ ASN1_OCTET_STRING *PKCS7_digest_from_attributes(STACK *sk)
if (OBJ_obj2nid(attr->object) == NID_pkcs9_messageDigest)
{
if (!attr->set) return NULL;
- if (!attr->value.set ||
- !sk_num (attr->value.set) ) return NULL;
- astype = (ASN1_TYPE *) sk_value(attr->value.set, 0);
+ if (!attr->value.set
+ || !sk_ASN1_TYPE_num(attr->value.set) )
+ return NULL;
+ astype = sk_ASN1_TYPE_value(attr->value.set, 0);
return astype->value.octet_string;
}
}
diff --git a/crypto/x509/x509.h b/crypto/x509/x509.h
index 5c2894ba73..02f7b2fff3 100644
--- a/crypto/x509/x509.h
+++ b/crypto/x509/x509.h
@@ -174,7 +174,7 @@ typedef struct x509_attributes_st
int set; /* 1 for a set, 0 for a single item (which is wrong) */
union {
char *ptr;
-/* 1 */ STACK /* ASN1_TYPE */ *set;
+/* 1 */ STACK_OF(ASN1_TYPE) *set;
/* 0 */ ASN1_TYPE *single;
} value;
} X509_ATTRIBUTE;