OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "content/renderer/webcrypto/webcrypto_impl.h" | 5 #include "content/renderer/webcrypto/webcrypto_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <map> | 9 #include <map> |
10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 | 177 |
178 void WebCryptoImpl::encrypt( | 178 void WebCryptoImpl::encrypt( |
179 const blink::WebCryptoAlgorithm& algorithm, | 179 const blink::WebCryptoAlgorithm& algorithm, |
180 const blink::WebCryptoKey& key, | 180 const blink::WebCryptoKey& key, |
181 const unsigned char* data, | 181 const unsigned char* data, |
182 unsigned data_size, | 182 unsigned data_size, |
183 blink::WebCryptoResult result) { | 183 blink::WebCryptoResult result) { |
184 DCHECK(!algorithm.isNull()); | 184 DCHECK(!algorithm.isNull()); |
185 blink::WebArrayBuffer buffer; | 185 blink::WebArrayBuffer buffer; |
186 Status status = EncryptInternal(algorithm, key, data, data_size, &buffer); | 186 Status status = EncryptInternal(algorithm, key, data, data_size, &buffer); |
187 if (status.IsError()) { | 187 if (status.IsError()) |
188 CompleteWithError(status, &result); | 188 CompleteWithError(status, &result); |
189 } else { | 189 else |
190 result.completeWithBuffer(buffer); | 190 result.completeWithBuffer(buffer); |
191 } | |
192 } | 191 } |
193 | 192 |
194 void WebCryptoImpl::decrypt( | 193 void WebCryptoImpl::decrypt( |
195 const blink::WebCryptoAlgorithm& algorithm, | 194 const blink::WebCryptoAlgorithm& algorithm, |
196 const blink::WebCryptoKey& key, | 195 const blink::WebCryptoKey& key, |
197 const unsigned char* data, | 196 const unsigned char* data, |
198 unsigned data_size, | 197 unsigned data_size, |
199 blink::WebCryptoResult result) { | 198 blink::WebCryptoResult result) { |
200 DCHECK(!algorithm.isNull()); | 199 DCHECK(!algorithm.isNull()); |
201 blink::WebArrayBuffer buffer; | 200 blink::WebArrayBuffer buffer; |
202 Status status = DecryptInternal(algorithm, key, data, data_size, &buffer); | 201 Status status = DecryptInternal(algorithm, key, data, data_size, &buffer); |
203 if (status.IsError()) { | 202 if (status.IsError()) |
204 CompleteWithError(status, &result); | 203 CompleteWithError(status, &result); |
205 } else { | 204 else |
206 result.completeWithBuffer(buffer); | 205 result.completeWithBuffer(buffer); |
207 } | |
208 } | 206 } |
209 | 207 |
210 void WebCryptoImpl::digest( | 208 void WebCryptoImpl::digest( |
211 const blink::WebCryptoAlgorithm& algorithm, | 209 const blink::WebCryptoAlgorithm& algorithm, |
212 const unsigned char* data, | 210 const unsigned char* data, |
213 unsigned data_size, | 211 unsigned data_size, |
214 blink::WebCryptoResult result) { | 212 blink::WebCryptoResult result) { |
215 DCHECK(!algorithm.isNull()); | 213 DCHECK(!algorithm.isNull()); |
216 blink::WebArrayBuffer buffer; | 214 blink::WebArrayBuffer buffer; |
217 Status status = DigestInternal(algorithm, data, data_size, &buffer); | 215 Status status = DigestInternal(algorithm, data, data_size, &buffer); |
218 if (status.IsError()) { | 216 if (status.IsError()) |
219 CompleteWithError(status, &result); | 217 CompleteWithError(status, &result); |
220 } else { | 218 else |
221 result.completeWithBuffer(buffer); | 219 result.completeWithBuffer(buffer); |
222 } | |
223 } | 220 } |
224 | 221 |
225 void WebCryptoImpl::generateKey( | 222 void WebCryptoImpl::generateKey( |
226 const blink::WebCryptoAlgorithm& algorithm, | 223 const blink::WebCryptoAlgorithm& algorithm, |
227 bool extractable, | 224 bool extractable, |
228 blink::WebCryptoKeyUsageMask usage_mask, | 225 blink::WebCryptoKeyUsageMask usage_mask, |
229 blink::WebCryptoResult result) { | 226 blink::WebCryptoResult result) { |
230 DCHECK(!algorithm.isNull()); | 227 DCHECK(!algorithm.isNull()); |
231 if (IsAlgorithmAsymmetric(algorithm)) { | 228 if (IsAlgorithmAsymmetric(algorithm)) { |
232 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); | 229 blink::WebCryptoKey public_key = blink::WebCryptoKey::createNull(); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 result.completeWithKey(key); | 294 result.completeWithKey(key); |
298 } | 295 } |
299 } | 296 } |
300 | 297 |
301 void WebCryptoImpl::exportKey( | 298 void WebCryptoImpl::exportKey( |
302 blink::WebCryptoKeyFormat format, | 299 blink::WebCryptoKeyFormat format, |
303 const blink::WebCryptoKey& key, | 300 const blink::WebCryptoKey& key, |
304 blink::WebCryptoResult result) { | 301 blink::WebCryptoResult result) { |
305 blink::WebArrayBuffer buffer; | 302 blink::WebArrayBuffer buffer; |
306 Status status = ExportKeyInternal(format, key, &buffer); | 303 Status status = ExportKeyInternal(format, key, &buffer); |
307 if (status.IsError()) { | 304 if (status.IsError()) |
308 CompleteWithError(status, &result); | 305 CompleteWithError(status, &result); |
309 } else { | 306 else |
310 result.completeWithBuffer(buffer); | 307 result.completeWithBuffer(buffer); |
311 } | |
312 } | 308 } |
313 | 309 |
314 void WebCryptoImpl::sign( | 310 void WebCryptoImpl::sign( |
315 const blink::WebCryptoAlgorithm& algorithm, | 311 const blink::WebCryptoAlgorithm& algorithm, |
316 const blink::WebCryptoKey& key, | 312 const blink::WebCryptoKey& key, |
317 const unsigned char* data, | 313 const unsigned char* data, |
318 unsigned data_size, | 314 unsigned data_size, |
319 blink::WebCryptoResult result) { | 315 blink::WebCryptoResult result) { |
320 DCHECK(!algorithm.isNull()); | 316 DCHECK(!algorithm.isNull()); |
321 blink::WebArrayBuffer buffer; | 317 blink::WebArrayBuffer buffer; |
322 Status status = SignInternal(algorithm, key, data, data_size, &buffer); | 318 Status status = SignInternal(algorithm, key, data, data_size, &buffer); |
323 if (status.IsError()) { | 319 if (status.IsError()) |
324 CompleteWithError(status, &result); | 320 CompleteWithError(status, &result); |
325 } else { | 321 else |
326 result.completeWithBuffer(buffer); | 322 result.completeWithBuffer(buffer); |
327 } | |
328 } | 323 } |
329 | 324 |
330 void WebCryptoImpl::verifySignature( | 325 void WebCryptoImpl::verifySignature( |
331 const blink::WebCryptoAlgorithm& algorithm, | 326 const blink::WebCryptoAlgorithm& algorithm, |
332 const blink::WebCryptoKey& key, | 327 const blink::WebCryptoKey& key, |
333 const unsigned char* signature, | 328 const unsigned char* signature, |
334 unsigned signature_size, | 329 unsigned signature_size, |
335 const unsigned char* data, | 330 const unsigned char* data, |
336 unsigned data_size, | 331 unsigned data_size, |
337 blink::WebCryptoResult result) { | 332 blink::WebCryptoResult result) { |
338 DCHECK(!algorithm.isNull()); | 333 DCHECK(!algorithm.isNull()); |
339 bool signature_match = false; | 334 bool signature_match = false; |
340 Status status = VerifySignatureInternal(algorithm, | 335 Status status = VerifySignatureInternal(algorithm, |
341 key, | 336 key, |
342 signature, | 337 signature, |
343 signature_size, | 338 signature_size, |
344 data, | 339 data, |
345 data_size, | 340 data_size, |
346 &signature_match); | 341 &signature_match); |
347 if (status.IsError()) { | 342 if (status.IsError()) |
348 CompleteWithError(status, &result); | 343 CompleteWithError(status, &result); |
349 } else { | 344 else |
350 result.completeWithBoolean(signature_match); | 345 result.completeWithBoolean(signature_match); |
351 } | |
352 } | 346 } |
353 | 347 |
354 Status WebCryptoImpl::ImportKeyJwk( | 348 Status WebCryptoImpl::ImportKeyJwk( |
355 const unsigned char* key_data, | 349 const unsigned char* key_data, |
356 unsigned key_data_size, | 350 unsigned key_data_size, |
357 const blink::WebCryptoAlgorithm& algorithm_or_null, | 351 const blink::WebCryptoAlgorithm& algorithm_or_null, |
358 bool extractable, | 352 bool extractable, |
359 blink::WebCryptoKeyUsageMask usage_mask, | 353 blink::WebCryptoKeyUsageMask usage_mask, |
360 blink::WebCryptoKey* key) { | 354 blink::WebCryptoKey* key) { |
361 | 355 |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
642 key); | 636 key); |
643 | 637 |
644 } else { | 638 } else { |
645 return Status::ErrorJwkUnrecognizedKty(); | 639 return Status::ErrorJwkUnrecognizedKty(); |
646 } | 640 } |
647 | 641 |
648 return Status::Success(); | 642 return Status::Success(); |
649 } | 643 } |
650 | 644 |
651 } // namespace content | 645 } // namespace content |
OLD | NEW |