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

Side by Side Diff: components/webcrypto/webcrypto_util.h

Issue 1355873002: [refactor] More post-NSS WebCrypto cleanups (utility functions). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address David's comments Created 5 years, 3 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 unified diff | Download patch
« no previous file with comments | « components/webcrypto/webcrypto.gyp ('k') | components/webcrypto/webcrypto_util.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 COMPONENTS_WEBCRYPTO_WEBCRYPTO_UTIL_H_ 5 #ifndef COMPONENTS_WEBCRYPTO_WEBCRYPTO_UTIL_H_
6 #define COMPONENTS_WEBCRYPTO_WEBCRYPTO_UTIL_H_ 6 #define COMPONENTS_WEBCRYPTO_WEBCRYPTO_UTIL_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <string> 9 #include <string>
10 10
11 #include "base/values.h" 11 #include "base/values.h"
12 #include "third_party/WebKit/public/platform/WebCryptoAlgorithm.h" 12 #include "third_party/WebKit/public/platform/WebCryptoAlgorithm.h"
13 #include "third_party/WebKit/public/platform/WebCryptoKey.h" 13 #include "third_party/WebKit/public/platform/WebCryptoKey.h"
14 14
15 // TODO(eroman): The remaining functions in this file need to be sorted
16 // out. They should be moved to a more domain specific location (for
17 // instance test helpers, asymmetric algorithm helpers, etc.).
18
15 namespace webcrypto { 19 namespace webcrypto {
16 20
17 class Status; 21 class Status;
18 22
19 // Creates a WebCryptoAlgorithm without any parameters. 23 // Creates a WebCryptoAlgorithm without any parameters.
20 blink::WebCryptoAlgorithm CreateAlgorithm(blink::WebCryptoAlgorithmId id); 24 blink::WebCryptoAlgorithm CreateAlgorithm(blink::WebCryptoAlgorithmId id);
21 25
22 // Creates an HMAC import algorithm whose inner hash algorithm is determined by
23 // the specified algorithm ID. It is an error to call this method with a hash
24 // algorithm that is not SHA*.
25 blink::WebCryptoAlgorithm CreateHmacImportAlgorithm(
26 blink::WebCryptoAlgorithmId hash_id,
27 unsigned int length_bits);
28
29 // Same as above but without specifying a length.
30 blink::WebCryptoAlgorithm CreateHmacImportAlgorithmNoLength(
31 blink::WebCryptoAlgorithmId hash_id);
32
33 // Creates an import algorithm for RSA algorithms that take a hash. 26 // Creates an import algorithm for RSA algorithms that take a hash.
34 // It is an error to call this with a hash_id that is not a SHA*. 27 // It is an error to call this with a hash_id that is not a SHA*.
35 blink::WebCryptoAlgorithm CreateRsaHashedImportAlgorithm( 28 blink::WebCryptoAlgorithm CreateRsaHashedImportAlgorithm(
36 blink::WebCryptoAlgorithmId id, 29 blink::WebCryptoAlgorithmId id,
37 blink::WebCryptoAlgorithmId hash_id); 30 blink::WebCryptoAlgorithmId hash_id);
38 31
39 // Creates an import algorithm for EC keys. 32 // Creates an import algorithm for EC keys.
40 blink::WebCryptoAlgorithm CreateEcImportAlgorithm( 33 blink::WebCryptoAlgorithm CreateEcImportAlgorithm(
41 blink::WebCryptoAlgorithmId id, 34 blink::WebCryptoAlgorithmId id,
42 blink::WebCryptoNamedCurve named_curve); 35 blink::WebCryptoNamedCurve named_curve);
43 36
44 // Returns true if the set bits in b make up a subset of the set bits in a. 37 // Returns true if the set bits in b make up a subset of the set bits in a.
45 bool ContainsKeyUsages(blink::WebCryptoKeyUsageMask a, 38 bool ContainsKeyUsages(blink::WebCryptoKeyUsageMask a,
46 blink::WebCryptoKeyUsageMask b); 39 blink::WebCryptoKeyUsageMask b);
47 40
48 Status GetAesGcmTagLengthInBits(const blink::WebCryptoAesGcmParams* params,
49 unsigned int* tag_length_bits);
50
51 Status GetAesKeyGenLengthInBits(const blink::WebCryptoAesKeyGenParams* params,
52 unsigned int* keylen_bits);
53
54 Status GetHmacKeyGenLengthInBits(const blink::WebCryptoHmacKeyGenParams* params,
55 unsigned int* keylen_bits);
56
57 // Gets the requested key length in bits for an HMAC import operation.
58 Status GetHmacImportKeyLengthBits(
59 const blink::WebCryptoHmacImportParams* params,
60 unsigned int key_data_byte_length,
61 unsigned int* keylen_bits);
62
63 Status VerifyAesKeyLengthForImport(unsigned int keylen_bytes);
64
65 Status CheckKeyCreationUsages(blink::WebCryptoKeyUsageMask all_possible_usages, 41 Status CheckKeyCreationUsages(blink::WebCryptoKeyUsageMask all_possible_usages,
66 blink::WebCryptoKeyUsageMask actual_usages, 42 blink::WebCryptoKeyUsageMask actual_usages,
67 bool allow_empty_usages); 43 bool allow_empty_usages);
68 44
69 // Extracts the public exponent and modulus length from the Blink parameters. 45 // Extracts the public exponent and modulus length from the Blink parameters.
70 // On success it is guaranteed that: 46 // On success it is guaranteed that:
71 // * public_exponent is either 3 or 65537 47 // * public_exponent is either 3 or 65537
72 // * modulus_length_bits is a multiple of 8 48 // * modulus_length_bits is a multiple of 8
73 // * modulus_length is >= 256 49 // * modulus_length is >= 256
74 // * modulus_length is <= 16K 50 // * modulus_length is <= 16K
(...skipping 23 matching lines...) Expand all
98 74
99 // Rounds a bit count (up) to the nearest byte count. 75 // Rounds a bit count (up) to the nearest byte count.
100 // 76 //
101 // This is mathematically equivalent to (x + 7) / 8, however has no 77 // This is mathematically equivalent to (x + 7) / 8, however has no
102 // possibility of integer overflow. 78 // possibility of integer overflow.
103 template <typename T> 79 template <typename T>
104 T NumBitsToBytes(T x) { 80 T NumBitsToBytes(T x) {
105 return (x / 8) + (7 + (x % 8)) / 8; 81 return (x / 8) + (7 + (x % 8)) / 8;
106 } 82 }
107 83
108 // The "get key length" operation for AES keys.
109 Status GetAesKeyLength(const blink::WebCryptoAlgorithm& key_length_algorithm,
110 bool* has_length_bits,
111 unsigned int* length_bits);
112
113 // The "get key length" operation for HMAC keys.
114 Status GetHmacKeyLength(const blink::WebCryptoAlgorithm& key_length_algorithm,
115 bool* has_length_bits,
116 unsigned int* length_bits);
117 84
118 // Splits the combined usages given to GenerateKey() into the respective usages 85 // Splits the combined usages given to GenerateKey() into the respective usages
119 // for the public key and private key. Returns an error if the usages are 86 // for the public key and private key. Returns an error if the usages are
120 // invalid. 87 // invalid.
121 Status GetUsagesForGenerateAsymmetricKey( 88 Status GetUsagesForGenerateAsymmetricKey(
122 blink::WebCryptoKeyUsageMask combined_usages, 89 blink::WebCryptoKeyUsageMask combined_usages,
123 blink::WebCryptoKeyUsageMask all_public_usages, 90 blink::WebCryptoKeyUsageMask all_public_usages,
124 blink::WebCryptoKeyUsageMask all_private_usages, 91 blink::WebCryptoKeyUsageMask all_private_usages,
125 blink::WebCryptoKeyUsageMask* public_usages, 92 blink::WebCryptoKeyUsageMask* public_usages,
126 blink::WebCryptoKeyUsageMask* private_usages); 93 blink::WebCryptoKeyUsageMask* private_usages);
127 94
128 } // namespace webcrypto 95 } // namespace webcrypto
129 96
130 #endif // COMPONENTS_WEBCRYPTO_WEBCRYPTO_UTIL_H_ 97 #endif // COMPONENTS_WEBCRYPTO_WEBCRYPTO_UTIL_H_
OLDNEW
« no previous file with comments | « components/webcrypto/webcrypto.gyp ('k') | components/webcrypto/webcrypto_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698