Index: content/child/webcrypto/webcrypto_util.cc |
diff --git a/content/child/webcrypto/webcrypto_util.cc b/content/child/webcrypto/webcrypto_util.cc |
index 6dad83fcae7dae6c9cb0bd1ecd7b50139d56c670..64b827db1c76b4a788e08ad459c29f275b8263b9 100644 |
--- a/content/child/webcrypto/webcrypto_util.cc |
+++ b/content/child/webcrypto/webcrypto_util.cc |
@@ -262,6 +262,31 @@ Status GetRsaKeyGenParameters( |
return Status::Success(); |
} |
+Status VerifyUsagesBeforeImportAsymmetricKey( |
+ blink::WebCryptoKeyFormat format, |
+ blink::WebCryptoKeyUsageMask all_public_key_usages, |
+ blink::WebCryptoKeyUsageMask all_private_key_usages, |
+ blink::WebCryptoKeyUsageMask usages) { |
+ switch (format) { |
+ case blink::WebCryptoKeyFormatSpki: |
+ return CheckKeyCreationUsages(all_public_key_usages, usages); |
+ case blink::WebCryptoKeyFormatPkcs8: |
+ return CheckKeyCreationUsages(all_private_key_usages, usages); |
+ case blink::WebCryptoKeyFormatJwk: { |
+ // The JWK could represent either a public key or private key. The usages |
+ // must make sense for one of the two. The usages will be checked again by |
+ // ImportKeyJwk() once the key type has been determined. |
+ if (CheckKeyCreationUsages(all_public_key_usages, usages).IsError() && |
+ CheckKeyCreationUsages(all_private_key_usages, usages).IsError()) { |
+ return Status::ErrorCreateKeyBadUsages(); |
+ } |
+ return Status::Success(); |
+ } |
+ default: |
+ return Status::ErrorUnsupportedImportKeyFormat(); |
+ } |
+} |
+ |
} // namespace webcrypto |
} // namespace content |