diff --git a/dom/crypto/WebCryptoCommon.h b/dom/crypto/WebCryptoCommon.h index 6eb55ae0a55..8d1db9667c6 100644 --- a/dom/crypto/WebCryptoCommon.h +++ b/dom/crypto/WebCryptoCommon.h @@ -27,6 +27,7 @@ #define WEBCRYPTO_ALG_PBKDF2 "PBKDF2" #define WEBCRYPTO_ALG_RSASSA_PKCS1 "RSASSA-PKCS1-v1_5" #define WEBCRYPTO_ALG_RSA_OAEP "RSA-OAEP" +#define WEBCRYPTO_ALG_RSA_PSS "RSA-PSS" #define WEBCRYPTO_ALG_ECDH "ECDH" #define WEBCRYPTO_ALG_ECDSA "ECDSA" #define WEBCRYPTO_ALG_DH "DH" @@ -247,6 +248,8 @@ NormalizeToken(const nsString& aName, nsString& aDest) aDest.AssignLiteral(WEBCRYPTO_ALG_RSASSA_PKCS1); } else if (NORMALIZED_EQUALS(aName, WEBCRYPTO_ALG_RSA_OAEP)) { aDest.AssignLiteral(WEBCRYPTO_ALG_RSA_OAEP); + } else if (NORMALIZED_EQUALS(aName, WEBCRYPTO_ALG_RSA_PSS)) { + aDest.AssignLiteral(WEBCRYPTO_ALG_RSA_PSS); } else if (NORMALIZED_EQUALS(aName, WEBCRYPTO_ALG_ECDH)) { aDest.AssignLiteral(WEBCRYPTO_ALG_ECDH); } else if (NORMALIZED_EQUALS(aName, WEBCRYPTO_ALG_ECDSA)) { diff --git a/dom/crypto/WebCryptoTask.cpp b/dom/crypto/WebCryptoTask.cpp index c1e92615346..a42dfca4375 100644 --- a/dom/crypto/WebCryptoTask.cpp +++ b/dom/crypto/WebCryptoTask.cpp @@ -2289,7 +2289,8 @@ GenerateAsymmetricKeyTask::GenerateAsymmetricKeyTask( // Construct an appropriate KeyAlorithm uint32_t privateAllowedUsages = 0, publicAllowedUsages = 0; if (mAlgName.EqualsLiteral(WEBCRYPTO_ALG_RSASSA_PKCS1) || - mAlgName.EqualsLiteral(WEBCRYPTO_ALG_RSA_OAEP)) { + mAlgName.EqualsLiteral(WEBCRYPTO_ALG_RSA_OAEP) || + mAlgName.EqualsLiteral(WEBCRYPTO_ALG_RSA_PSS)) { RootedDictionary params(aCx); mEarlyRv = Coerce(aCx, params, aAlgorithm); if (NS_FAILED(mEarlyRv)) { @@ -2392,6 +2393,7 @@ GenerateAsymmetricKeyTask::GenerateAsymmetricKeyTask( // Set key usages. if (mAlgName.EqualsLiteral(WEBCRYPTO_ALG_RSASSA_PKCS1) || + mAlgName.EqualsLiteral(WEBCRYPTO_ALG_RSA_PSS) || mAlgName.EqualsLiteral(WEBCRYPTO_ALG_ECDSA)) { privateAllowedUsages = CryptoKey::SIGN; publicAllowedUsages = CryptoKey::VERIFY; @@ -2402,6 +2404,8 @@ GenerateAsymmetricKeyTask::GenerateAsymmetricKeyTask( mAlgName.EqualsLiteral(WEBCRYPTO_ALG_DH)) { privateAllowedUsages = CryptoKey::DERIVEKEY | CryptoKey::DERIVEBITS; publicAllowedUsages = 0; + } else { + MOZ_ASSERT(false); // This shouldn't happen. } mKeyPair->mPrivateKey.get()->SetExtractable(aExtractable); @@ -3349,6 +3353,7 @@ WebCryptoTask::CreateGenerateKeyTask(JSContext* aCx, return new GenerateSymmetricKeyTask(aCx, aAlgorithm, aExtractable, aKeyUsages); } else if (algName.EqualsASCII(WEBCRYPTO_ALG_RSASSA_PKCS1) || algName.EqualsASCII(WEBCRYPTO_ALG_RSA_OAEP) || + algName.EqualsASCII(WEBCRYPTO_ALG_RSA_PSS) || algName.EqualsASCII(WEBCRYPTO_ALG_ECDH) || algName.EqualsASCII(WEBCRYPTO_ALG_ECDSA) || algName.EqualsASCII(WEBCRYPTO_ALG_DH)) { diff --git a/dom/crypto/test/mochitest.ini b/dom/crypto/test/mochitest.ini index 8b2a2a5f678..2a57c7c4769 100644 --- a/dom/crypto/test/mochitest.ini +++ b/dom/crypto/test/mochitest.ini @@ -20,4 +20,5 @@ skip-if = toolkit == 'android' # bug 1200570 [test_WebCrypto_PBKDF2.html] [test_WebCrypto_Reject_Generating_Keys_Without_Usages.html] [test_WebCrypto_RSA_OAEP.html] +[test_WebCrypto_RSA_PSS.html] [test_WebCrypto_Wrap_Unwrap.html] diff --git a/dom/crypto/test/test_WebCrypto_RSA_PSS.html b/dom/crypto/test/test_WebCrypto_RSA_PSS.html new file mode 100644 index 00000000000..d4835cd432a --- /dev/null +++ b/dom/crypto/test/test_WebCrypto_RSA_PSS.html @@ -0,0 +1,78 @@ + + + + +WebCrypto Test Suite + + + + + + + + + + + + + + + + + + + + + +
+ + +
RUN ALL
+ +
+ Summary: + 0 passed, + 0 failed, + 0 pending. +
+
+ + + + + + + +
TestResultTime
+ +
+ + +
+ + +