update master-with-bazel from master branch
This commit is contained in:
@@ -862,12 +862,28 @@ TEST(CBSTest, ASN1Uint64) {
|
||||
EXPECT_EQ(0, is_negative);
|
||||
EXPECT_TRUE(CBS_is_unsigned_asn1_integer(&child));
|
||||
|
||||
bssl::ScopedCBB cbb;
|
||||
ASSERT_TRUE(CBB_init(cbb.get(), 0));
|
||||
ASSERT_TRUE(CBB_add_asn1_uint64(cbb.get(), test.value));
|
||||
ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
|
||||
bssl::UniquePtr<uint8_t> scoper(out);
|
||||
EXPECT_EQ(Bytes(test.encoding, test.encoding_len), Bytes(out, len));
|
||||
{
|
||||
bssl::ScopedCBB cbb;
|
||||
ASSERT_TRUE(CBB_init(cbb.get(), 0));
|
||||
ASSERT_TRUE(CBB_add_asn1_uint64(cbb.get(), test.value));
|
||||
ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
|
||||
bssl::UniquePtr<uint8_t> scoper(out);
|
||||
EXPECT_EQ(Bytes(test.encoding, test.encoding_len), Bytes(out, len));
|
||||
}
|
||||
|
||||
{
|
||||
// Overwrite the tag.
|
||||
bssl::ScopedCBB cbb;
|
||||
ASSERT_TRUE(CBB_init(cbb.get(), 0));
|
||||
ASSERT_TRUE(CBB_add_asn1_uint64_with_tag(cbb.get(), test.value,
|
||||
CBS_ASN1_CONTEXT_SPECIFIC | 1));
|
||||
ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
|
||||
bssl::UniquePtr<uint8_t> scoper(out);
|
||||
std::vector<uint8_t> expected(test.encoding,
|
||||
test.encoding + test.encoding_len);
|
||||
expected[0] = 0x81;
|
||||
EXPECT_EQ(Bytes(expected), Bytes(out, len));
|
||||
}
|
||||
}
|
||||
|
||||
for (const ASN1InvalidUint64Test &test : kASN1InvalidUint64Tests) {
|
||||
@@ -952,12 +968,28 @@ TEST(CBSTest, ASN1Int64) {
|
||||
EXPECT_EQ(test.value < 0, !!is_negative);
|
||||
EXPECT_EQ(test.value >= 0, !!CBS_is_unsigned_asn1_integer(&child));
|
||||
|
||||
bssl::ScopedCBB cbb;
|
||||
ASSERT_TRUE(CBB_init(cbb.get(), 0));
|
||||
ASSERT_TRUE(CBB_add_asn1_int64(cbb.get(), test.value));
|
||||
ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
|
||||
bssl::UniquePtr<uint8_t> scoper(out);
|
||||
EXPECT_EQ(Bytes(test.encoding, test.encoding_len), Bytes(out, len));
|
||||
{
|
||||
bssl::ScopedCBB cbb;
|
||||
ASSERT_TRUE(CBB_init(cbb.get(), 0));
|
||||
ASSERT_TRUE(CBB_add_asn1_int64(cbb.get(), test.value));
|
||||
ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
|
||||
bssl::UniquePtr<uint8_t> scoper(out);
|
||||
EXPECT_EQ(Bytes(test.encoding, test.encoding_len), Bytes(out, len));
|
||||
}
|
||||
|
||||
{
|
||||
// Overwrite the tag.
|
||||
bssl::ScopedCBB cbb;
|
||||
ASSERT_TRUE(CBB_init(cbb.get(), 0));
|
||||
ASSERT_TRUE(CBB_add_asn1_int64_with_tag(cbb.get(), test.value,
|
||||
CBS_ASN1_CONTEXT_SPECIFIC | 1));
|
||||
ASSERT_TRUE(CBB_finish(cbb.get(), &out, &len));
|
||||
bssl::UniquePtr<uint8_t> scoper(out);
|
||||
std::vector<uint8_t> expected(test.encoding,
|
||||
test.encoding + test.encoding_len);
|
||||
expected[0] = 0x81;
|
||||
EXPECT_EQ(Bytes(expected), Bytes(out, len));
|
||||
}
|
||||
}
|
||||
|
||||
for (const ASN1InvalidInt64Test &test : kASN1InvalidInt64Tests) {
|
||||
|
||||
@@ -503,13 +503,16 @@ void CBB_discard_child(CBB *cbb) {
|
||||
}
|
||||
|
||||
int CBB_add_asn1_uint64(CBB *cbb, uint64_t value) {
|
||||
CBB child;
|
||||
int started = 0;
|
||||
return CBB_add_asn1_uint64_with_tag(cbb, value, CBS_ASN1_INTEGER);
|
||||
}
|
||||
|
||||
if (!CBB_add_asn1(cbb, &child, CBS_ASN1_INTEGER)) {
|
||||
int CBB_add_asn1_uint64_with_tag(CBB *cbb, uint64_t value, unsigned tag) {
|
||||
CBB child;
|
||||
if (!CBB_add_asn1(cbb, &child, tag)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int started = 0;
|
||||
for (size_t i = 0; i < 8; i++) {
|
||||
uint8_t byte = (value >> 8*(7-i)) & 0xff;
|
||||
if (!started) {
|
||||
@@ -538,8 +541,12 @@ int CBB_add_asn1_uint64(CBB *cbb, uint64_t value) {
|
||||
}
|
||||
|
||||
int CBB_add_asn1_int64(CBB *cbb, int64_t value) {
|
||||
return CBB_add_asn1_int64_with_tag(cbb, value, CBS_ASN1_INTEGER);
|
||||
}
|
||||
|
||||
int CBB_add_asn1_int64_with_tag(CBB *cbb, int64_t value, unsigned tag) {
|
||||
if (value >= 0) {
|
||||
return CBB_add_asn1_uint64(cbb, value);
|
||||
return CBB_add_asn1_uint64_with_tag(cbb, (uint64_t)value, tag);
|
||||
}
|
||||
|
||||
uint8_t bytes[sizeof(int64_t)];
|
||||
@@ -551,7 +558,7 @@ int CBB_add_asn1_int64(CBB *cbb, int64_t value) {
|
||||
}
|
||||
|
||||
CBB child;
|
||||
if (!CBB_add_asn1(cbb, &child, CBS_ASN1_INTEGER)) {
|
||||
if (!CBB_add_asn1(cbb, &child, tag)) {
|
||||
return 0;
|
||||
}
|
||||
for (int i = start; i >= 0; i--) {
|
||||
|
||||
@@ -557,11 +557,23 @@ OPENSSL_EXPORT void CBB_discard_child(CBB *cbb);
|
||||
// error.
|
||||
OPENSSL_EXPORT int CBB_add_asn1_uint64(CBB *cbb, uint64_t value);
|
||||
|
||||
// CBB_add_asn1_uint64_with_tag behaves like |CBB_add_asn1_uint64| but uses
|
||||
// |tag| as the tag instead of INTEGER. This is useful if the INTEGER type uses
|
||||
// implicit tagging.
|
||||
OPENSSL_EXPORT int CBB_add_asn1_uint64_with_tag(CBB *cbb, uint64_t value,
|
||||
unsigned tag);
|
||||
|
||||
// CBB_add_asn1_int64 writes an ASN.1 INTEGER into |cbb| using |CBB_add_asn1|
|
||||
// and writes |value| in its contents. It returns one on success and zero on
|
||||
// error.
|
||||
OPENSSL_EXPORT int CBB_add_asn1_int64(CBB *cbb, int64_t value);
|
||||
|
||||
// CBB_add_asn1_int64_with_tag behaves like |CBB_add_asn1_int64| but uses |tag|
|
||||
// as the tag instead of INTEGER. This is useful if the INTEGER type uses
|
||||
// implicit tagging.
|
||||
OPENSSL_EXPORT int CBB_add_asn1_int64_with_tag(CBB *cbb, int64_t value,
|
||||
unsigned tag);
|
||||
|
||||
// CBB_add_asn1_octet_string writes an ASN.1 OCTET STRING into |cbb| with the
|
||||
// given contents. It returns one on success and zero on error.
|
||||
OPENSSL_EXPORT int CBB_add_asn1_octet_string(CBB *cbb, const uint8_t *data,
|
||||
|
||||
Reference in New Issue
Block a user