OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_CHILD_WEBCRYPTO_PLATFORM_CRYPTO_H_ | 5 #ifndef CONTENT_CHILD_WEBCRYPTO_PLATFORM_CRYPTO_H_ |
6 #define CONTENT_CHILD_WEBCRYPTO_PLATFORM_CRYPTO_H_ | 6 #define CONTENT_CHILD_WEBCRYPTO_PLATFORM_CRYPTO_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 // * |tag_length_bits| is one of {32, 64, 96, 104, 112, 120, 128} | 90 // * |tag_length_bits| is one of {32, 64, 96, 104, 112, 120, 128} |
91 Status EncryptDecryptAesGcm(EncryptOrDecrypt mode, | 91 Status EncryptDecryptAesGcm(EncryptOrDecrypt mode, |
92 SymKey* key, | 92 SymKey* key, |
93 const CryptoData& data, | 93 const CryptoData& data, |
94 const CryptoData& iv, | 94 const CryptoData& iv, |
95 const CryptoData& additional_data, | 95 const CryptoData& additional_data, |
96 unsigned int tag_length_bits, | 96 unsigned int tag_length_bits, |
97 std::vector<uint8>* buffer); | 97 std::vector<uint8>* buffer); |
98 | 98 |
99 // Preconditions: | 99 // Preconditions: |
100 // * |key| is non-null. | |
101 // * |data| is not empty. | |
102 Status EncryptRsaEsPkcs1v1_5(PublicKey* key, | |
103 const CryptoData& data, | |
104 std::vector<uint8>* buffer); | |
105 | |
106 // Preconditions: | |
107 // * |key| is non-null. | |
108 Status DecryptRsaEsPkcs1v1_5(PrivateKey* key, | |
109 const CryptoData& data, | |
110 std::vector<uint8>* buffer); | |
111 | |
112 // Preconditions: | |
113 // * |key| is non-null | 100 // * |key| is non-null |
114 // * |hash| is a digest algorithm | 101 // * |hash| is a digest algorithm |
115 // * |label| MAY be empty (e.g. 0 bytes long). | 102 // * |label| MAY be empty (e.g. 0 bytes long). |
116 Status EncryptRsaOaep(PublicKey* key, | 103 Status EncryptRsaOaep(PublicKey* key, |
117 const blink::WebCryptoAlgorithm& hash, | 104 const blink::WebCryptoAlgorithm& hash, |
118 const CryptoData& label, | 105 const CryptoData& label, |
119 const CryptoData& data, | 106 const CryptoData& data, |
120 std::vector<uint8>* buffer); | 107 std::vector<uint8>* buffer); |
121 | 108 |
122 // Preconditions: | 109 // Preconditions: |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 Status GenerateSecretKey(const blink::WebCryptoAlgorithm& algorithm, | 161 Status GenerateSecretKey(const blink::WebCryptoAlgorithm& algorithm, |
175 bool extractable, | 162 bool extractable, |
176 blink::WebCryptoKeyUsageMask usage_mask, | 163 blink::WebCryptoKeyUsageMask usage_mask, |
177 unsigned keylen_bytes, | 164 unsigned keylen_bytes, |
178 blink::WebCryptoKey* key); | 165 blink::WebCryptoKey* key); |
179 | 166 |
180 // Preconditions: | 167 // Preconditions: |
181 // * algorithm.id() is for an RSA algorithm. | 168 // * algorithm.id() is for an RSA algorithm. |
182 // * public_exponent, modulus_length_bits and hash_or_null are the same as what | 169 // * public_exponent, modulus_length_bits and hash_or_null are the same as what |
183 // is in algorithm. They are split out for convenience. | 170 // is in algorithm. They are split out for convenience. |
184 // * hash_or_null.isNull() may be true if a hash is not applicable to the | |
185 // algorithm | |
186 // * modulus_length_bits is not 0 | 171 // * modulus_length_bits is not 0 |
187 // * public_exponent is not empty. | 172 // * public_exponent is not empty. |
188 Status GenerateRsaKeyPair(const blink::WebCryptoAlgorithm& algorithm, | 173 Status GenerateRsaKeyPair(const blink::WebCryptoAlgorithm& algorithm, |
189 bool extractable, | 174 bool extractable, |
190 blink::WebCryptoKeyUsageMask usage_mask, | 175 blink::WebCryptoKeyUsageMask usage_mask, |
191 unsigned int modulus_length_bits, | 176 unsigned int modulus_length_bits, |
192 const CryptoData& public_exponent, | 177 const CryptoData& public_exponent, |
193 const blink::WebCryptoAlgorithm& hash, | |
194 blink::WebCryptoKey* public_key, | 178 blink::WebCryptoKey* public_key, |
195 blink::WebCryptoKey* private_key); | 179 blink::WebCryptoKey* private_key); |
196 | 180 |
197 // Preconditions: | 181 // Preconditions: |
198 // * |key| is non-null. | 182 // * |key| is non-null. |
199 // * |algorithm.id()| is for a symmetric key algorithm. | 183 // * |algorithm.id()| is for a symmetric key algorithm. |
200 // * For AES algorithms |key_data| is either 16, 24, or 32 bytes long. | 184 // * For AES algorithms |key_data| is either 16, 24, or 32 bytes long. |
201 // Note that this may be called from target Blink thread. | 185 // Note that this may be called from target Blink thread. |
202 Status ImportKeyRaw(const blink::WebCryptoAlgorithm& algorithm, | 186 Status ImportKeyRaw(const blink::WebCryptoAlgorithm& algorithm, |
203 const CryptoData& key_data, | 187 const CryptoData& key_data, |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 // when the input |data| does not directly represent a key and should instead be | 289 // when the input |data| does not directly represent a key and should instead be |
306 // interpreted as generic bytes. | 290 // interpreted as generic bytes. |
307 // Preconditions: | 291 // Preconditions: |
308 // * |key| is non-null | 292 // * |key| is non-null |
309 // * |data| is at least 24 bytes and a multiple of 8 bytes | 293 // * |data| is at least 24 bytes and a multiple of 8 bytes |
310 // * |buffer| is non-null. | 294 // * |buffer| is non-null. |
311 Status DecryptAesKw(SymKey* key, | 295 Status DecryptAesKw(SymKey* key, |
312 const CryptoData& data, | 296 const CryptoData& data, |
313 std::vector<uint8>* buffer); | 297 std::vector<uint8>* buffer); |
314 | 298 |
315 // Preconditions: | |
316 // * |key| is non-null | |
317 // * |wrapping_key| is non-null | |
318 Status WrapSymKeyRsaEs(SymKey* key, | |
319 PublicKey* wrapping_key, | |
320 std::vector<uint8>* buffer); | |
321 | |
322 // Preconditions: | |
323 // * |wrapping_key| is non-null | |
324 // * |key| is non-null | |
325 // * |algorithm.id()| is for a symmetric key algorithm. | |
326 Status UnwrapSymKeyRsaEs(const CryptoData& wrapped_key_data, | |
327 PrivateKey* wrapping_key, | |
328 const blink::WebCryptoAlgorithm& algorithm, | |
329 bool extractable, | |
330 blink::WebCryptoKeyUsageMask usage_mask, | |
331 blink::WebCryptoKey* key); | |
332 | |
333 } // namespace platform | 299 } // namespace platform |
334 | 300 |
335 } // namespace webcrypto | 301 } // namespace webcrypto |
336 | 302 |
337 } // namespace content | 303 } // namespace content |
338 | 304 |
339 #endif // CONTENT_CHILD_WEBCRYPTO_PLATFORM_CRYPTO_H_ | 305 #endif // CONTENT_CHILD_WEBCRYPTO_PLATFORM_CRYPTO_H_ |
OLD | NEW |