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

Unified Diff: Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp

Issue 789733009: Implement HKDF for WebCrypto (blink-side) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: move ASSERT(), add break Created 5 years, 11 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
Index: Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp
diff --git a/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp b/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp
index 08add9b64a162f1c2349c1a1f0b7f4b41428265f..f0c53eedcaca7f2650cee4523681bcec28d09edb 100644
--- a/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp
+++ b/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp
@@ -30,6 +30,7 @@ enum CryptoKeyAlgorithmTag {
RsaPssTag = 13,
EcdsaTag = 14,
EcdhTag = 15,
+ HkdfTag = 16,
// Maximum allowed value is 2^32-1
};
@@ -61,6 +62,7 @@ enum CryptoKeySubTag {
// ID 3 was used by RsaKeyTag, while still behind experimental flag.
RsaHashedKeyTag = 4,
EcKeyTag = 5,
+ NoParamsKeyTag = 6,
// Maximum allowed value is 255
};
@@ -122,8 +124,8 @@ bool SerializedScriptValueWriterForModules::writeCryptoKey(const WebCryptoKey& k
doWriteEcKey(key);
break;
case WebCryptoKeyAlgorithmParamsTypeNone:
- ASSERT_NOT_REACHED();
- return false;
+ doWriteKeyWithoutParams(key);
+ break;
}
doWriteKeyUsages(key.usages(), key.extractable());
@@ -184,6 +186,14 @@ void SerializedScriptValueWriterForModules::doWriteEcKey(const WebCryptoKey& key
doWriteNamedCurve(key.algorithm().ecParams()->namedCurve());
}
+void SerializedScriptValueWriterForModules::doWriteKeyWithoutParams(const WebCryptoKey& key)
+{
+ ASSERT(WebCryptoAlgorithm::isKdf(key.algorithm().id()));
+ append(static_cast<uint8_t>(NoParamsKeyTag));
+
+ doWriteAlgorithmId(key.algorithm().id());
+}
+
void SerializedScriptValueWriterForModules::doWriteAlgorithmId(WebCryptoAlgorithmId id)
{
switch (id) {
@@ -215,6 +225,8 @@ void SerializedScriptValueWriterForModules::doWriteAlgorithmId(WebCryptoAlgorith
return doWriteUint32(EcdsaTag);
case WebCryptoAlgorithmIdEcdh:
return doWriteUint32(EcdhTag);
+ case WebCryptoAlgorithmIdHkdf:
+ return doWriteUint32(HkdfTag);
}
ASSERT_NOT_REACHED();
}
@@ -359,6 +371,10 @@ bool SerializedScriptValueReaderForModules::readCryptoKey(v8::Handle<v8::Value>*
if (!doReadEcKey(algorithm, type))
return false;
break;
+ case NoParamsKeyTag:
+ if (!doReadKeyWithoutParams(algorithm, type))
+ return false;
+ break;
default:
return false;
}
@@ -458,6 +474,16 @@ bool SerializedScriptValueReaderForModules::doReadEcKey(WebCryptoKeyAlgorithm& a
return !algorithm.isNull();
}
+bool SerializedScriptValueReaderForModules::doReadKeyWithoutParams(WebCryptoKeyAlgorithm& algorithm, WebCryptoKeyType& type)
+{
+ WebCryptoAlgorithmId id;
+ if (!doReadAlgorithmId(id))
+ return false;
+ algorithm = WebCryptoKeyAlgorithm::createWithoutParams(id);
+ type = WebCryptoKeyTypeSecret;
+ return !algorithm.isNull();
+}
+
bool SerializedScriptValueReaderForModules::doReadAlgorithmId(WebCryptoAlgorithmId& id)
{
uint32_t rawId;
@@ -507,6 +533,9 @@ bool SerializedScriptValueReaderForModules::doReadAlgorithmId(WebCryptoAlgorithm
case EcdhTag:
id = WebCryptoAlgorithmIdEcdh;
return true;
+ case HkdfTag:
+ id = WebCryptoAlgorithmIdHkdf;
+ return true;
}
return false;
« no previous file with comments | « Source/bindings/modules/v8/ScriptValueSerializerForModules.h ('k') | Source/modules/crypto/NormalizeAlgorithm.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698