| Index: trunk/Source/modules/crypto/NormalizeAlgorithm.cpp
|
| ===================================================================
|
| --- trunk/Source/modules/crypto/NormalizeAlgorithm.cpp (revision 174732)
|
| +++ trunk/Source/modules/crypto/NormalizeAlgorithm.cpp (working copy)
|
| @@ -73,6 +73,7 @@
|
| {"AES-GCM", 7, blink::WebCryptoAlgorithmIdAesGcm},
|
| {"AES-CTR", 7, blink::WebCryptoAlgorithmIdAesCtr},
|
| {"RSA-OAEP", 8, blink::WebCryptoAlgorithmIdRsaOaep},
|
| + {"RSAES-PKCS1-V1_5", 16, blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5},
|
| {"RSASSA-PKCS1-V1_5", 17, blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5},
|
| };
|
|
|
| @@ -133,6 +134,20 @@
|
| Undefined // UnwrapKey
|
| }
|
| }, { // Index 3
|
| + "RSAES-PKCS1-v1_5", {
|
| + blink::WebCryptoAlgorithmParamsTypeNone, // Encrypt
|
| + blink::WebCryptoAlgorithmParamsTypeNone, // Decrypt
|
| + Undefined, // Sign
|
| + Undefined, // Verify
|
| + Undefined, // Digest
|
| + blink::WebCryptoAlgorithmParamsTypeRsaKeyGenParams, // GenerateKey
|
| + blink::WebCryptoAlgorithmParamsTypeNone, // ImportKey
|
| + Undefined, // DeriveKey
|
| + Undefined, // DeriveBits
|
| + blink::WebCryptoAlgorithmParamsTypeNone, // WrapKey
|
| + blink::WebCryptoAlgorithmParamsTypeNone // UnwrapKey
|
| + }
|
| + }, { // Index 4
|
| "SHA-1", {
|
| Undefined, // Encrypt
|
| Undefined, // Decrypt
|
| @@ -146,7 +161,7 @@
|
| Undefined, // WrapKey
|
| Undefined // UnwrapKey
|
| }
|
| - }, { // Index 4
|
| + }, { // Index 5
|
| "SHA-256", {
|
| Undefined, // Encrypt
|
| Undefined, // Decrypt
|
| @@ -160,7 +175,7 @@
|
| Undefined, // WrapKey
|
| Undefined // UnwrapKey
|
| }
|
| - }, { // Index 5
|
| + }, { // Index 6
|
| "SHA-384", {
|
| Undefined, // Encrypt
|
| Undefined, // Decrypt
|
| @@ -174,7 +189,7 @@
|
| Undefined, // WrapKey
|
| Undefined // UnwrapKey
|
| }
|
| - }, { // Index 6
|
| + }, { // Index 7
|
| "SHA-512", {
|
| Undefined, // Encrypt
|
| Undefined, // Decrypt
|
| @@ -188,7 +203,7 @@
|
| Undefined, // WrapKey
|
| Undefined // UnwrapKey
|
| }
|
| - }, { // Index 7
|
| + }, { // Index 8
|
| "AES-GCM", {
|
| blink::WebCryptoAlgorithmParamsTypeAesGcmParams, // Encrypt
|
| blink::WebCryptoAlgorithmParamsTypeAesGcmParams, // Decrypt
|
| @@ -202,7 +217,7 @@
|
| blink::WebCryptoAlgorithmParamsTypeAesGcmParams, // WrapKey
|
| blink::WebCryptoAlgorithmParamsTypeAesGcmParams // UnwrapKey
|
| }
|
| - }, { // Index 8
|
| + }, { // Index 9
|
| "RSA-OAEP", {
|
| blink::WebCryptoAlgorithmParamsTypeRsaOaepParams, // Encrypt
|
| blink::WebCryptoAlgorithmParamsTypeRsaOaepParams, // Decrypt
|
| @@ -216,7 +231,7 @@
|
| blink::WebCryptoAlgorithmParamsTypeRsaOaepParams, // WrapKey
|
| blink::WebCryptoAlgorithmParamsTypeRsaOaepParams // UnwrapKey
|
| }
|
| - }, { // Index 9
|
| + }, { // Index 10
|
| "AES-CTR", {
|
| blink::WebCryptoAlgorithmParamsTypeAesCtrParams, // Encrypt
|
| blink::WebCryptoAlgorithmParamsTypeAesCtrParams, // Decrypt
|
| @@ -230,7 +245,7 @@
|
| blink::WebCryptoAlgorithmParamsTypeAesCtrParams, // WrapKey
|
| blink::WebCryptoAlgorithmParamsTypeAesCtrParams // UnwrapKey
|
| }
|
| - }, { // Index 10
|
| + }, { // Index 11
|
| "AES-KW", {
|
| Undefined, // Encrypt
|
| Undefined, // Decrypt
|
| @@ -253,15 +268,16 @@
|
| COMPILE_ASSERT(blink::WebCryptoAlgorithmIdAesCbc == 0, AesCbc_idDoesntMatch);
|
| COMPILE_ASSERT(blink::WebCryptoAlgorithmIdHmac == 1, Hmac_idDoesntMatch);
|
| COMPILE_ASSERT(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 == 2, RsaSsaPkcs1v1_5_idDoesntMatch);
|
| -COMPILE_ASSERT(blink::WebCryptoAlgorithmIdSha1 == 3, Sha1_idDoesntMatch);
|
| -COMPILE_ASSERT(blink::WebCryptoAlgorithmIdSha256 == 4, Sha256_idDoesntMatch);
|
| -COMPILE_ASSERT(blink::WebCryptoAlgorithmIdSha384 == 5, Sha384_idDoesntMatch);
|
| -COMPILE_ASSERT(blink::WebCryptoAlgorithmIdSha512 == 6, Sha512_idDoesntMatch);
|
| -COMPILE_ASSERT(blink::WebCryptoAlgorithmIdAesGcm == 7, AesGcm_idDoesntMatch);
|
| -COMPILE_ASSERT(blink::WebCryptoAlgorithmIdRsaOaep == 8, RsaOaep_idDoesntMatch);
|
| -COMPILE_ASSERT(blink::WebCryptoAlgorithmIdAesCtr == 9, AesCtr_idDoesntMatch);
|
| -COMPILE_ASSERT(blink::WebCryptoAlgorithmIdAesKw == 10, AesKw_idDoesntMatch);
|
| -COMPILE_ASSERT(blink::WebCryptoAlgorithmIdLast == 10, Last_idDoesntMatch);
|
| +COMPILE_ASSERT(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5 == 3, RsaEsPkcs1v1_5_idDoesntMatch);
|
| +COMPILE_ASSERT(blink::WebCryptoAlgorithmIdSha1 == 4, Sha1_idDoesntMatch);
|
| +COMPILE_ASSERT(blink::WebCryptoAlgorithmIdSha256 == 5, Sha256_idDoesntMatch);
|
| +COMPILE_ASSERT(blink::WebCryptoAlgorithmIdSha384 == 6, Sha384_idDoesntMatch);
|
| +COMPILE_ASSERT(blink::WebCryptoAlgorithmIdSha512 == 7, Sha512_idDoesntMatch);
|
| +COMPILE_ASSERT(blink::WebCryptoAlgorithmIdAesGcm == 8, AesGcm_idDoesntMatch);
|
| +COMPILE_ASSERT(blink::WebCryptoAlgorithmIdRsaOaep == 9, RsaOaep_idDoesntMatch);
|
| +COMPILE_ASSERT(blink::WebCryptoAlgorithmIdAesCtr == 10, AesCtr_idDoesntMatch);
|
| +COMPILE_ASSERT(blink::WebCryptoAlgorithmIdAesKw == 11, AesKw_idDoesntMatch);
|
| +COMPILE_ASSERT(blink::WebCryptoAlgorithmIdLast == 11, Last_idDoesntMatch);
|
| COMPILE_ASSERT(10 == LastAlgorithmOperation, UpdateParamsMapping);
|
|
|
| #if ASSERT_ENABLED
|
| @@ -703,24 +719,44 @@
|
|
|
| // Defined by the WebCrypto spec as:
|
| //
|
| -// dictionary RsaHashedKeyGenParams : RsaKeyGenParams {
|
| -// AlgorithmIdentifier hash;
|
| -// };
|
| -//
|
| // dictionary RsaKeyGenParams : Algorithm {
|
| // unsigned long modulusLength;
|
| // BigInteger publicExponent;
|
| // };
|
| -bool parseRsaHashedKeyGenParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorithmParams>& params, const ErrorContext& context, CryptoResult* result)
|
| +bool parseRsaKeyGenParams(const Dictionary& raw, uint32_t& modulusLength, RefPtr<Uint8Array>& publicExponent, const ErrorContext& context, CryptoResult* result)
|
| {
|
| - uint32_t modulusLength;
|
| if (!getUint32(raw, "modulusLength", modulusLength, context, result))
|
| return false;
|
|
|
| - RefPtr<Uint8Array> publicExponent;
|
| if (!getBigInteger(raw, "publicExponent", publicExponent, context, result))
|
| return false;
|
|
|
| + return true;
|
| +}
|
| +
|
| +bool parseRsaKeyGenParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorithmParams>& params, const ErrorContext& context, CryptoResult* result)
|
| +{
|
| + uint32_t modulusLength;
|
| + RefPtr<Uint8Array> publicExponent;
|
| + if (!parseRsaKeyGenParams(raw, modulusLength, publicExponent, context, result))
|
| + return false;
|
| +
|
| + params = adoptPtr(new blink::WebCryptoRsaKeyGenParams(modulusLength, static_cast<const unsigned char*>(publicExponent->baseAddress()), publicExponent->byteLength()));
|
| + return true;
|
| +}
|
| +
|
| +// Defined by the WebCrypto spec as:
|
| +//
|
| +// dictionary RsaHashedKeyGenParams : RsaKeyGenParams {
|
| +// AlgorithmIdentifier hash;
|
| +// };
|
| +bool parseRsaHashedKeyGenParams(const Dictionary& raw, OwnPtr<blink::WebCryptoAlgorithmParams>& params, const ErrorContext& context, CryptoResult* result)
|
| +{
|
| + uint32_t modulusLength;
|
| + RefPtr<Uint8Array> publicExponent;
|
| + if (!parseRsaKeyGenParams(raw, modulusLength, publicExponent, context, result))
|
| + return false;
|
| +
|
| blink::WebCryptoAlgorithm hash;
|
| if (!parseHash(raw, hash, context, result))
|
| return false;
|
| @@ -824,6 +860,9 @@
|
| case blink::WebCryptoAlgorithmParamsTypeRsaHashedImportParams:
|
| context.add("RsaHashedImportParams");
|
| return parseRsaHashedImportParams(raw, params, context, result);
|
| + case blink::WebCryptoAlgorithmParamsTypeRsaKeyGenParams:
|
| + context.add("RsaKeyGenParams");
|
| + return parseRsaKeyGenParams(raw, params, context, result);
|
| case blink::WebCryptoAlgorithmParamsTypeAesCtrParams:
|
| context.add("AesCtrParams");
|
| return parseAesCtrParams(raw, params, context, result);
|
|
|