Parse non-v1 SCTs less awkwardly.
authorRob Stradling <rob@comodo.com>
Tue, 25 Feb 2014 10:14:51 +0000 (10:14 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Tue, 25 Feb 2014 13:04:21 +0000 (13:04 +0000)
(cherry picked from commit 19f65ddbab30543415584ae7916e12a3c5249dba)

crypto/x509v3/v3_scts.c

index 32548007d8b68033a00a7dfdebf3617fd3901379..9c560ad483f7ebfbde5cfb59bbda95f34bed9acf 100644 (file)
@@ -141,9 +141,12 @@ static int i2r_scts(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *oct,
 
                BIO_printf(out, "%*sSigned Certificate Timestamp:", indent,
                           "");
+               BIO_printf(out, "\n%*sVersion   : ", indent + 4, "");
 
                if (*data == 0)         /* SCT v1 */
                        {
+                       BIO_printf(out, "v1(0)");
+
                        /* Fixed-length header:
                         *              struct {
                         * (1 byte)       Version sct_version;
@@ -155,9 +158,6 @@ static int i2r_scts(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *oct,
                                return 0;
                        sctlen -= 43;
 
-                       BIO_printf(out, "\n%*sVersion   : v1(0)", indent + 4,
-                                  "");
-
                        BIO_printf(out, "\n%*sLog ID    : ", indent + 4, "");
                        BIO_hex_string(out, indent + 16, 16, data + 1, 32);
 
@@ -195,9 +195,16 @@ static int i2r_scts(X509V3_EXT_METHOD *method, ASN1_OCTET_STRING *oct,
                                return 0;
                        BIO_printf(out, "\n%*s            ", indent + 4, "");
                        BIO_hex_string(out, indent + 16, 16, data, fieldlen);
-                       if (listlen > 0) BIO_printf(out, "\n");
                        data += fieldlen;
                        }
+               else                    /* Unknown version */
+                       {
+                       BIO_printf(out, "unknown\n%*s", indent + 16, "");
+                       BIO_hex_string(out, indent + 16, 16, data, sctlen);
+                       data += sctlen;
+                       }
+
+               if (listlen > 0) BIO_printf(out, "\n");
                }
 
        return 1;