Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2609)

Unified Diff: content/renderer/webcrypto/webcrypto_util.cc

Issue 178073007: [webcrypto] Update to use the KeyAlgorithm. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove unrelated change that makes public keys extractable Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/webcrypto/webcrypto_util.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/webcrypto/webcrypto_util.cc
diff --git a/content/renderer/webcrypto/webcrypto_util.cc b/content/renderer/webcrypto/webcrypto_util.cc
index 87c34a54a8031a37f4bafb511845c78649af421a..5d17c932f717dddb20ff637dfbd3501f054676bf 100644
--- a/content/renderer/webcrypto/webcrypto_util.cc
+++ b/content/renderer/webcrypto/webcrypto_util.cc
@@ -8,6 +8,9 @@
#include "base/logging.h"
#include "third_party/WebKit/public/platform/WebCryptoAlgorithm.h"
#include "third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h"
+#ifdef WEBCRYPTO_HAS_KEY_ALGORITHM
+#include "third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h"
+#endif
namespace content {
@@ -210,6 +213,24 @@ bool IsHashAlgorithm(blink::WebCryptoAlgorithmId alg_id) {
alg_id == blink::WebCryptoAlgorithmIdSha512;
}
+#ifdef WEBCRYPTO_HAS_KEY_ALGORITHM
+blink::WebCryptoAlgorithm GetInnerHashAlgorithm(
+ const blink::WebCryptoAlgorithm& algorithm) {
+ DCHECK(!algorithm.isNull());
+ switch (algorithm.paramsType()) {
+ case blink::WebCryptoAlgorithmParamsTypeHmacImportParams:
+ return algorithm.hmacImportParams()->hash();
+ case blink::WebCryptoAlgorithmParamsTypeHmacKeyGenParams:
+ return algorithm.hmacKeyGenParams()->hash();
+ case blink::WebCryptoAlgorithmParamsTypeRsaHashedImportParams:
+ return algorithm.rsaHashedImportParams()->hash();
+ case blink::WebCryptoAlgorithmParamsTypeRsaHashedKeyGenParams:
+ return algorithm.rsaHashedKeyGenParams()->hash();
+ default:
+ return blink::WebCryptoAlgorithm::createNull();
+ }
+}
+#else
blink::WebCryptoAlgorithm GetInnerHashAlgorithm(
const blink::WebCryptoAlgorithm& algorithm) {
DCHECK(!algorithm.isNull());
@@ -233,82 +254,50 @@ blink::WebCryptoAlgorithm GetInnerHashAlgorithm(
}
return blink::WebCryptoAlgorithm::createNull();
}
+#endif
blink::WebCryptoAlgorithm CreateAlgorithm(blink::WebCryptoAlgorithmId id) {
return blink::WebCryptoAlgorithm::adoptParamsAndCreate(id, NULL);
}
-blink::WebCryptoAlgorithm CreateHmacAlgorithmByHashId(
+blink::WebCryptoAlgorithm CreateHmacImportAlgorithm(
blink::WebCryptoAlgorithmId hash_id) {
DCHECK(IsHashAlgorithm(hash_id));
return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
blink::WebCryptoAlgorithmIdHmac,
+#ifdef WEBCRYPTO_HAS_KEY_ALGORITHM
+ new blink::WebCryptoHmacImportParams(CreateAlgorithm(hash_id)));
+#else
new blink::WebCryptoHmacParams(CreateAlgorithm(hash_id)));
+#endif
}
-blink::WebCryptoAlgorithm CreateHmacKeyGenAlgorithm(
- blink::WebCryptoAlgorithmId hash_id,
- unsigned int key_length_bytes) {
- DCHECK(IsHashAlgorithm(hash_id));
- // key_length_bytes == 0 means unspecified
- return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
- blink::WebCryptoAlgorithmIdHmac,
- new blink::WebCryptoHmacKeyParams(
- CreateAlgorithm(hash_id), (key_length_bytes != 0), key_length_bytes));
-}
-
-blink::WebCryptoAlgorithm CreateRsaSsaAlgorithm(
+blink::WebCryptoAlgorithm CreateRsaSsaImportAlgorithm(
blink::WebCryptoAlgorithmId hash_id) {
DCHECK(IsHashAlgorithm(hash_id));
return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
+#ifdef WEBCRYPTO_HAS_KEY_ALGORITHM
+ new blink::WebCryptoRsaHashedImportParams(CreateAlgorithm(hash_id)));
+#else
new blink::WebCryptoRsaSsaParams(CreateAlgorithm(hash_id)));
+#endif
}
-blink::WebCryptoAlgorithm CreateRsaOaepAlgorithm(
+blink::WebCryptoAlgorithm CreateRsaOaepImportAlgorithm(
blink::WebCryptoAlgorithmId hash_id) {
DCHECK(IsHashAlgorithm(hash_id));
return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
blink::WebCryptoAlgorithmIdRsaOaep,
+#ifdef WEBCRYPTO_HAS_KEY_ALGORITHM
+ new blink::WebCryptoRsaHashedImportParams(
+ CreateAlgorithm(hash_id)));
+#else
new blink::WebCryptoRsaOaepParams(
CreateAlgorithm(hash_id), false, NULL, 0));
+#endif
}
-blink::WebCryptoAlgorithm CreateRsaKeyGenAlgorithm(
- blink::WebCryptoAlgorithmId algorithm_id,
- unsigned int modulus_length,
- const std::vector<uint8>& public_exponent) {
- DCHECK(algorithm_id == blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5 ||
- algorithm_id == blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 ||
- algorithm_id == blink::WebCryptoAlgorithmIdRsaOaep);
- return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
- algorithm_id,
- new blink::WebCryptoRsaKeyGenParams(
- modulus_length,
- webcrypto::Uint8VectorStart(public_exponent),
- public_exponent.size()));
-}
-
-blink::WebCryptoAlgorithm CreateAesCbcAlgorithm(const std::vector<uint8>& iv) {
- return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
- blink::WebCryptoAlgorithmIdAesCbc,
- new blink::WebCryptoAesCbcParams(Uint8VectorStart(iv), iv.size()));
-}
-
-blink::WebCryptoAlgorithm CreateAesGcmAlgorithm(
- const std::vector<uint8>& iv,
- const std::vector<uint8>& additional_data,
- uint8 tag_length_bytes) {
- return blink::WebCryptoAlgorithm::adoptParamsAndCreate(
- blink::WebCryptoAlgorithmIdAesCbc,
- new blink::WebCryptoAesGcmParams(Uint8VectorStart(iv),
- iv.size(),
- additional_data.size() != 0,
- Uint8VectorStart(additional_data),
- additional_data.size(),
- tag_length_bytes != 0,
- tag_length_bytes));
-}
unsigned int ShaBlockSizeBytes(blink::WebCryptoAlgorithmId hash_id) {
switch (hash_id) {
@@ -325,6 +314,41 @@ unsigned int ShaBlockSizeBytes(blink::WebCryptoAlgorithmId hash_id) {
}
}
+#ifdef WEBCRYPTO_HAS_KEY_ALGORITHM
+bool CreateSecretKeyAlgorithm(const blink::WebCryptoAlgorithm& algorithm,
+ unsigned keylen_bytes,
+ blink::WebCryptoKeyAlgorithm* key_algorithm) {
+ switch (algorithm.id()) {
+ case blink::WebCryptoAlgorithmIdHmac: {
+ blink::WebCryptoAlgorithm hash = GetInnerHashAlgorithm(algorithm);
+ if (hash.isNull())
+ return false;
+ *key_algorithm = blink::WebCryptoKeyAlgorithm::adoptParamsAndCreate(
+ algorithm.id(),
+ new blink::WebCryptoHmacKeyAlgorithmParams(hash));
+ return true;
+ }
+ case blink::WebCryptoAlgorithmIdAesKw:
+ case blink::WebCryptoAlgorithmIdAesCbc:
+ case blink::WebCryptoAlgorithmIdAesCtr:
+ case blink::WebCryptoAlgorithmIdAesGcm:
+ *key_algorithm = blink::WebCryptoKeyAlgorithm::adoptParamsAndCreate(
+ algorithm.id(),
+ new blink::WebCryptoAesKeyAlgorithmParams(keylen_bytes * 8));
+ return true;
+ default:
+ return false;
+ }
+}
+#else
+bool CreateSecretKeyAlgorithm(const blink::WebCryptoAlgorithm& algorithm,
+ unsigned keylen_bytes,
+ blink::WebCryptoAlgorithm* key_algorithm) {
+ *key_algorithm = algorithm;
+ return true;
+}
+#endif
+
} // namespace webcrypto
} // namespace content
« no previous file with comments | « content/renderer/webcrypto/webcrypto_util.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698