| Index: components/webcrypto/algorithms/secret_key_util.h
|
| diff --git a/components/webcrypto/algorithms/secret_key_util.h b/components/webcrypto/algorithms/secret_key_util.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..19ebdbb9b3432159d5c04849607ac387efa05031
|
| --- /dev/null
|
| +++ b/components/webcrypto/algorithms/secret_key_util.h
|
| @@ -0,0 +1,68 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef COMPONENTS_WEBCRYPTO_ALGORITHMS_SECRET_KEY_UTIL_
|
| +#define COMPONENTS_WEBCRYPTO_ALGORITHMS_SECRET_KEY_UTIL_
|
| +
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "third_party/WebKit/public/platform/WebCryptoAlgorithm.h"
|
| +#include "third_party/WebKit/public/platform/WebCryptoKey.h"
|
| +
|
| +// This file contains functions shared by multiple symmetric key algorithms.
|
| +
|
| +namespace webcrypto {
|
| +
|
| +class CryptoData;
|
| +class GenerateKeyResult;
|
| +class JwkReader;
|
| +class Status;
|
| +
|
| +// Generates a random secret key of the given bit length. If the bit length is
|
| +// not a multiple of 8, then the resulting key will have ceil(keylen_bits / 8)
|
| +// bytes, and the "unused" bits will be set to zero. This function does not do
|
| +// any validation checks on the provided parameters.
|
| +Status GenerateWebCryptoSecretKey(const blink::WebCryptoKeyAlgorithm& algorithm,
|
| + bool extractable,
|
| + blink::WebCryptoKeyUsageMask usages,
|
| + unsigned int keylen_bits,
|
| + GenerateKeyResult* result);
|
| +
|
| +// Creates a WebCrypto secret key given a the raw data. The provided |key_data|
|
| +// will be copied into the new key. This function does not do any validation
|
| +// checks for the provided parameters.
|
| +Status CreateWebCryptoSecretKey(const CryptoData& key_data,
|
| + const blink::WebCryptoKeyAlgorithm& algorithm,
|
| + bool extractable,
|
| + blink::WebCryptoKeyUsageMask usages,
|
| + 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")
|
| +// * usages: The JWK usages (i.e. "key_ops")
|
| +void WriteSecretKeyJwk(const CryptoData& raw_key_data,
|
| + const std::string& algorithm,
|
| + bool extractable,
|
| + blink::WebCryptoKeyUsageMask usages,
|
| + std::vector<uint8_t>* jwk_key_data);
|
| +
|
| +// 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_extractable must be consistent with the JWK's "ext", if
|
| +// present.
|
| +// * expected_usages must be a subset of the JWK's "key_ops" if present.
|
| +Status ReadSecretKeyNoExpectedAlgJwk(
|
| + const CryptoData& key_data,
|
| + bool expected_extractable,
|
| + blink::WebCryptoKeyUsageMask expected_usages,
|
| + std::vector<uint8_t>* raw_key_data,
|
| + JwkReader* jwk);
|
| +
|
| +} // namespace webcrypto
|
| +
|
| +#endif // COMPONENTS_WEBCRYPTO_ALGORITHMS_SECRET_KEY_UTIL_
|
|
|