Another stack.
authorBen Laurie <ben@openssl.org>
Sat, 1 May 1999 18:29:59 +0000 (18:29 +0000)
committerBen Laurie <ben@openssl.org>
Sat, 1 May 1999 18:29:59 +0000 (18:29 +0000)
apps/req.c
crypto/asn1/a_type.c
crypto/asn1/asn1.h
crypto/asn1/t_req.c
crypto/asn1/x_attrib.c
crypto/pkcs12/p12_attr.c
crypto/pkcs7/pk7_doit.c
crypto/x509/x509.h

index c3f6a1a..7459f7b 100644 (file)
@@ -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 */
index c1ca8b2..72240a0 100644 (file)
@@ -344,3 +344,5 @@ static void ASN1_TYPE_component_free(ASN1_TYPE *a)
                }
        }
 
+IMPLEMENT_STACK_OF(ASN1_TYPE)
+IMPLEMENT_ASN1_SET_OF(ASN1_TYPE)
index 7ce7eb3..5050d57 100644 (file)
@@ -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);
index b836844..bdd7494 100644 (file)
@@ -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;
                                }
index 78a7990..274c9a9 100644 (file)
@@ -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);
index 0bd91e3..e096023 100644 (file)
@@ -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;
                }
        }
index cb0bd95..67085e3 100644 (file)
@@ -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;
                        }
                }
index 5c2894b..02f7b2f 100644 (file)
@@ -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;