Support for otherName in GeneralName.
[openssl.git] / crypto / x509v3 / x509v3.h
index 7915307ce1d833a8b9323555be5aa00a934cff4c..82c5ca78caa41cb74914ac0484664db7a78ab850 100644 (file)
@@ -136,12 +136,6 @@ typedef struct v3_ext_ctx X509V3_CTX;
 #define X509V3_EXT_CTX_DEP     0x2
 #define X509V3_EXT_MULTILINE   0x4
 
-typedef struct BIT_STRING_BITNAME_st {
-int bitnum;
-const char *lname;
-const char *sname;
-} BIT_STRING_BITNAME;
-
 typedef BIT_STRING_BITNAME ENUMERATED_NAMES;
 
 typedef struct BASIC_CONSTRAINTS_st {
@@ -155,6 +149,11 @@ ASN1_GENERALIZEDTIME *notBefore;
 ASN1_GENERALIZEDTIME *notAfter;
 } PKEY_USAGE_PERIOD;
 
+typedef struct otherName_st {
+ASN1_OBJECT *type_id;
+ASN1_TYPE *value;
+} OTHERNAME;
+
 typedef struct GENERAL_NAME_st {
 
 #define GEN_OTHERNAME  (0|V_ASN1_CONTEXT_SPECIFIC)
@@ -174,7 +173,8 @@ union {
        ASN1_OCTET_STRING *ip; /* iPAddress */
        X509_NAME *dirn;                /* dirn */
        ASN1_OBJECT *rid; /* registeredID */
-       ASN1_TYPE *other; /* otherName, ediPartyName, x400Address */
+       OTHERNAME *otherName; /* otherName */
+       ASN1_TYPE *other; /* ediPartyName, x400Address */
 } d;
 } GENERAL_NAME;
 
@@ -317,11 +317,15 @@ DECLARE_ASN1_SET_OF(POLICYINFO)
 #define XKU_CODE_SIGN          0x8
 #define XKU_SGC                        0x10
 
+#define X509_PURPOSE_DYNAMIC   0x1
+#define X509_PURPOSE_DYNAMIC_NAME      0x2
+
 typedef struct x509_purpose_st {
-int purpose_id;
-int (*check_purpose)(struct x509_purpose_st *, X509 *, int);
-char *purpose_name;
-void *usr_data;
+       int purpose_id;
+       int purpose_flags;
+       int (*check_purpose)(struct x509_purpose_st *, X509 *, int);
+       char *purpose_name;
+       /* void *usr_data; */ /* if we enable this it needs a free function */
 } X509_PURPOSE;
 
 DECLARE_STACK_OF(X509_PURPOSE)
@@ -378,6 +382,11 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method,
 STACK_OF(GENERAL_NAME) *v2i_GENERAL_NAMES(X509V3_EXT_METHOD *method,
                                X509V3_CTX *ctx, STACK_OF(CONF_VALUE) *nval);
 
+int i2d_OTHERNAME(OTHERNAME *a, unsigned char **pp);
+OTHERNAME *OTHERNAME_new(void);
+OTHERNAME *d2i_OTHERNAME(OTHERNAME **a, unsigned char **pp, long length);
+void OTHERNAME_free(OTHERNAME *a);
+
 char *i2s_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *ia5);
 ASN1_OCTET_STRING *s2i_ASN1_OCTET_STRING(X509V3_EXT_METHOD *method, X509V3_CTX *ctx, char *str);
 
@@ -492,6 +501,7 @@ int X509V3_EXT_print_fp(FILE *out, X509_EXTENSION *ext, int flag, int indent);
 
 int X509_check_purpose(X509 *x, int id, int ca);
 int X509_PURPOSE_add(X509_PURPOSE *xp);
+void X509_PURPOSE_cleanup(void);
 void X509_PURPOSE_add_standard(void);
 int X509_PURPOSE_enum(int (*efunc)(X509_PURPOSE *, void *), void *usr);
 int X509_PURPOSE_get_id(X509_PURPOSE *);
@@ -542,6 +552,7 @@ char * X509_PURPOSE_get_name(X509_PURPOSE *);
 #define X509V3_F_X509V3_EXT_I2D                                 136
 #define X509V3_F_X509V3_GET_VALUE_BOOL                  110
 #define X509V3_F_X509V3_PARSE_LIST                      109
+#define X509V3_F_X509_PURPOSE_ADD                       137
 
 /* Reason codes. */
 #define X509V3_R_BAD_IP_ADDRESS                                 118