| Index: content/child/webcrypto/jwk.h
|
| diff --git a/content/child/webcrypto/jwk.h b/content/child/webcrypto/jwk.h
|
| index c9191888256d957f56c00da4bebe970307cca9c3..71d875de402844018266e5d825bb584891ce6237 100644
|
| --- a/content/child/webcrypto/jwk.h
|
| +++ b/content/child/webcrypto/jwk.h
|
| @@ -8,6 +8,7 @@
|
| #include <vector>
|
|
|
| #include "base/basictypes.h"
|
| +#include "base/values.h"
|
| #include "third_party/WebKit/public/platform/WebArrayBuffer.h"
|
| #include "third_party/WebKit/public/platform/WebCrypto.h"
|
| #include "third_party/WebKit/public/platform/WebCryptoAlgorithmParams.h"
|
| @@ -19,13 +20,105 @@ namespace webcrypto {
|
| class CryptoData;
|
| class Status;
|
|
|
| -Status ImportKeyJwk(const CryptoData& key_data,
|
| - const blink::WebCryptoAlgorithm& algorithm,
|
| - bool extractable,
|
| - blink::WebCryptoKeyUsageMask usage_mask,
|
| - blink::WebCryptoKey* key);
|
| +// Writes a JWK-formatted symmetric key to |jwk_key_data|.
|
| +// * raw_key_data: The actual key data
|
| +// * algorithm: The JWK algorithm name (i.e. "alg")
|
| +// * extractable: The JWK extractability (i.e. "ext")
|
| +// * usage_mask: The JWK usages (i.e. "key_ops")
|
| +void WriteSecretKeyJwk(const CryptoData& raw_key_data,
|
| + const std::string& algorithm,
|
| + bool extractable,
|
| + blink::WebCryptoKeyUsageMask usage_mask,
|
| + std::vector<uint8>* jwk_key_data);
|
|
|
| -Status ExportKeyJwk(const blink::WebCryptoKey& key, std::vector<uint8>* buffer);
|
| +// Parses a UTF-8 encoded JWK (key_data), and extracts the key material to
|
| +// |*raw_key_data|. Returns Status::Success() on success, otherwise an error.
|
| +// In order for this to succeed:
|
| +// * expected_algorithm must match the JWK's "alg", if present.
|
| +// * expected_extractable must be consistent with the JWK's "ext", if
|
| +// present.
|
| +// * expected_usage_mask must be a subset of the JWK's "key_ops" if present.
|
| +Status ReadSecretKeyJwk(const CryptoData& key_data,
|
| + const std::string& expected_algorithm,
|
| + bool expected_extractable,
|
| + blink::WebCryptoKeyUsageMask expected_usage_mask,
|
| + std::vector<uint8>* raw_key_data);
|
| +
|
| +// Creates an AES algorithm name for the given key size (in bytes). For
|
| +// instance "A128CBC" is the result of suffix="CBC", keylen_bytes=16.
|
| +std::string MakeJwkAesAlgorithmName(const std::string& suffix,
|
| + unsigned int keylen_bytes);
|
| +
|
| +// This is very similar to ReadSecretKeyJwk(), except instead of specifying an
|
| +// absolut "expected_algorithm", the suffix for an AES algorithm name is given
|
| +// (See MakeJwkAesAlgorithmName() for an explanation of what the suffix is).
|
| +//
|
| +// This is because the algorithm name for AES keys is dependent on the length
|
| +// of the key. This function expects key lengths to be either 128, 192, or 256
|
| +// bits.
|
| +Status ReadAesSecretKeyJwk(const CryptoData& key_data,
|
| + const std::string& algorithm_name_suffix,
|
| + bool expected_extractable,
|
| + blink::WebCryptoKeyUsageMask expected_usage_mask,
|
| + std::vector<uint8>* raw_key_data);
|
| +
|
| +// Writes a JWK-formated RSA public key and saves the result to
|
| +// |*jwk_key_data|.
|
| +void WriteRsaPublicKeyJwk(const CryptoData& n,
|
| + const CryptoData& e,
|
| + const std::string& algorithm,
|
| + bool extractable,
|
| + blink::WebCryptoKeyUsageMask usage_mask,
|
| + std::vector<uint8>* jwk_key_data);
|
| +
|
| +// Writes a JWK-formated RSA private key and saves the result to
|
| +// |*jwk_key_data|.
|
| +void WriteRsaPrivateKeyJwk(const CryptoData& n,
|
| + const CryptoData& e,
|
| + const CryptoData& d,
|
| + const CryptoData& p,
|
| + const CryptoData& q,
|
| + const CryptoData& dp,
|
| + const CryptoData& dq,
|
| + const CryptoData& qi,
|
| + const std::string& algorithm,
|
| + bool extractable,
|
| + blink::WebCryptoKeyUsageMask usage_mask,
|
| + std::vector<uint8>* jwk_key_data);
|
| +
|
| +// Describes the RSA components for a parsed key. The names of the properties
|
| +// correspond with those from the JWK spec. Note that Chromium's WebCrypto
|
| +// implementation does not support multi-primes, so there is no parsed field
|
| +// for othinfo.
|
| +struct JwkRsaInfo {
|
| + JwkRsaInfo();
|
| + ~JwkRsaInfo();
|
| +
|
| + bool is_private_key;
|
| + std::string n;
|
| + std::string e;
|
| + std::string d;
|
| + std::string p;
|
| + std::string q;
|
| + std::string dp;
|
| + std::string dq;
|
| + std::string qi;
|
| +};
|
| +
|
| +// Parses a UTF-8 encoded JWK (key_data), and extracts the RSA components to
|
| +// |*result|. Returns Status::Success() on success, otherwise an error.
|
| +// In order for this to succeed:
|
| +// * expected_algorithm must match the JWK's "alg", if present.
|
| +// * expected_extractable must be consistent with the JWK's "ext", if
|
| +// present.
|
| +// * expected_usage_mask must be a subset of the JWK's "key_ops" if present.
|
| +Status ReadRsaKeyJwk(const CryptoData& key_data,
|
| + const std::string& expected_algorithm,
|
| + bool expected_extractable,
|
| + blink::WebCryptoKeyUsageMask expected_usage_mask,
|
| + JwkRsaInfo* result);
|
| +
|
| +const char* GetJwkHmacAlgorithmName(blink::WebCryptoAlgorithmId hash);
|
|
|
| } // namespace webcrypto
|
|
|
|
|