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

Side by Side Diff: components/webcrypto/algorithm_dispatch.cc

Issue 1181413009: move KeyUsageAllows to more logical place(part2) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove AUTHORS change because name is already there Created 5 years, 4 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 | « no previous file | components/webcrypto/webcrypto_util.h » ('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 #include "components/webcrypto/algorithm_dispatch.h" 5 #include "components/webcrypto/algorithm_dispatch.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "components/webcrypto/algorithm_implementation.h" 8 #include "components/webcrypto/algorithm_implementation.h"
9 #include "components/webcrypto/algorithm_registry.h" 9 #include "components/webcrypto/algorithm_registry.h"
10 #include "components/webcrypto/crypto_data.h" 10 #include "components/webcrypto/crypto_data.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 58
59 return impl->ExportKey(format, key, buffer); 59 return impl->ExportKey(format, key, buffer);
60 } 60 }
61 61
62 } // namespace 62 } // namespace
63 63
64 Status Encrypt(const blink::WebCryptoAlgorithm& algorithm, 64 Status Encrypt(const blink::WebCryptoAlgorithm& algorithm,
65 const blink::WebCryptoKey& key, 65 const blink::WebCryptoKey& key,
66 const CryptoData& data, 66 const CryptoData& data,
67 std::vector<uint8_t>* buffer) { 67 std::vector<uint8_t>* buffer) {
68 if (!KeyUsageAllows(key, blink::WebCryptoKeyUsageEncrypt)) 68 if (!key.keyUsageAllows(blink::WebCryptoKeyUsageEncrypt))
69 return Status::ErrorUnexpected(); 69 return Status::ErrorUnexpected();
70 return EncryptDontCheckUsage(algorithm, key, data, buffer); 70 return EncryptDontCheckUsage(algorithm, key, data, buffer);
71 } 71 }
72 72
73 Status Decrypt(const blink::WebCryptoAlgorithm& algorithm, 73 Status Decrypt(const blink::WebCryptoAlgorithm& algorithm,
74 const blink::WebCryptoKey& key, 74 const blink::WebCryptoKey& key,
75 const CryptoData& data, 75 const CryptoData& data,
76 std::vector<uint8_t>* buffer) { 76 std::vector<uint8_t>* buffer) {
77 if (!KeyUsageAllows(key, blink::WebCryptoKeyUsageDecrypt)) 77 if (!key.keyUsageAllows(blink::WebCryptoKeyUsageDecrypt))
78 return Status::ErrorUnexpected(); 78 return Status::ErrorUnexpected();
79 return DecryptDontCheckKeyUsage(algorithm, key, data, buffer); 79 return DecryptDontCheckKeyUsage(algorithm, key, data, buffer);
80 } 80 }
81 81
82 Status Digest(const blink::WebCryptoAlgorithm& algorithm, 82 Status Digest(const blink::WebCryptoAlgorithm& algorithm,
83 const CryptoData& data, 83 const CryptoData& data,
84 std::vector<uint8_t>* buffer) { 84 std::vector<uint8_t>* buffer) {
85 const AlgorithmImplementation* impl = NULL; 85 const AlgorithmImplementation* impl = NULL;
86 Status status = GetAlgorithmImplementation(algorithm.id(), &impl); 86 Status status = GetAlgorithmImplementation(algorithm.id(), &impl);
87 if (status.IsError()) 87 if (status.IsError())
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 std::vector<uint8_t>* buffer) { 143 std::vector<uint8_t>* buffer) {
144 if (!key.extractable()) 144 if (!key.extractable())
145 return Status::ErrorKeyNotExtractable(); 145 return Status::ErrorKeyNotExtractable();
146 return ExportKeyDontCheckExtractability(format, key, buffer); 146 return ExportKeyDontCheckExtractability(format, key, buffer);
147 } 147 }
148 148
149 Status Sign(const blink::WebCryptoAlgorithm& algorithm, 149 Status Sign(const blink::WebCryptoAlgorithm& algorithm,
150 const blink::WebCryptoKey& key, 150 const blink::WebCryptoKey& key,
151 const CryptoData& data, 151 const CryptoData& data,
152 std::vector<uint8_t>* buffer) { 152 std::vector<uint8_t>* buffer) {
153 if (!KeyUsageAllows(key, blink::WebCryptoKeyUsageSign)) 153 if (!key.keyUsageAllows(blink::WebCryptoKeyUsageSign))
154 return Status::ErrorUnexpected(); 154 return Status::ErrorUnexpected();
155 if (algorithm.id() != key.algorithm().id()) 155 if (algorithm.id() != key.algorithm().id())
156 return Status::ErrorUnexpected(); 156 return Status::ErrorUnexpected();
157 157
158 const AlgorithmImplementation* impl = NULL; 158 const AlgorithmImplementation* impl = NULL;
159 Status status = GetAlgorithmImplementation(algorithm.id(), &impl); 159 Status status = GetAlgorithmImplementation(algorithm.id(), &impl);
160 if (status.IsError()) 160 if (status.IsError())
161 return status; 161 return status;
162 162
163 return impl->Sign(algorithm, key, data, buffer); 163 return impl->Sign(algorithm, key, data, buffer);
164 } 164 }
165 165
166 Status Verify(const blink::WebCryptoAlgorithm& algorithm, 166 Status Verify(const blink::WebCryptoAlgorithm& algorithm,
167 const blink::WebCryptoKey& key, 167 const blink::WebCryptoKey& key,
168 const CryptoData& signature, 168 const CryptoData& signature,
169 const CryptoData& data, 169 const CryptoData& data,
170 bool* signature_match) { 170 bool* signature_match) {
171 if (!KeyUsageAllows(key, blink::WebCryptoKeyUsageVerify)) 171 if (!key.keyUsageAllows(blink::WebCryptoKeyUsageVerify))
172 return Status::ErrorUnexpected(); 172 return Status::ErrorUnexpected();
173 if (algorithm.id() != key.algorithm().id()) 173 if (algorithm.id() != key.algorithm().id())
174 return Status::ErrorUnexpected(); 174 return Status::ErrorUnexpected();
175 175
176 const AlgorithmImplementation* impl = NULL; 176 const AlgorithmImplementation* impl = NULL;
177 Status status = GetAlgorithmImplementation(algorithm.id(), &impl); 177 Status status = GetAlgorithmImplementation(algorithm.id(), &impl);
178 if (status.IsError()) 178 if (status.IsError())
179 return status; 179 return status;
180 180
181 return impl->Verify(algorithm, key, signature, data, signature_match); 181 return impl->Verify(algorithm, key, signature, data, signature_match);
182 } 182 }
183 183
184 Status WrapKey(blink::WebCryptoKeyFormat format, 184 Status WrapKey(blink::WebCryptoKeyFormat format,
185 const blink::WebCryptoKey& key_to_wrap, 185 const blink::WebCryptoKey& key_to_wrap,
186 const blink::WebCryptoKey& wrapping_key, 186 const blink::WebCryptoKey& wrapping_key,
187 const blink::WebCryptoAlgorithm& wrapping_algorithm, 187 const blink::WebCryptoAlgorithm& wrapping_algorithm,
188 std::vector<uint8_t>* buffer) { 188 std::vector<uint8_t>* buffer) {
189 if (!KeyUsageAllows(wrapping_key, blink::WebCryptoKeyUsageWrapKey)) 189 if (!wrapping_key.keyUsageAllows(blink::WebCryptoKeyUsageWrapKey))
190 return Status::ErrorUnexpected(); 190 return Status::ErrorUnexpected();
191 191
192 std::vector<uint8_t> exported_data; 192 std::vector<uint8_t> exported_data;
193 Status status = ExportKey(format, key_to_wrap, &exported_data); 193 Status status = ExportKey(format, key_to_wrap, &exported_data);
194 if (status.IsError()) 194 if (status.IsError())
195 return status; 195 return status;
196 return EncryptDontCheckUsage(wrapping_algorithm, wrapping_key, 196 return EncryptDontCheckUsage(wrapping_algorithm, wrapping_key,
197 CryptoData(exported_data), buffer); 197 CryptoData(exported_data), buffer);
198 } 198 }
199 199
200 Status UnwrapKey(blink::WebCryptoKeyFormat format, 200 Status UnwrapKey(blink::WebCryptoKeyFormat format,
201 const CryptoData& wrapped_key_data, 201 const CryptoData& wrapped_key_data,
202 const blink::WebCryptoKey& wrapping_key, 202 const blink::WebCryptoKey& wrapping_key,
203 const blink::WebCryptoAlgorithm& wrapping_algorithm, 203 const blink::WebCryptoAlgorithm& wrapping_algorithm,
204 const blink::WebCryptoAlgorithm& algorithm, 204 const blink::WebCryptoAlgorithm& algorithm,
205 bool extractable, 205 bool extractable,
206 blink::WebCryptoKeyUsageMask usages, 206 blink::WebCryptoKeyUsageMask usages,
207 blink::WebCryptoKey* key) { 207 blink::WebCryptoKey* key) {
208 if (!KeyUsageAllows(wrapping_key, blink::WebCryptoKeyUsageUnwrapKey)) 208 if (!wrapping_key.keyUsageAllows(blink::WebCryptoKeyUsageUnwrapKey))
209 return Status::ErrorUnexpected(); 209 return Status::ErrorUnexpected();
210 if (wrapping_algorithm.id() != wrapping_key.algorithm().id()) 210 if (wrapping_algorithm.id() != wrapping_key.algorithm().id())
211 return Status::ErrorUnexpected(); 211 return Status::ErrorUnexpected();
212 212
213 // Fail fast if the import is doomed to fail. 213 // Fail fast if the import is doomed to fail.
214 const AlgorithmImplementation* import_impl = NULL; 214 const AlgorithmImplementation* import_impl = NULL;
215 Status status = GetAlgorithmImplementation(algorithm.id(), &import_impl); 215 Status status = GetAlgorithmImplementation(algorithm.id(), &import_impl);
216 if (status.IsError()) 216 if (status.IsError())
217 return status; 217 return status;
218 218
(...skipping 13 matching lines...) Expand all
232 // key bytes however this should be OK. For more discussion see 232 // key bytes however this should be OK. For more discussion see
233 // http://crubg.com/372040 233 // http://crubg.com/372040
234 return ImportKey(format, CryptoData(buffer), algorithm, extractable, usages, 234 return ImportKey(format, CryptoData(buffer), algorithm, extractable, usages,
235 key); 235 key);
236 } 236 }
237 237
238 Status DeriveBits(const blink::WebCryptoAlgorithm& algorithm, 238 Status DeriveBits(const blink::WebCryptoAlgorithm& algorithm,
239 const blink::WebCryptoKey& base_key, 239 const blink::WebCryptoKey& base_key,
240 unsigned int length_bits, 240 unsigned int length_bits,
241 std::vector<uint8_t>* derived_bytes) { 241 std::vector<uint8_t>* derived_bytes) {
242 if (!KeyUsageAllows(base_key, blink::WebCryptoKeyUsageDeriveBits)) 242 if (!base_key.keyUsageAllows(blink::WebCryptoKeyUsageDeriveBits))
243 return Status::ErrorUnexpected(); 243 return Status::ErrorUnexpected();
244 244
245 if (algorithm.id() != base_key.algorithm().id()) 245 if (algorithm.id() != base_key.algorithm().id())
246 return Status::ErrorUnexpected(); 246 return Status::ErrorUnexpected();
247 247
248 const AlgorithmImplementation* impl = NULL; 248 const AlgorithmImplementation* impl = NULL;
249 Status status = GetAlgorithmImplementation(algorithm.id(), &impl); 249 Status status = GetAlgorithmImplementation(algorithm.id(), &impl);
250 if (status.IsError()) 250 if (status.IsError())
251 return status; 251 return status;
252 252
253 return impl->DeriveBits(algorithm, base_key, true, length_bits, 253 return impl->DeriveBits(algorithm, base_key, true, length_bits,
254 derived_bytes); 254 derived_bytes);
255 } 255 }
256 256
257 Status DeriveKey(const blink::WebCryptoAlgorithm& algorithm, 257 Status DeriveKey(const blink::WebCryptoAlgorithm& algorithm,
258 const blink::WebCryptoKey& base_key, 258 const blink::WebCryptoKey& base_key,
259 const blink::WebCryptoAlgorithm& import_algorithm, 259 const blink::WebCryptoAlgorithm& import_algorithm,
260 const blink::WebCryptoAlgorithm& key_length_algorithm, 260 const blink::WebCryptoAlgorithm& key_length_algorithm,
261 bool extractable, 261 bool extractable,
262 blink::WebCryptoKeyUsageMask usages, 262 blink::WebCryptoKeyUsageMask usages,
263 blink::WebCryptoKey* derived_key) { 263 blink::WebCryptoKey* derived_key) {
264 if (!KeyUsageAllows(base_key, blink::WebCryptoKeyUsageDeriveKey)) 264 if (!base_key.keyUsageAllows(blink::WebCryptoKeyUsageDeriveKey))
265 return Status::ErrorUnexpected(); 265 return Status::ErrorUnexpected();
266 266
267 if (algorithm.id() != base_key.algorithm().id()) 267 if (algorithm.id() != base_key.algorithm().id())
268 return Status::ErrorUnexpected(); 268 return Status::ErrorUnexpected();
269 269
270 if (import_algorithm.id() != key_length_algorithm.id()) 270 if (import_algorithm.id() != key_length_algorithm.id())
271 return Status::ErrorUnexpected(); 271 return Status::ErrorUnexpected();
272 272
273 const AlgorithmImplementation* import_impl = NULL; 273 const AlgorithmImplementation* import_impl = NULL;
274 Status status = 274 Status status =
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 Status status = GetAlgorithmImplementation(algorithm.id(), &impl); 334 Status status = GetAlgorithmImplementation(algorithm.id(), &impl);
335 if (status.IsError()) 335 if (status.IsError())
336 return false; 336 return false;
337 337
338 status = impl->DeserializeKeyForClone(algorithm, type, extractable, usages, 338 status = impl->DeserializeKeyForClone(algorithm, type, extractable, usages,
339 key_data, key); 339 key_data, key);
340 return status.IsSuccess(); 340 return status.IsSuccess();
341 } 341 }
342 342
343 } // namespace webcrypto 343 } // namespace webcrypto
OLDNEW
« no previous file with comments | « no previous file | components/webcrypto/webcrypto_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698