RFC 3161 compliant time stamp request creation, response generation
[openssl.git] / crypto / x509v3 / v3_genn.c
index 650b510..4dc8361 100644 (file)
@@ -99,3 +99,62 @@ ASN1_ITEM_TEMPLATE(GENERAL_NAMES) =
 ASN1_ITEM_TEMPLATE_END(GENERAL_NAMES)
 
 IMPLEMENT_ASN1_FUNCTIONS(GENERAL_NAMES)
+
+GENERAL_NAME *GENERAL_NAME_dup(GENERAL_NAME *a)
+       {
+       return (GENERAL_NAME *) ASN1_dup((int (*)()) i2d_GENERAL_NAME,
+                                        (char *(*)()) d2i_GENERAL_NAME,
+                                        (char *) a);
+       }
+
+/* Returns 0 if they are equal, != 0 otherwise. */
+int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b)
+       {
+       int result = -1;
+
+       if (!a || !b || a->type != b->type) return -1;
+       switch(a->type)
+               {
+       case GEN_X400:
+       case GEN_EDIPARTY:
+               result = ASN1_TYPE_cmp(a->d.other, b->d.other);
+               break;
+
+       case GEN_OTHERNAME:
+               result = OTHERNAME_cmp(a->d.otherName, b->d.otherName);
+               break;
+
+       case GEN_EMAIL:
+       case GEN_DNS:
+       case GEN_URI:
+               result = ASN1_STRING_cmp(a->d.ia5, b->d.ia5);
+               break;
+
+       case GEN_DIRNAME:
+               result = X509_NAME_cmp(a->d.dirn, b->d.dirn);
+               break;
+
+       case GEN_IPADD:
+               result = ASN1_OCTET_STRING_cmp(a->d.ip, b->d.ip);
+               break;
+       
+       case GEN_RID:
+               result = OBJ_cmp(a->d.rid, b->d.rid);
+               break;
+               }
+       return result;
+       }
+
+/* Returns 0 if they are equal, != 0 otherwise. */
+int OTHERNAME_cmp(OTHERNAME *a, OTHERNAME *b)
+       {
+       int result = -1;
+
+       if (!a || !b) return -1;
+       /* Check their type first. */
+       if ((result = OBJ_cmp(a->type_id, b->type_id)) != 0)
+               return result;
+       /* Check the value. */
+       result = ASN1_TYPE_cmp(a->value, b->value);
+       return result;
+       }