| Index: Source/bindings/v8/SerializedScriptValue.cpp
|
| diff --git a/Source/bindings/v8/SerializedScriptValue.cpp b/Source/bindings/v8/SerializedScriptValue.cpp
|
| index b8e90f69015c0d2bdc38481e399558c547fbc8e9..b6f7dd24893d448c03aed47b5b66f6be81daee15 100644
|
| --- a/Source/bindings/v8/SerializedScriptValue.cpp
|
| +++ b/Source/bindings/v8/SerializedScriptValue.cpp
|
| @@ -221,10 +221,8 @@ enum SerializationTag {
|
| // props = keyLengthBytes:uint32_t, algorithmId:uint32_t
|
| // If subtag=HmacKeyTag:
|
| // props = keyLengthBytes:uint32_t, hashId:uint32_t
|
| - // If subtag=RsaKeyTag:
|
| - // props = algorithmId:uint32_t, type:uint32_t, modulusLengthBits:uint32_t, publicExponentLength:uint32_t, publicExponent:byte[publicExponentLength]
|
| // If subtag=RsaHashedKeyTag:
|
| - // props = <same as for RsaKeyTag>, hashId:uint32_t
|
| + // props = algorithmId:uint32_t, type:uint32_t, modulusLengthBits:uint32_t, publicExponentLength:uint32_t, publicExponent:byte[publicExponentLength], hashId:uint32_t
|
| ObjectReferenceTag = '^', // ref:uint32_t -> reference table[ref]
|
| GenerateFreshObjectTag = 'o', // -> empty object allocated an object ID and pushed onto the open stack (ref)
|
| GenerateFreshSparseArrayTag = 'a', // length:uint32_t -> empty array[length] allocated an object ID and pushed onto the open stack (ref)
|
| @@ -253,7 +251,7 @@ enum ArrayBufferViewSubTag {
|
| enum CryptoKeySubTag {
|
| AesKeyTag = 1,
|
| HmacKeyTag = 2,
|
| - RsaKeyTag = 3,
|
| + // ID 3 was used by RsaKeyTag, while still behind experimental flag.
|
| RsaHashedKeyTag = 4,
|
| // Maximum allowed value is 255
|
| };
|
| @@ -268,7 +266,7 @@ enum CryptoKeyAlgorithmTag {
|
| AesCbcTag = 1,
|
| HmacTag = 2,
|
| RsaSsaPkcs1v1_5Tag = 3,
|
| - RsaEsPkcs1v1_5Tag = 4,
|
| + // ID 4 was used by RsaEs, while still behind experimental flag.
|
| Sha1Tag = 5,
|
| Sha256Tag = 6,
|
| Sha384Tag = 7,
|
| @@ -517,9 +515,8 @@ public:
|
| case blink::WebCryptoKeyAlgorithmParamsTypeHmac:
|
| doWriteHmacKey(key);
|
| break;
|
| - case blink::WebCryptoKeyAlgorithmParamsTypeRsa:
|
| case blink::WebCryptoKeyAlgorithmParamsTypeRsaHashed:
|
| - doWriteRsaKey(key);
|
| + doWriteRsaHashedKey(key);
|
| break;
|
| case blink::WebCryptoKeyAlgorithmParamsTypeNone:
|
| ASSERT_NOT_REACHED();
|
| @@ -730,12 +727,10 @@ private:
|
| doWriteUint32(key.algorithm().aesParams()->lengthBits() / 8);
|
| }
|
|
|
| - void doWriteRsaKey(const blink::WebCryptoKey& key)
|
| + void doWriteRsaHashedKey(const blink::WebCryptoKey& key)
|
| {
|
| - if (key.algorithm().rsaHashedParams())
|
| - append(static_cast<uint8_t>(RsaHashedKeyTag));
|
| - else
|
| - append(static_cast<uint8_t>(RsaKeyTag));
|
| + ASSERT(key.algorithm().rsaHashedParams());
|
| + append(static_cast<uint8_t>(RsaHashedKeyTag));
|
|
|
| doWriteAlgorithmId(key.algorithm().id());
|
|
|
| @@ -750,13 +745,11 @@ private:
|
| ASSERT_NOT_REACHED();
|
| }
|
|
|
| - const blink::WebCryptoRsaKeyAlgorithmParams* params = key.algorithm().rsaParams();
|
| + const blink::WebCryptoRsaHashedKeyAlgorithmParams* params = key.algorithm().rsaHashedParams();
|
| doWriteUint32(params->modulusLengthBits());
|
| doWriteUint32(params->publicExponent().size());
|
| append(params->publicExponent().data(), params->publicExponent().size());
|
| -
|
| - if (key.algorithm().rsaHashedParams())
|
| - doWriteAlgorithmId(key.algorithm().rsaHashedParams()->hash().id());
|
| + doWriteAlgorithmId(key.algorithm().rsaHashedParams()->hash().id());
|
| }
|
|
|
| void doWriteAlgorithmId(blink::WebCryptoAlgorithmId id)
|
| @@ -768,8 +761,6 @@ private:
|
| return doWriteUint32(HmacTag);
|
| case blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5:
|
| return doWriteUint32(RsaSsaPkcs1v1_5Tag);
|
| - case blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5:
|
| - return doWriteUint32(RsaEsPkcs1v1_5Tag);
|
| case blink::WebCryptoAlgorithmIdSha1:
|
| return doWriteUint32(Sha1Tag);
|
| case blink::WebCryptoAlgorithmIdSha256:
|
| @@ -2243,7 +2234,7 @@ private:
|
| return false;
|
|
|
| blink::WebCryptoKeyAlgorithm algorithm;
|
| - blink::WebCryptoKeyType type;
|
| + blink::WebCryptoKeyType type = blink::WebCryptoKeyTypeSecret;
|
|
|
| switch (static_cast<CryptoKeySubTag>(rawKeyType)) {
|
| case AesKeyTag:
|
| @@ -2254,12 +2245,8 @@ private:
|
| if (!doReadHmacKey(algorithm, type))
|
| return false;
|
| break;
|
| - case RsaKeyTag:
|
| - if (!doReadRsaKey(false, algorithm, type))
|
| - return false;
|
| - break;
|
| case RsaHashedKeyTag:
|
| - if (!doReadRsaKey(true, algorithm, type))
|
| + if (!doReadRsaHashedKey(algorithm, type))
|
| return false;
|
| break;
|
| default:
|
| @@ -2419,7 +2406,7 @@ private:
|
| return !algorithm.isNull();
|
| }
|
|
|
| - bool doReadRsaKey(bool hasHash, blink::WebCryptoKeyAlgorithm& algorithm, blink::WebCryptoKeyType& type)
|
| + bool doReadRsaHashedKey(blink::WebCryptoKeyAlgorithm& algorithm, blink::WebCryptoKeyType& type)
|
| {
|
| blink::WebCryptoAlgorithmId id;
|
| if (!doReadAlgorithmId(id))
|
| @@ -2454,14 +2441,10 @@ private:
|
| const uint8_t* publicExponent = m_buffer + m_position;
|
| m_position += publicExponentSize;
|
|
|
| - if (hasHash) {
|
| - blink::WebCryptoAlgorithmId hash;
|
| - if (!doReadAlgorithmId(hash))
|
| - return false;
|
| - algorithm = blink::WebCryptoKeyAlgorithm::createRsaHashed(id, modulusLengthBits, publicExponent, publicExponentSize, hash);
|
| - } else {
|
| - algorithm = blink::WebCryptoKeyAlgorithm::createRsa(id, modulusLengthBits, publicExponent, publicExponentSize);
|
| - }
|
| + blink::WebCryptoAlgorithmId hash;
|
| + if (!doReadAlgorithmId(hash))
|
| + return false;
|
| + algorithm = blink::WebCryptoKeyAlgorithm::createRsaHashed(id, modulusLengthBits, publicExponent, publicExponentSize, hash);
|
|
|
| return !algorithm.isNull();
|
| }
|
| @@ -2482,9 +2465,6 @@ private:
|
| case RsaSsaPkcs1v1_5Tag:
|
| id = blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5;
|
| return true;
|
| - case RsaEsPkcs1v1_5Tag:
|
| - id = blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5;
|
| - return true;
|
| case Sha1Tag:
|
| id = blink::WebCryptoAlgorithmIdSha1;
|
| return true;
|
|
|