14969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin/* Copyright (c) 2016, Google Inc. 24969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * 34969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * Permission to use, copy, modify, and/or distribute this software for any 44969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * purpose with or without fee is hereby granted, provided that the above 54969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * copyright notice and this permission notice appear in all copies. 64969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * 74969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 84969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 94969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 104969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 114969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 124969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 134969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ 144969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 158ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan#include <gtest/gtest.h> 164969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 17c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin#include <openssl/asn1.h> 184969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin#include <openssl/bytestring.h> 194969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin#include <openssl/crypto.h> 204969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin#include <openssl/obj.h> 214969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 2269939df2891f62f7f00ff2ac275f1cd81a67454cRobert Sloan#include "../internal.h" 2369939df2891f62f7f00ff2ac275f1cd81a67454cRobert Sloan 244969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 258ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert SloanTEST(ObjTest, TestBasic) { 264969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin static const int kNID = NID_sha256WithRSAEncryption; 274969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin static const char kShortName[] = "RSA-SHA256"; 284969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin static const char kLongName[] = "sha256WithRSAEncryption"; 294969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin static const char kText[] = "1.2.840.113549.1.1.11"; 304969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin static const uint8_t kDER[] = { 314969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 324969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin }; 334969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 344969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin CBS cbs; 354969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin CBS_init(&cbs, kDER, sizeof(kDER)); 368ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(kNID, OBJ_cbs2nid(&cbs)); 378ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(kNID, OBJ_sn2nid(kShortName)); 388ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(kNID, OBJ_ln2nid(kLongName)); 398ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(kNID, OBJ_txt2nid(kShortName)); 408ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(kNID, OBJ_txt2nid(kLongName)); 418ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(kNID, OBJ_txt2nid(kText)); 424969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 438ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_STREQ(kShortName, OBJ_nid2sn(kNID)); 448ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_STREQ(kLongName, OBJ_nid2ln(kNID)); 454969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 468ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(NID_undef, OBJ_sn2nid("this is not an OID")); 478ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(NID_undef, OBJ_ln2nid("this is not an OID")); 488ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(NID_undef, OBJ_txt2nid("this is not an OID")); 494969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 504969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin CBS_init(&cbs, NULL, 0); 518ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(NID_undef, OBJ_cbs2nid(&cbs)); 524969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 534969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin // 1.2.840.113554.4.1.72585.2 (https://davidben.net/oid). 544969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin static const uint8_t kUnknownDER[] = { 554969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7, 0x09, 0x02, 564969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin }; 574969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin CBS_init(&cbs, kUnknownDER, sizeof(kUnknownDER)); 588ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(NID_undef, OBJ_cbs2nid(&cbs)); 594969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin} 604969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 618ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert SloanTEST(ObjTest, TestSignatureAlgorithms) { 624969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin int digest_nid, pkey_nid; 638ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_TRUE(OBJ_find_sigid_algs(NID_sha256WithRSAEncryption, &digest_nid, 648ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan &pkey_nid)); 658ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(digest_nid, NID_sha256); 668ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(pkey_nid, NID_rsaEncryption); 674969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 688ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_FALSE(OBJ_find_sigid_algs(NID_sha256, &digest_nid, &pkey_nid)); 694969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 704969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin int sign_nid; 718ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_TRUE(OBJ_find_sigid_by_algs(&sign_nid, NID_sha256, NID_rsaEncryption)); 728ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(sign_nid, NID_sha256WithRSAEncryption); 738ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_FALSE(OBJ_find_sigid_by_algs(&sign_nid, NID_dsa, NID_rsaEncryption)); 744969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin} 754969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin 76c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjaminstatic bool ExpectObj2Txt(const uint8_t *der, size_t der_len, 77c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin bool always_return_oid, const char *expected) { 78c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin ASN1_OBJECT obj; 7969939df2891f62f7f00ff2ac275f1cd81a67454cRobert Sloan OPENSSL_memset(&obj, 0, sizeof(obj)); 80c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin obj.data = der; 81c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin obj.length = static_cast<int>(der_len); 82c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 83c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin int expected_len = static_cast<int>(strlen(expected)); 84c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 85c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin int len = OBJ_obj2txt(nullptr, 0, &obj, always_return_oid); 86c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin if (len != expected_len) { 87c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin fprintf(stderr, 88c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin "OBJ_obj2txt of %s with out_len = 0 returned %d, wanted %d.\n", 89c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin expected, len, expected_len); 90c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin return false; 91c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin } 92c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 93c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin char short_buf[1]; 9469939df2891f62f7f00ff2ac275f1cd81a67454cRobert Sloan OPENSSL_memset(short_buf, 0xff, sizeof(short_buf)); 95c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin len = OBJ_obj2txt(short_buf, sizeof(short_buf), &obj, always_return_oid); 96c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin if (len != expected_len) { 97c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin fprintf(stderr, 98c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin "OBJ_obj2txt of %s with out_len = 1 returned %d, wanted %d.\n", 99c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin expected, len, expected_len); 100c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin return false; 101c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin } 102c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 10369939df2891f62f7f00ff2ac275f1cd81a67454cRobert Sloan if (OPENSSL_memchr(short_buf, '\0', sizeof(short_buf)) == nullptr) { 104c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin fprintf(stderr, 105c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin "OBJ_obj2txt of %s with out_len = 1 did not NUL-terminate the " 106c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin "output.\n", 107c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin expected); 108c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin return false; 109c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin } 110c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 111c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin char buf[256]; 112c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin len = OBJ_obj2txt(buf, sizeof(buf), &obj, always_return_oid); 113c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin if (len != expected_len) { 114c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin fprintf(stderr, 115c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin "OBJ_obj2txt of %s with out_len = 256 returned %d, wanted %d.\n", 116c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin expected, len, expected_len); 117c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin return false; 118c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin } 119c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 120c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin if (strcmp(buf, expected) != 0) { 121c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin fprintf(stderr, "OBJ_obj2txt returned \"%s\"; wanted \"%s\".\n", buf, 122c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin expected); 123c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin return false; 124c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin } 125c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 126c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin return true; 127c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin} 128c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 1298ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert SloanTEST(ObjTest, TestObj2Txt) { 130c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // kSHA256WithRSAEncryption is the DER representation of 131c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // 1.2.840.113549.1.1.11, id-sha256WithRSAEncryption. 132c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin static const uint8_t kSHA256WithRSAEncryption[] = { 133c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b, 134c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin }; 135c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 136c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // kBasicConstraints is the DER representation of 2.5.29.19, 137c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // id-basicConstraints. 138c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin static const uint8_t kBasicConstraints[] = { 139c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 0x55, 0x1d, 0x13, 140c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin }; 141c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 142c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // kTestOID is the DER representation of 1.2.840.113554.4.1.72585.0, 143c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // from https://davidben.net/oid. 144c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin static const uint8_t kTestOID[] = { 145c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7, 0x09, 0x00, 146c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin }; 147c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 1488ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_TRUE( 1498ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ExpectObj2Txt(kSHA256WithRSAEncryption, sizeof(kSHA256WithRSAEncryption), 1508ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan true /* don't return name */, "1.2.840.113549.1.1.11")); 1518ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_TRUE( 1528ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ExpectObj2Txt(kSHA256WithRSAEncryption, sizeof(kSHA256WithRSAEncryption), 1538ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan false /* return name */, "sha256WithRSAEncryption")); 1548ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_TRUE(ExpectObj2Txt(kBasicConstraints, sizeof(kBasicConstraints), 1558ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan true /* don't return name */, "2.5.29.19")); 1568ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_TRUE(ExpectObj2Txt(kBasicConstraints, sizeof(kBasicConstraints), 1578ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan false /* return name */, 1588ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan "X509v3 Basic Constraints")); 1598ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_TRUE(ExpectObj2Txt(kTestOID, sizeof(kTestOID), 1608ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan true /* don't return name */, 1618ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan "1.2.840.113554.4.1.72585.0")); 1628ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_TRUE(ExpectObj2Txt(kTestOID, sizeof(kTestOID), false /* return name */, 1638ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan "1.2.840.113554.4.1.72585.0")); 1648ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan // Python depends on the empty OID successfully encoding as the empty 1658ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan // string. 1668ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_TRUE(ExpectObj2Txt(nullptr, 0, false /* return name */, "")); 1678ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_TRUE(ExpectObj2Txt(nullptr, 0, true /* don't return name */, "")); 168c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 169c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin ASN1_OBJECT obj; 17069939df2891f62f7f00ff2ac275f1cd81a67454cRobert Sloan OPENSSL_memset(&obj, 0, sizeof(obj)); 171c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 172c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // kNonMinimalOID is kBasicConstraints with the final component non-minimally 173c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // encoded. 174c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin static const uint8_t kNonMinimalOID[] = { 175c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 0x55, 0x1d, 0x80, 0x13, 176c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin }; 177c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin obj.data = kNonMinimalOID; 178c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin obj.length = sizeof(kNonMinimalOID); 1798ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(-1, OBJ_obj2txt(NULL, 0, &obj, 0)); 180c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 181c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // kOverflowOID is the DER representation of 182c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // 1.2.840.113554.4.1.72585.18446744073709551616. (The final value is 2^64.) 183c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin static const uint8_t kOverflowOID[] = { 184c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84, 0xb7, 0x09, 185c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 0x82, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 186c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin }; 187c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin obj.data = kOverflowOID; 188c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin obj.length = sizeof(kOverflowOID); 1898ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(-1, OBJ_obj2txt(NULL, 0, &obj, 0)); 190c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 191c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // kInvalidOID is a mis-encoded version of kBasicConstraints with the final 192c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin // octet having the high bit set. 193c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin static const uint8_t kInvalidOID[] = { 194c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin 0x55, 0x1d, 0x93, 195c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin }; 196c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin obj.data = kInvalidOID; 197c895d6b1c580258e72e1ed3fcc86d38970ded9e1David Benjamin obj.length = sizeof(kInvalidOID); 1988ff035535f7cf2903f02bbe94d2fa10b7ab855f1Robert Sloan ASSERT_EQ(-1, OBJ_obj2txt(NULL, 0, &obj, 0)); 1994969cc9b0ab2905ec478277f50ed3849b37a6c6bDavid Benjamin} 200