embed CRL serial number and signature fields
[openssl.git] / crypto / x509 / x509cset.c
index ca3f6968afd923fc0985a1c58af02b17d2cb06c4..899d4925ae3de3b442d7aaf35e71074eef2b3111 100644 (file)
@@ -69,18 +69,18 @@ int X509_CRL_set_version(X509_CRL *x, long version)
 {
     if (x == NULL)
         return (0);
-    if (x->crl->version == NULL) {
-        if ((x->crl->version = ASN1_INTEGER_new()) == NULL)
+    if (x->crl.version == NULL) {
+        if ((x->crl.version = ASN1_INTEGER_new()) == NULL)
             return (0);
     }
-    return (ASN1_INTEGER_set(x->crl->version, version));
+    return (ASN1_INTEGER_set(x->crl.version, version));
 }
 
 int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name)
 {
-    if ((x == NULL) || (x->crl == NULL))
+    if (x == NULL)
         return (0);
-    return (X509_NAME_set(&x->crl->issuer, name));
+    return (X509_NAME_set(&x->crl.issuer, name));
 }
 
 int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm)
@@ -89,12 +89,12 @@ int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm)
 
     if (x == NULL)
         return (0);
-    in = x->crl->lastUpdate;
+    in = x->crl.lastUpdate;
     if (in != tm) {
         in = ASN1_STRING_dup(tm);
         if (in != NULL) {
-            ASN1_TIME_free(x->crl->lastUpdate);
-            x->crl->lastUpdate = in;
+            ASN1_TIME_free(x->crl.lastUpdate);
+            x->crl.lastUpdate = in;
         }
     }
     return (in != NULL);
@@ -106,12 +106,12 @@ int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm)
 
     if (x == NULL)
         return (0);
-    in = x->crl->nextUpdate;
+    in = x->crl.nextUpdate;
     if (in != tm) {
         in = ASN1_STRING_dup(tm);
         if (in != NULL) {
-            ASN1_TIME_free(x->crl->nextUpdate);
-            x->crl->nextUpdate = in;
+            ASN1_TIME_free(x->crl.nextUpdate);
+            x->crl.nextUpdate = in;
         }
     }
     return (in != NULL);
@@ -124,12 +124,12 @@ int X509_CRL_sort(X509_CRL *c)
     /*
      * sort the data so it will be written in serial number order
      */
-    sk_X509_REVOKED_sort(c->crl->revoked);
-    for (i = 0; i < sk_X509_REVOKED_num(c->crl->revoked); i++) {
-        r = sk_X509_REVOKED_value(c->crl->revoked, i);
+    sk_X509_REVOKED_sort(c->crl.revoked);
+    for (i = 0; i < sk_X509_REVOKED_num(c->crl.revoked); i++) {
+        r = sk_X509_REVOKED_value(c->crl.revoked, i);
         r->sequence = i;
     }
-    c->crl->enc.modified = 1;
+    c->crl.enc.modified = 1;
     return 1;
 }
 
@@ -140,36 +140,51 @@ void X509_CRL_up_ref(X509_CRL *crl)
 
 long X509_CRL_get_version(X509_CRL *crl)
 {
-    return ASN1_INTEGER_get(crl->crl->version);
+    return ASN1_INTEGER_get(crl->crl.version);
 }
 
 ASN1_TIME *X509_CRL_get_lastUpdate(X509_CRL *crl)
 {
-    return crl->crl->lastUpdate;
+    return crl->crl.lastUpdate;
 }
 
 ASN1_TIME *X509_CRL_get_nextUpdate(X509_CRL *crl)
 {
-    return crl->crl->nextUpdate;
+    return crl->crl.nextUpdate;
 }
 
 X509_NAME *X509_CRL_get_issuer(X509_CRL *crl)
 {
-    return crl->crl->issuer;
+    return crl->crl.issuer;
+}
+
+STACK_OF(X509_EXTENSION) *X509_CRL_get0_extensions(X509_CRL *crl)
+{
+    return crl->crl.extensions;
 }
 
 STACK_OF(X509_REVOKED) *X509_CRL_get_REVOKED(X509_CRL *crl)
 {
-    return crl->crl->revoked;
+    return crl->crl.revoked;
 }
 
 void X509_CRL_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg,
-                             const X509_CRL *crl)
+                             X509_CRL *crl)
+{
+    if (psig != NULL)
+        *psig = &crl->signature;
+    if (palg != NULL)
+        *palg = &crl->sig_alg;
+}
+
+int X509_CRL_get_signature_nid(const X509_CRL *crl)
+{
+    return OBJ_obj2nid(crl->sig_alg.algorithm);
+}
+
+ASN1_TIME *X509_REVOKED_get0_revocationDate(X509_REVOKED *x)
 {
-    if (psig)
-        *psig = crl->signature;
-    if (palg)
-        *palg = crl->sig_alg;
+    return x->revocationDate;
 }
 
 int X509_REVOKED_set_revocationDate(X509_REVOKED *x, ASN1_TIME *tm)
@@ -189,19 +204,30 @@ int X509_REVOKED_set_revocationDate(X509_REVOKED *x, ASN1_TIME *tm)
     return (in != NULL);
 }
 
+ASN1_INTEGER *X509_REVOKED_get0_serialNumber(X509_REVOKED *x)
+{
+    return &x->serialNumber;
+}
+
 int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial)
 {
     ASN1_INTEGER *in;
 
     if (x == NULL)
         return (0);
-    in = x->serialNumber;
-    if (in != serial) {
-        in = ASN1_INTEGER_dup(serial);
-        if (in != NULL) {
-            ASN1_INTEGER_free(x->serialNumber);
-            x->serialNumber = in;
-        }
-    }
-    return (in != NULL);
+    in = &x->serialNumber;
+    if (in != serial)
+        return ASN1_STRING_copy(in, serial);
+    return 1;
+}
+
+STACK_OF(X509_EXTENSION) *X509_REVOKED_get0_extensions(X509_REVOKED *r)
+{
+    return r->extensions;
+}
+
+int i2d_re_X509_CRL_tbs(X509_CRL *crl, unsigned char **pp)
+{
+    crl->crl.enc.modified = 1;
+    return i2d_X509_CRL_INFO(&crl->crl, pp);
 }