Index: Source/modules/crypto/NormalizeAlgorithm.cpp |
diff --git a/Source/modules/crypto/NormalizeAlgorithm.cpp b/Source/modules/crypto/NormalizeAlgorithm.cpp |
index 630580c4f51ac78aa15866550b64d234f0fddb8b..52f9dc8604b6f0f84744c477d86c58877dbb0cb6 100644 |
--- a/Source/modules/crypto/NormalizeAlgorithm.cpp |
+++ b/Source/modules/crypto/NormalizeAlgorithm.cpp |
@@ -67,6 +67,7 @@ struct OperationParamsMapping { |
const AlgorithmNameMapping algorithmNameMappings[] = { |
{"AES-CBC", WebKit::WebCryptoAlgorithmIdAesCbc}, |
{"HMAC", WebKit::WebCryptoAlgorithmIdHmac}, |
+ {"RSASSA-PKCS1-v1_5", WebKit::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5}, |
{"SHA-1", WebKit::WebCryptoAlgorithmIdSha1}, |
{"SHA-224", WebKit::WebCryptoAlgorithmIdSha224}, |
{"SHA-256", WebKit::WebCryptoAlgorithmIdSha256}, |
@@ -88,6 +89,12 @@ const OperationParamsMapping operationParamsMappings[] = { |
{WebKit::WebCryptoAlgorithmIdHmac, GenerateKey, WebKit::WebCryptoAlgorithmParamsTypeHmacParams}, |
{WebKit::WebCryptoAlgorithmIdHmac, ImportKey, WebKit::WebCryptoAlgorithmParamsTypeHmacParams}, |
+ // RSASSA-PKCS1-v1_5 (section 18.4.) |
+ {WebKit::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, Sign, WebKit::WebCryptoAlgorithmParamsTypeRsaSsaParams}, |
+ {WebKit::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, Verify, WebKit::WebCryptoAlgorithmParamsTypeRsaSsaParams}, |
+ {WebKit::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, GenerateKey, WebKit::WebCryptoAlgorithmParamsTypeRsaKeyGenParams}, |
+ {WebKit::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, ImportKey, WebKit::WebCryptoAlgorithmParamsTypeNone}, |
+ |
// SHA-1 (section 18.16.) |
{WebKit::WebCryptoAlgorithmIdSha1, Digest, WebKit::WebCryptoAlgorithmParamsTypeNone}, |
@@ -183,20 +190,45 @@ PassOwnPtr<WebKit::WebCryptoAlgorithmParams> parseAesKeyGenParams(const Dictiona |
return adoptPtr(new WebKit::WebCryptoAesKeyGenParams(length)); |
} |
-PassOwnPtr<WebKit::WebCryptoAlgorithmParams> parseHmacParams(const Dictionary& raw) |
+bool parseHash(const Dictionary& raw, WebKit::WebCryptoAlgorithm& hash) |
{ |
Dictionary rawHash; |
if (!raw.get("hash", rawHash)) |
+ return false; |
+ |
+ NonThrowExceptionState es; |
+ return normalizeAlgorithm(rawHash, Digest, hash, es); |
+} |
+ |
+PassOwnPtr<WebKit::WebCryptoAlgorithmParams> parseHmacParams(const Dictionary& raw) |
+{ |
+ WebKit::WebCryptoAlgorithm hash; |
+ if (!parseHash(raw, hash)) |
return nullptr; |
+ return adoptPtr(new WebKit::WebCryptoHmacParams(hash)); |
+} |
- // Normalizing the algorithm for a Digest operation means it will only |
- // match the SHA-* algorithms. |
+PassOwnPtr<WebKit::WebCryptoAlgorithmParams> parseRsaSsaParams(const Dictionary& raw) |
+{ |
WebKit::WebCryptoAlgorithm hash; |
- NonThrowExceptionState es; |
- if (!normalizeAlgorithm(rawHash, Digest, hash, es)) |
+ if (!parseHash(raw, hash)) |
return nullptr; |
+ return adoptPtr(new WebKit::WebCryptoRsaSsaParams(hash)); |
+} |
- return adoptPtr(new WebKit::WebCryptoHmacParams(hash)); |
+PassOwnPtr<WebKit::WebCryptoAlgorithmParams> parseRsaKeyGenParams(const Dictionary& raw) |
+{ |
+ // FIXME: This is losing precision; modulusLength is supposed to be a uint32 |
+ int32_t modulusLength; |
+ if (!raw.get("modulusLength", modulusLength)) |
+ return nullptr; |
+ if (modulusLength < 0) |
+ return nullptr; |
+ |
+ RefPtr<Uint8Array> publicExponent; |
+ if (!raw.get("publicExponent", publicExponent) || !publicExponent) |
+ return nullptr; |
+ return adoptPtr(new WebKit::WebCryptoRsaKeyGenParams(modulusLength, static_cast<const unsigned char*>(publicExponent->baseAddress()), publicExponent->byteLength())); |
} |
PassOwnPtr<WebKit::WebCryptoAlgorithmParams> parseAlgorithmParams(const Dictionary& raw, WebKit::WebCryptoAlgorithmParamsType type) |
@@ -210,6 +242,10 @@ PassOwnPtr<WebKit::WebCryptoAlgorithmParams> parseAlgorithmParams(const Dictiona |
return parseAesKeyGenParams(raw); |
case WebKit::WebCryptoAlgorithmParamsTypeHmacParams: |
return parseHmacParams(raw); |
+ case WebKit::WebCryptoAlgorithmParamsTypeRsaSsaParams: |
+ return parseRsaSsaParams(raw); |
+ case WebKit::WebCryptoAlgorithmParamsTypeRsaKeyGenParams: |
+ return parseRsaKeyGenParams(raw); |
} |
ASSERT_NOT_REACHED(); |
return nullptr; |