| Index: crypto/signature_verifier_unittest.cc
|
| diff --git a/crypto/signature_verifier_unittest.cc b/crypto/signature_verifier_unittest.cc
|
| index b521bd7bcd295f6b0d8b3f7ef4dc3ecdc81866f9..a661ff7f8ab8ce990cd4ffc5ffe51a84d738e261 100644
|
| --- a/crypto/signature_verifier_unittest.cc
|
| +++ b/crypto/signature_verifier_unittest.cc
|
| @@ -1000,6 +1000,23 @@ static bool DecodeTestInput(const char* in, std::vector<uint8>* out) {
|
| return true;
|
| }
|
|
|
| +// PrependASN1Length prepends an ASN.1 serialized length to the beginning of
|
| +// |out|.
|
| +static void PrependASN1Length(std::vector<uint8>* out, size_t len) {
|
| + if (len < 128) {
|
| + out->insert(out->begin(), static_cast<uint8>(len));
|
| + } else if (len < 256) {
|
| + out->insert(out->begin(), static_cast<uint8>(len));
|
| + out->insert(out->begin(), 0x81);
|
| + } else if (len < 0x10000) {
|
| + out->insert(out->begin(), static_cast<uint8>(len));
|
| + out->insert(out->begin(), static_cast<uint8>(len >> 8));
|
| + out->insert(out->begin(), 0x82);
|
| + } else {
|
| + CHECK(false) << "ASN.1 length not handled: " << len;
|
| + }
|
| +}
|
| +
|
| static bool EncodeRSAPublicKey(const std::vector<uint8>& modulus_n,
|
| const std::vector<uint8>& public_exponent_e,
|
| std::vector<uint8>* public_key_info) {
|
| @@ -1027,37 +1044,28 @@ static bool EncodeRSAPublicKey(const std::vector<uint8>& modulus_n,
|
| public_key_info->insert(public_key_info->begin(),
|
| public_exponent_e.begin(),
|
| public_exponent_e.end());
|
| - uint8 exponent_size = base::checked_cast<uint8>(public_exponent_e.size());
|
| - public_key_info->insert(public_key_info->begin(), exponent_size);
|
| + PrependASN1Length(public_key_info, public_exponent_e.size());
|
| public_key_info->insert(public_key_info->begin(), kIntegerTag);
|
|
|
| // Encode the modulus n as an INTEGER.
|
| public_key_info->insert(public_key_info->begin(),
|
| modulus_n.begin(), modulus_n.end());
|
| - uint16 modulus_size = base::checked_cast<uint16>(modulus_n.size());
|
| + size_t modulus_size = modulus_n.size();
|
| if (modulus_n[0] & 0x80) {
|
| public_key_info->insert(public_key_info->begin(), 0x00);
|
| modulus_size++;
|
| }
|
| - public_key_info->insert(public_key_info->begin(), modulus_size & 0xff);
|
| - public_key_info->insert(public_key_info->begin(), (modulus_size >> 8) & 0xff);
|
| - public_key_info->insert(public_key_info->begin(), 0x82);
|
| + PrependASN1Length(public_key_info, modulus_size);
|
| public_key_info->insert(public_key_info->begin(), kIntegerTag);
|
|
|
| // Encode the RSAPublicKey SEQUENCE.
|
| - uint16 info_size = base::checked_cast<uint16>(public_key_info->size());
|
| - public_key_info->insert(public_key_info->begin(), info_size & 0xff);
|
| - public_key_info->insert(public_key_info->begin(), (info_size >> 8) & 0xff);
|
| - public_key_info->insert(public_key_info->begin(), 0x82);
|
| + PrependASN1Length(public_key_info, public_key_info->size());
|
| public_key_info->insert(public_key_info->begin(), kSequenceTag);
|
|
|
| // Encode the BIT STRING.
|
| // Number of unused bits.
|
| public_key_info->insert(public_key_info->begin(), 0x00);
|
| - info_size = base::checked_cast<uint16>(public_key_info->size());
|
| - public_key_info->insert(public_key_info->begin(), info_size & 0xff);
|
| - public_key_info->insert(public_key_info->begin(), (info_size >> 8) & 0xff);
|
| - public_key_info->insert(public_key_info->begin(), 0x82);
|
| + PrependASN1Length(public_key_info, public_key_info->size());
|
| public_key_info->insert(public_key_info->begin(), kBitStringTag);
|
|
|
| // Encode the AlgorithmIdentifier.
|
| @@ -1071,10 +1079,7 @@ static bool EncodeRSAPublicKey(const std::vector<uint8>& modulus_n,
|
| algorithm, algorithm + sizeof(algorithm));
|
|
|
| // Encode the outermost SEQUENCE.
|
| - info_size = base::checked_cast<uint16>(public_key_info->size());
|
| - public_key_info->insert(public_key_info->begin(), info_size & 0xff);
|
| - public_key_info->insert(public_key_info->begin(), (info_size >> 8) & 0xff);
|
| - public_key_info->insert(public_key_info->begin(), 0x82);
|
| + PrependASN1Length(public_key_info, public_key_info->size());
|
| public_key_info->insert(public_key_info->begin(), kSequenceTag);
|
|
|
| return true;
|
| @@ -1082,6 +1087,7 @@ static bool EncodeRSAPublicKey(const std::vector<uint8>& modulus_n,
|
|
|
| TEST(SignatureVerifierTest, VerifyRSAPSS) {
|
| for (unsigned int i = 0; i < arraysize(pss_test); i++) {
|
| + SCOPED_TRACE(i);
|
| std::vector<uint8> modulus_n;
|
| std::vector<uint8> public_exponent_e;
|
| ASSERT_TRUE(DecodeTestInput(pss_test[i].modulus_n, &modulus_n));
|
| @@ -1092,6 +1098,7 @@ TEST(SignatureVerifierTest, VerifyRSAPSS) {
|
| &public_key_info));
|
|
|
| for (unsigned int j = 0; j < arraysize(pss_test[i].example); j++) {
|
| + SCOPED_TRACE(j);
|
| std::vector<uint8> message;
|
| std::vector<uint8> salt;
|
| std::vector<uint8> signature;
|
|
|