Define V_ASN1_RELATIVE_OID tag number Hook up ASN.1 tag 13 to existing functions. Bug: 571178555 Change-Id: I7af4e8dd88868dd0b8d02478f36557326a6a6964 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/103928 Reviewed-by: David Benjamin <davidben@google.com> Presubmit-BoringSSL-Verified: boringssl-scoped@luci-project-accounts.iam.gserviceaccount.com <boringssl-scoped@luci-project-accounts.iam.gserviceaccount.com> Commit-Queue: David Benjamin <davidben@google.com> Auto-Submit: Lily Chen <chlily@google.com>
diff --git a/crypto/asn1/a_type.cc b/crypto/asn1/a_type.cc index 4aac69a..35e0534 100644 --- a/crypto/asn1/a_type.cc +++ b/crypto/asn1/a_type.cc
@@ -292,6 +292,12 @@ return 0; } break; + case CBS_ASN1_RELATIVE_OID: + if (!CBS_is_valid_asn1_relative_oid(&body)) { + OPENSSL_PUT_ERROR(ASN1, ASN1_R_INVALID_OBJECT_ENCODING); + return 0; + } + break; case CBS_ASN1_NULL: if (CBS_len(&body) != 0) { OPENSSL_PUT_ERROR(ASN1, ASN1_R_NULL_IS_WRONG_LENGTH);
diff --git a/crypto/asn1/asn1_par.cc b/crypto/asn1/asn1_par.cc index 7767cca..54921d5 100644 --- a/crypto/asn1/asn1_par.cc +++ b/crypto/asn1/asn1_par.cc
@@ -30,7 +30,7 @@ "ENUMERATED", "<ASN1 11>", "UTF8STRING", - "<ASN1 13>", + "RELATIVE-OID", "<ASN1 14>", "<ASN1 15>", "SEQUENCE",
diff --git a/crypto/asn1/asn1_test.cc b/crypto/asn1/asn1_test.cc index 8a1d2ec..aa1e3bd 100644 --- a/crypto/asn1/asn1_test.cc +++ b/crypto/asn1/asn1_test.cc
@@ -647,6 +647,9 @@ // [UNIVERSAL 128] { `00` } // Unknown universal tags are parsed as `V_ASN1_OTHER`. {V_ASN1_OTHER, {0x1f, 0x81, 0x00, 0x01, 0x00}}, + // RELATIVE-OID { 32473.1 } + // RELATIVE-OID has no dedicated `ASN1_TYPE` representation. + {V_ASN1_OTHER, {0x0d, 0x04, 0x81, 0xfd, 0x59, 0x01}}, }; for (const auto &t : kTests) { SCOPED_TRACE(Bytes(t.der)); @@ -710,6 +713,7 @@ {0x26, 0x00}, // [OBJECT IDENTIFIER CONSTRUCTED] {} {0x2a, 0x00}, // [ENUMERATED CONSTRUCTED] {} {0x2c, 0x00}, // [UTF8String CONSTRUCTED] {} + {0x2d, 0x00}, // [RELATIVE-OID CONSTRUCTED] {} {0x3c, 0x00}, // [UniversalString CONSTRUCTED] {} {0x3e, 0x00}, // [BMPString CONSTRUCTED] {} // Supported constructed types should be rejected if primitive. @@ -723,6 +727,9 @@ {0x0a, 0x02, 0x00, 0x00}, // ENUMERATED { `0000` } {0x06, 0x00}, // OBJECT_IDENTIFIER { } {0x06, 0x01, 0xff}, // OBJECT_IDENTIFIER { `ff` } + {0x0d, 0x00}, // RELATIVE-OID { } + {0x0d, 0x01, 0xff}, // RELATIVE-OID { `ff` } + {0x0d, 0x02, 0x80, 0x01}, // RELATIVE-OID { `8001` } {0x03, 0x01, 0xff}, // BIT_STRING { `ff` } {0x05, 0x01, 0xff}, // NULL { `ff` } {0x01, 0x00}, // BOOLEAN {}
diff --git a/include/openssl/asn1.h b/include/openssl/asn1.h index 1dae5f7..f92153d 100644 --- a/include/openssl/asn1.h +++ b/include/openssl/asn1.h
@@ -90,6 +90,7 @@ #define V_ASN1_REAL 9 #define V_ASN1_ENUMERATED 10 #define V_ASN1_UTF8STRING 12 +#define V_ASN1_RELATIVE_OID 13 #define V_ASN1_SEQUENCE 16 #define V_ASN1_SET 17 #define V_ASN1_NUMERICSTRING 18
diff --git a/include/openssl/bytestring.h b/include/openssl/bytestring.h index d1d607c..3a49beb 100644 --- a/include/openssl/bytestring.h +++ b/include/openssl/bytestring.h
@@ -238,6 +238,7 @@ #define CBS_ASN1_OBJECT 0x6u #define CBS_ASN1_ENUMERATED 0xau #define CBS_ASN1_UTF8STRING 0xcu +#define CBS_ASN1_RELATIVE_OID 0xdu #define CBS_ASN1_SEQUENCE (0x10u | CBS_ASN1_CONSTRUCTED) #define CBS_ASN1_SET (0x11u | CBS_ASN1_CONSTRUCTED) #define CBS_ASN1_NUMERICSTRING 0x12u