OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/algorithms/asymmetric_key_util.h" | 5 #include "components/webcrypto/algorithms/asymmetric_key_util.h" |
6 | 6 |
7 #include <openssl/pkcs12.h> | 7 #include <openssl/pkcs12.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 #include <utility> |
9 | 10 |
10 #include "components/webcrypto/algorithms/util.h" | 11 #include "components/webcrypto/algorithms/util.h" |
11 #include "components/webcrypto/blink_key_handle.h" | 12 #include "components/webcrypto/blink_key_handle.h" |
12 #include "components/webcrypto/crypto_data.h" | 13 #include "components/webcrypto/crypto_data.h" |
13 #include "components/webcrypto/generate_key_result.h" | 14 #include "components/webcrypto/generate_key_result.h" |
14 #include "components/webcrypto/status.h" | 15 #include "components/webcrypto/status.h" |
15 #include "crypto/openssl_util.h" | 16 #include "crypto/openssl_util.h" |
16 | 17 |
17 namespace webcrypto { | 18 namespace webcrypto { |
18 | 19 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 blink::WebCryptoKeyUsageMask usages, | 65 blink::WebCryptoKeyUsageMask usages, |
65 blink::WebCryptoKey* key) { | 66 blink::WebCryptoKey* key) { |
66 // Serialize the key at creation time so that if structured cloning is | 67 // Serialize the key at creation time so that if structured cloning is |
67 // requested it can be done synchronously from the Blink thread. | 68 // requested it can be done synchronously from the Blink thread. |
68 std::vector<uint8_t> spki_data; | 69 std::vector<uint8_t> spki_data; |
69 Status status = ExportPKeySpki(public_key.get(), &spki_data); | 70 Status status = ExportPKeySpki(public_key.get(), &spki_data); |
70 if (status.IsError()) | 71 if (status.IsError()) |
71 return status; | 72 return status; |
72 | 73 |
73 *key = blink::WebCryptoKey::create( | 74 *key = blink::WebCryptoKey::create( |
74 CreateAsymmetricKeyHandle(public_key.Pass(), spki_data), | 75 CreateAsymmetricKeyHandle(std::move(public_key), spki_data), |
75 blink::WebCryptoKeyTypePublic, extractable, algorithm, usages); | 76 blink::WebCryptoKeyTypePublic, extractable, algorithm, usages); |
76 return Status::Success(); | 77 return Status::Success(); |
77 } | 78 } |
78 | 79 |
79 Status CreateWebCryptoPrivateKey(crypto::ScopedEVP_PKEY private_key, | 80 Status CreateWebCryptoPrivateKey(crypto::ScopedEVP_PKEY private_key, |
80 const blink::WebCryptoKeyAlgorithm& algorithm, | 81 const blink::WebCryptoKeyAlgorithm& algorithm, |
81 bool extractable, | 82 bool extractable, |
82 blink::WebCryptoKeyUsageMask usages, | 83 blink::WebCryptoKeyUsageMask usages, |
83 blink::WebCryptoKey* key) { | 84 blink::WebCryptoKey* key) { |
84 // Serialize the key at creation time so that if structured cloning is | 85 // Serialize the key at creation time so that if structured cloning is |
85 // requested it can be done synchronously from the Blink thread. | 86 // requested it can be done synchronously from the Blink thread. |
86 std::vector<uint8_t> pkcs8_data; | 87 std::vector<uint8_t> pkcs8_data; |
87 Status status = ExportPKeyPkcs8(private_key.get(), &pkcs8_data); | 88 Status status = ExportPKeyPkcs8(private_key.get(), &pkcs8_data); |
88 if (status.IsError()) | 89 if (status.IsError()) |
89 return status; | 90 return status; |
90 | 91 |
91 *key = blink::WebCryptoKey::create( | 92 *key = blink::WebCryptoKey::create( |
92 CreateAsymmetricKeyHandle(private_key.Pass(), pkcs8_data), | 93 CreateAsymmetricKeyHandle(std::move(private_key), pkcs8_data), |
93 blink::WebCryptoKeyTypePrivate, extractable, algorithm, usages); | 94 blink::WebCryptoKeyTypePrivate, extractable, algorithm, usages); |
94 return Status::Success(); | 95 return Status::Success(); |
95 } | 96 } |
96 | 97 |
97 Status CheckPrivateKeyCreationUsages( | 98 Status CheckPrivateKeyCreationUsages( |
98 blink::WebCryptoKeyUsageMask all_possible_usages, | 99 blink::WebCryptoKeyUsageMask all_possible_usages, |
99 blink::WebCryptoKeyUsageMask actual_usages) { | 100 blink::WebCryptoKeyUsageMask actual_usages) { |
100 return CheckKeyCreationUsages(all_possible_usages, actual_usages, | 101 return CheckKeyCreationUsages(all_possible_usages, actual_usages, |
101 EmptyUsagePolicy::REJECT_EMPTY); | 102 EmptyUsagePolicy::REJECT_EMPTY); |
102 } | 103 } |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 return status; | 187 return status; |
187 | 188 |
188 *public_usages = combined_usages & all_public_usages; | 189 *public_usages = combined_usages & all_public_usages; |
189 *private_usages = combined_usages & all_private_usages; | 190 *private_usages = combined_usages & all_private_usages; |
190 | 191 |
191 // Ensure that the private key has non-empty usages. | 192 // Ensure that the private key has non-empty usages. |
192 return CheckPrivateKeyCreationUsages(all_private_usages, *private_usages); | 193 return CheckPrivateKeyCreationUsages(all_private_usages, *private_usages); |
193 } | 194 } |
194 | 195 |
195 } // namespace webcrypto | 196 } // namespace webcrypto |
OLD | NEW |