Merge from the ASN1 branch of new ASN1 code
[openssl.git] / crypto / x509v3 / v3_cpols.c
index 8203ed7571a77f8f2161826d08f934e7a325f77a..47e08c8fb8f19ccaa2451d5bd8ffcb67631473c2 100644 (file)
@@ -60,7 +60,7 @@
 #include "cryptlib.h"
 #include <openssl/conf.h>
 #include <openssl/asn1.h>
-#include <openssl/asn1_mac.h>
+#include <openssl/asn1t.h>
 #include <openssl/x509v3.h>
 
 /* Certificate policies extension support: this one is a bit complex... */
@@ -88,6 +88,46 @@ NULL, NULL,
 NULL
 };
 
+ASN1_ITEM_TEMPLATE(CERTIFICATEPOLICIES) = 
+       ASN1_EX_TEMPLATE_TYPE(ASN1_TFLG_SEQUENCE_OF, 0, CERTIFICATEPOLICIES, POLICYINFO)
+ASN1_ITEM_TEMPLATE_END(CERTIFICATEPOLICIES);
+
+IMPLEMENT_ASN1_FUNCTIONS(CERTIFICATEPOLICIES)
+
+ASN1_SEQUENCE(POLICYINFO) = {
+       ASN1_SIMPLE(POLICYINFO, policyid, ASN1_OBJECT),
+       ASN1_SEQUENCE_OF_OPT(POLICYINFO, qualifiers, POLICYQUALINFO)
+} ASN1_SEQUENCE_END(POLICYINFO);
+
+IMPLEMENT_ASN1_FUNCTIONS(POLICYINFO)
+
+ASN1_ADB_TEMPLATE(policydefault) = ASN1_SIMPLE(POLICYQUALINFO, d.other, ASN1_ANY);
+
+ASN1_ADB(POLICYQUALINFO) = {
+       ADB_ENTRY(NID_id_qt_cps, ASN1_SIMPLE(POLICYQUALINFO, d.cpsuri, ASN1_IA5STRING)),
+       ADB_ENTRY(NID_id_qt_unotice, ASN1_SIMPLE(POLICYQUALINFO, d.usernotice, USERNOTICE))
+} ASN1_ADB_END(POLICYQUALINFO, 0, pqualid, 0, &policydefault_tt, NULL);
+
+ASN1_SEQUENCE(POLICYQUALINFO) = {
+       ASN1_SIMPLE(POLICYQUALINFO, pqualid, ASN1_OBJECT),
+       ASN1_ADB_OBJECT(POLICYQUALINFO)
+} ASN1_SEQUENCE_END(POLICYQUALINFO);
+
+IMPLEMENT_ASN1_FUNCTIONS(POLICYQUALINFO)
+
+ASN1_SEQUENCE(USERNOTICE) = {
+       ASN1_OPT(USERNOTICE, noticeref, NOTICEREF),
+       ASN1_OPT(USERNOTICE, exptext, DISPLAYTEXT)
+} ASN1_SEQUENCE_END(USERNOTICE);
+
+IMPLEMENT_ASN1_FUNCTIONS(USERNOTICE)
+
+ASN1_SEQUENCE(NOTICEREF) = {
+       ASN1_SIMPLE(NOTICEREF, organization, DISPLAYTEXT),
+       ASN1_SEQUENCE_OF(NOTICEREF, noticenos, ASN1_INTEGER)
+} ASN1_SEQUENCE_END(NOTICEREF);
+
+IMPLEMENT_ASN1_FUNCTIONS(NOTICEREF)
 
 static STACK_OF(POLICYINFO) *r2i_certpol(X509V3_EXT_METHOD *method,
                X509V3_CTX *ctx, char *value)
@@ -327,83 +367,6 @@ static int i2r_certpol(X509V3_EXT_METHOD *method, STACK_OF(POLICYINFO) *pol,
        return 1;
 }
 
-
-int i2d_CERTIFICATEPOLICIES(STACK_OF(POLICYINFO) *a, unsigned char **pp)
-{
-
-return i2d_ASN1_SET_OF_POLICYINFO(a, pp, i2d_POLICYINFO, V_ASN1_SEQUENCE,
-                                                 V_ASN1_UNIVERSAL, IS_SEQUENCE);}
-
-STACK_OF(POLICYINFO) *CERTIFICATEPOLICIES_new(void)
-{
-       return sk_POLICYINFO_new_null();
-}
-
-void CERTIFICATEPOLICIES_free(STACK_OF(POLICYINFO) *a)
-{
-       sk_POLICYINFO_pop_free(a, POLICYINFO_free);
-}
-
-STACK_OF(POLICYINFO) *d2i_CERTIFICATEPOLICIES(STACK_OF(POLICYINFO) **a,
-               unsigned char **pp,long length)
-{
-return d2i_ASN1_SET_OF_POLICYINFO(a, pp, length, d2i_POLICYINFO,
-                         POLICYINFO_free, V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL);
-
-}
-
-IMPLEMENT_STACK_OF(POLICYINFO)
-IMPLEMENT_ASN1_SET_OF(POLICYINFO)
-
-int i2d_POLICYINFO(POLICYINFO *a, unsigned char **pp)
-{
-       M_ASN1_I2D_vars(a);
-
-       M_ASN1_I2D_len (a->policyid, i2d_ASN1_OBJECT);
-       M_ASN1_I2D_len_SEQUENCE_type(POLICYQUALINFO, a->qualifiers,
-                                                        i2d_POLICYQUALINFO);
-
-       M_ASN1_I2D_seq_total();
-
-       M_ASN1_I2D_put (a->policyid, i2d_ASN1_OBJECT);
-       M_ASN1_I2D_put_SEQUENCE_type(POLICYQUALINFO, a->qualifiers,
-                                                        i2d_POLICYQUALINFO);
-
-       M_ASN1_I2D_finish();
-}
-
-POLICYINFO *POLICYINFO_new(void)
-{
-       POLICYINFO *ret=NULL;
-       ASN1_CTX c;
-       M_ASN1_New_Malloc(ret, POLICYINFO);
-       ret->policyid = NULL;
-       ret->qualifiers = NULL;
-       return (ret);
-       M_ASN1_New_Error(ASN1_F_POLICYINFO_NEW);
-}
-
-POLICYINFO *d2i_POLICYINFO(POLICYINFO **a, unsigned char **pp,long length)
-{
-       M_ASN1_D2I_vars(a,POLICYINFO *,POLICYINFO_new);
-       M_ASN1_D2I_Init();
-       M_ASN1_D2I_start_sequence();
-       M_ASN1_D2I_get(ret->policyid, d2i_ASN1_OBJECT);
-       if(!M_ASN1_D2I_end_sequence()) {
-               M_ASN1_D2I_get_seq_type (POLICYQUALINFO, ret->qualifiers,
-                                d2i_POLICYQUALINFO, POLICYQUALINFO_free);
-       }
-       M_ASN1_D2I_Finish(a, POLICYINFO_free, ASN1_F_D2I_POLICYINFO);
-}
-
-void POLICYINFO_free(POLICYINFO *a)
-{
-       if (a == NULL) return;
-       ASN1_OBJECT_free(a->policyid);
-       sk_POLICYQUALINFO_pop_free(a->qualifiers, POLICYQUALINFO_free);
-       OPENSSL_free (a);
-}
-
 static void print_qualifiers(BIO *out, STACK_OF(POLICYQUALINFO) *quals,
                int indent)
 {
@@ -459,202 +422,4 @@ static void print_notice(BIO *out, USERNOTICE *notice, int indent)
                BIO_printf(out, "%*sExplicit Text: %s\n", indent, "",
                                                         notice->exptext->data);
 }
-               
-       
-
-int i2d_POLICYQUALINFO(POLICYQUALINFO *a, unsigned char **pp)
-{
-       M_ASN1_I2D_vars(a);
-
-       M_ASN1_I2D_len (a->pqualid, i2d_ASN1_OBJECT);
-       switch(OBJ_obj2nid(a->pqualid)) {
-               case NID_id_qt_cps:
-               M_ASN1_I2D_len(a->d.cpsuri, i2d_ASN1_IA5STRING);
-               break;
-
-               case NID_id_qt_unotice:
-               M_ASN1_I2D_len(a->d.usernotice, i2d_USERNOTICE);
-               break;
-
-               default:
-               M_ASN1_I2D_len(a->d.other, i2d_ASN1_TYPE);
-               break;
-       }
-
-       M_ASN1_I2D_seq_total();
-
-       M_ASN1_I2D_put (a->pqualid, i2d_ASN1_OBJECT);
-       switch(OBJ_obj2nid(a->pqualid)) {
-               case NID_id_qt_cps:
-               M_ASN1_I2D_put(a->d.cpsuri, i2d_ASN1_IA5STRING);
-               break;
-
-               case NID_id_qt_unotice:
-               M_ASN1_I2D_put(a->d.usernotice, i2d_USERNOTICE);
-               break;
-
-               default:
-               M_ASN1_I2D_put(a->d.other, i2d_ASN1_TYPE);
-               break;
-       }
-
-       M_ASN1_I2D_finish();
-}
-
-POLICYQUALINFO *POLICYQUALINFO_new(void)
-{
-       POLICYQUALINFO *ret=NULL;
-       ASN1_CTX c;
-       M_ASN1_New_Malloc(ret, POLICYQUALINFO);
-       ret->pqualid = NULL;
-       ret->d.other = NULL;
-       return (ret);
-       M_ASN1_New_Error(ASN1_F_POLICYQUALINFO_NEW);
-}
-
-POLICYQUALINFO *d2i_POLICYQUALINFO(POLICYQUALINFO **a, unsigned char **pp,
-               long length)
-{
-       M_ASN1_D2I_vars(a,POLICYQUALINFO *,POLICYQUALINFO_new);
-       M_ASN1_D2I_Init();
-       M_ASN1_D2I_start_sequence();
-       M_ASN1_D2I_get (ret->pqualid, d2i_ASN1_OBJECT);
-       switch(OBJ_obj2nid(ret->pqualid)) {
-               case NID_id_qt_cps:
-               M_ASN1_D2I_get(ret->d.cpsuri, d2i_ASN1_IA5STRING);
-               break;
-
-               case NID_id_qt_unotice:
-               M_ASN1_D2I_get(ret->d.usernotice, d2i_USERNOTICE);
-               break;
-
-               default:
-               M_ASN1_D2I_get(ret->d.other, d2i_ASN1_TYPE);
-               break;
-       }
-       M_ASN1_D2I_Finish(a, POLICYQUALINFO_free, ASN1_F_D2I_POLICYQUALINFO);
-}
-
-void POLICYQUALINFO_free(POLICYQUALINFO *a)
-{
-       if (a == NULL) return;
-       switch(OBJ_obj2nid(a->pqualid)) {
-               case NID_id_qt_cps:
-               M_ASN1_IA5STRING_free(a->d.cpsuri);
-               break;
-
-               case NID_id_qt_unotice:
-               USERNOTICE_free(a->d.usernotice);
-               break;
-
-               default:
-               ASN1_TYPE_free(a->d.other);
-               break;
-       }
-       
-       ASN1_OBJECT_free(a->pqualid);
-       OPENSSL_free (a);
-}
-
-int i2d_USERNOTICE(USERNOTICE *a, unsigned char **pp)
-{
-       M_ASN1_I2D_vars(a);
-
-       M_ASN1_I2D_len (a->noticeref, i2d_NOTICEREF);
-       M_ASN1_I2D_len (a->exptext, i2d_DISPLAYTEXT);
-
-       M_ASN1_I2D_seq_total();
-
-       M_ASN1_I2D_put (a->noticeref, i2d_NOTICEREF);
-       M_ASN1_I2D_put (a->exptext, i2d_DISPLAYTEXT);
-
-       M_ASN1_I2D_finish();
-}
-
-USERNOTICE *USERNOTICE_new(void)
-{
-       USERNOTICE *ret=NULL;
-       ASN1_CTX c;
-       M_ASN1_New_Malloc(ret, USERNOTICE);
-       ret->noticeref = NULL;
-       ret->exptext = NULL;
-       return (ret);
-       M_ASN1_New_Error(ASN1_F_USERNOTICE_NEW);
-}
-
-USERNOTICE *d2i_USERNOTICE(USERNOTICE **a, unsigned char **pp,long length)
-{
-       M_ASN1_D2I_vars(a,USERNOTICE *,USERNOTICE_new);
-       M_ASN1_D2I_Init();
-       M_ASN1_D2I_start_sequence();
-       M_ASN1_D2I_get_opt(ret->noticeref, d2i_NOTICEREF, V_ASN1_SEQUENCE);
-       if (!M_ASN1_D2I_end_sequence()) {
-               M_ASN1_D2I_get(ret->exptext, d2i_DISPLAYTEXT);
-       }
-       M_ASN1_D2I_Finish(a, USERNOTICE_free, ASN1_F_D2I_USERNOTICE);
-}
-
-void USERNOTICE_free(USERNOTICE *a)
-{
-       if (a == NULL) return;
-       NOTICEREF_free(a->noticeref);
-       M_DISPLAYTEXT_free(a->exptext);
-       OPENSSL_free (a);
-}
-
-int i2d_NOTICEREF(NOTICEREF *a, unsigned char **pp)
-{
-       M_ASN1_I2D_vars(a);
-
-       M_ASN1_I2D_len (a->organization, i2d_DISPLAYTEXT);
-       M_ASN1_I2D_len_SEQUENCE_type(ASN1_INTEGER, a->noticenos,
-                                    i2d_ASN1_INTEGER);
-
-       M_ASN1_I2D_seq_total();
-
-       M_ASN1_I2D_put (a->organization, i2d_DISPLAYTEXT);
-       M_ASN1_I2D_put_SEQUENCE_type(ASN1_INTEGER, a->noticenos,
-                                    i2d_ASN1_INTEGER);
-
-       M_ASN1_I2D_finish();
-}
-
-NOTICEREF *NOTICEREF_new(void)
-{
-       NOTICEREF *ret=NULL;
-       ASN1_CTX c;
-       M_ASN1_New_Malloc(ret, NOTICEREF);
-       ret->organization = NULL;
-       ret->noticenos = NULL;
-       return (ret);
-       M_ASN1_New_Error(ASN1_F_NOTICEREF_NEW);
-}
-
-NOTICEREF *d2i_NOTICEREF(NOTICEREF **a, unsigned char **pp,long length)
-{
-       M_ASN1_D2I_vars(a,NOTICEREF *,NOTICEREF_new);
-       M_ASN1_D2I_Init();
-       M_ASN1_D2I_start_sequence();
-       /* This is to cope with some broken encodings that use IA5STRING for
-         * the organization field
-        */
-       M_ASN1_D2I_get_opt(ret->organization, d2i_ASN1_IA5STRING,
-                                                        V_ASN1_IA5STRING);
-       if(!ret->organization) {
-                M_ASN1_D2I_get(ret->organization, d2i_DISPLAYTEXT);
-       }
-       M_ASN1_D2I_get_seq_type(ASN1_INTEGER, ret->noticenos, d2i_ASN1_INTEGER,
-                               ASN1_STRING_free);
-       M_ASN1_D2I_Finish(a, NOTICEREF_free, ASN1_F_D2I_NOTICEREF);
-}
-
-void NOTICEREF_free(NOTICEREF *a)
-{
-       if (a == NULL) return;
-       M_DISPLAYTEXT_free(a->organization);
-       sk_ASN1_INTEGER_pop_free(a->noticenos, ASN1_STRING_free);
-       OPENSSL_free (a);
-}
 
-IMPLEMENT_STACK_OF(POLICYQUALINFO)
-IMPLEMENT_ASN1_SET_OF(POLICYQUALINFO)