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

Side by Side Diff: content/renderer/webcrypto/webcrypto_impl.cc

Issue 50173002: [webcrypto] Refactor to allow for unspecified "algorithm" to importKey(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
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 "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "third_party/WebKit/public/platform/WebArrayBuffer.h" 9 #include "third_party/WebKit/public/platform/WebArrayBuffer.h"
10 #include "third_party/WebKit/public/platform/WebCryptoAlgorithm.h" 10 #include "third_party/WebKit/public/platform/WebCryptoAlgorithm.h"
(...skipping 22 matching lines...) Expand all
33 memcpy(new_buffer.data(), buffer->data(), new_size); 33 memcpy(new_buffer.data(), buffer->data(), new_size);
34 *buffer = new_buffer; 34 *buffer = new_buffer;
35 } 35 }
36 36
37 void WebCryptoImpl::encrypt( 37 void WebCryptoImpl::encrypt(
38 const WebKit::WebCryptoAlgorithm& algorithm, 38 const WebKit::WebCryptoAlgorithm& algorithm,
39 const WebKit::WebCryptoKey& key, 39 const WebKit::WebCryptoKey& key,
40 const unsigned char* data, 40 const unsigned char* data,
41 unsigned data_size, 41 unsigned data_size,
42 WebKit::WebCryptoResult result) { 42 WebKit::WebCryptoResult result) {
43 DCHECK(!algorithm.isNull());
43 WebKit::WebArrayBuffer buffer; 44 WebKit::WebArrayBuffer buffer;
44 if (!EncryptInternal(algorithm, key, data, data_size, &buffer)) { 45 if (!EncryptInternal(algorithm, key, data, data_size, &buffer)) {
45 result.completeWithError(); 46 result.completeWithError();
46 } else { 47 } else {
47 result.completeWithBuffer(buffer); 48 result.completeWithBuffer(buffer);
48 } 49 }
49 } 50 }
50 51
51 void WebCryptoImpl::decrypt( 52 void WebCryptoImpl::decrypt(
52 const WebKit::WebCryptoAlgorithm& algorithm, 53 const WebKit::WebCryptoAlgorithm& algorithm,
53 const WebKit::WebCryptoKey& key, 54 const WebKit::WebCryptoKey& key,
54 const unsigned char* data, 55 const unsigned char* data,
55 unsigned data_size, 56 unsigned data_size,
56 WebKit::WebCryptoResult result) { 57 WebKit::WebCryptoResult result) {
58 DCHECK(!algorithm.isNull());
57 WebKit::WebArrayBuffer buffer; 59 WebKit::WebArrayBuffer buffer;
58 if (!DecryptInternal(algorithm, key, data, data_size, &buffer)) { 60 if (!DecryptInternal(algorithm, key, data, data_size, &buffer)) {
59 result.completeWithError(); 61 result.completeWithError();
60 } else { 62 } else {
61 result.completeWithBuffer(buffer); 63 result.completeWithBuffer(buffer);
62 } 64 }
63 } 65 }
64 66
65 void WebCryptoImpl::digest( 67 void WebCryptoImpl::digest(
66 const WebKit::WebCryptoAlgorithm& algorithm, 68 const WebKit::WebCryptoAlgorithm& algorithm,
67 const unsigned char* data, 69 const unsigned char* data,
68 unsigned data_size, 70 unsigned data_size,
69 WebKit::WebCryptoResult result) { 71 WebKit::WebCryptoResult result) {
72 DCHECK(!algorithm.isNull());
70 WebKit::WebArrayBuffer buffer; 73 WebKit::WebArrayBuffer buffer;
71 if (!DigestInternal(algorithm, data, data_size, &buffer)) { 74 if (!DigestInternal(algorithm, data, data_size, &buffer)) {
72 result.completeWithError(); 75 result.completeWithError();
73 } else { 76 } else {
74 result.completeWithBuffer(buffer); 77 result.completeWithBuffer(buffer);
75 } 78 }
76 } 79 }
77 80
81 WebKit::WebCryptoKey NullKey() {
82 // TODO(eroman): Expose this in Blink instead.
83 return WebKit::WebCryptoKey::create(NULL, WebKit::WebCryptoKeyTypeSecret,
84 false,
85 WebKit::WebCryptoAlgorithm::createNull(),
86 0);
87 }
88
78 void WebCryptoImpl::generateKey( 89 void WebCryptoImpl::generateKey(
79 const WebKit::WebCryptoAlgorithm& algorithm, 90 const WebKit::WebCryptoAlgorithm& algorithm,
80 bool exportable, 91 bool extractable,
81 WebKit::WebCryptoKeyUsageMask usage, 92 WebKit::WebCryptoKeyUsageMask usage_mask,
82 WebKit::WebCryptoResult result) { 93 WebKit::WebCryptoResult result) {
83 scoped_ptr<WebKit::WebCryptoKeyHandle> handle; 94 DCHECK(!algorithm.isNull());
84 WebKit::WebCryptoKeyType type; 95 WebKit::WebCryptoKey key = NullKey();
85 if (!GenerateKeyInternal(algorithm, &handle, &type)) { 96 if (GenerateKeyInternal(algorithm, extractable, usage_mask, &key)) {
86 result.completeWithError(); 97 DCHECK(key.handle());
87 } else { 98 DCHECK_EQ(algorithm.id(), key.algorithm().id());
88 WebKit::WebCryptoKey key( 99 DCHECK_EQ(extractable, key.extractable());
89 WebKit::WebCryptoKey::create(handle.release(), type, exportable, 100 DCHECK_EQ(usage_mask, key.usages());
90 algorithm, usage));
91 result.completeWithKey(key); 101 result.completeWithKey(key);
102 return;
92 } 103 }
104 result.completeWithError();
Ryan Sleevi 2013/10/30 20:55:53 Should you follow the normal error form here? if
eroman 2013/10/30 21:26:21 Done.
93 } 105 }
94 106
95 void WebCryptoImpl::importKey( 107 void WebCryptoImpl::importKey(
96 WebKit::WebCryptoKeyFormat format, 108 WebKit::WebCryptoKeyFormat format,
97 const unsigned char* key_data, 109 const unsigned char* key_data,
98 unsigned key_data_size, 110 unsigned key_data_size,
99 const WebKit::WebCryptoAlgorithm& algorithm, 111 const WebKit::WebCryptoAlgorithm& algorithm_or_null,
100 bool extractable, 112 bool extractable,
101 WebKit::WebCryptoKeyUsageMask usage_mask, 113 WebKit::WebCryptoKeyUsageMask usage_mask,
102 WebKit::WebCryptoResult result) { 114 WebKit::WebCryptoResult result) {
103 WebKit::WebCryptoKeyType type; 115 WebKit::WebCryptoKey key = NullKey();
104 scoped_ptr<WebKit::WebCryptoKeyHandle> handle; 116 if (ImportKeyInternal(format,
105 117 key_data,
106 if (!ImportKeyInternal(format, 118 key_data_size,
107 key_data, 119 algorithm_or_null,
108 key_data_size, 120 extractable,
109 algorithm, 121 usage_mask,
110 usage_mask, 122 &key)) {
111 &handle, 123 DCHECK(key.handle());
112 &type)) { 124 DCHECK(!key.algorithm().isNull());
113 result.completeWithError(); 125 DCHECK_EQ(extractable, key.extractable());
126 result.completeWithKey(key);
114 return; 127 return;
115 } 128 }
116 129 result.completeWithError();
Ryan Sleevi 2013/10/30 20:55:53 ditto. Why change from the original form?
eroman 2013/10/30 21:26:21 Done.
117 WebKit::WebCryptoKey key(
118 WebKit::WebCryptoKey::create(
119 handle.release(), type, extractable, algorithm, usage_mask));
120
121 result.completeWithKey(key);
122 } 130 }
123 131
124 void WebCryptoImpl::sign( 132 void WebCryptoImpl::sign(
125 const WebKit::WebCryptoAlgorithm& algorithm, 133 const WebKit::WebCryptoAlgorithm& algorithm,
126 const WebKit::WebCryptoKey& key, 134 const WebKit::WebCryptoKey& key,
127 const unsigned char* data, 135 const unsigned char* data,
128 unsigned data_size, 136 unsigned data_size,
129 WebKit::WebCryptoResult result) { 137 WebKit::WebCryptoResult result) {
138 DCHECK(!algorithm.isNull());
130 WebKit::WebArrayBuffer buffer; 139 WebKit::WebArrayBuffer buffer;
131 if (!SignInternal(algorithm, key, data, data_size, &buffer)) { 140 if (!SignInternal(algorithm, key, data, data_size, &buffer)) {
132 result.completeWithError(); 141 result.completeWithError();
133 } else { 142 } else {
134 result.completeWithBuffer(buffer); 143 result.completeWithBuffer(buffer);
135 } 144 }
136 } 145 }
137 146
138 void WebCryptoImpl::verifySignature( 147 void WebCryptoImpl::verifySignature(
139 const WebKit::WebCryptoAlgorithm& algorithm, 148 const WebKit::WebCryptoAlgorithm& algorithm,
140 const WebKit::WebCryptoKey& key, 149 const WebKit::WebCryptoKey& key,
141 const unsigned char* signature, 150 const unsigned char* signature,
142 unsigned signature_size, 151 unsigned signature_size,
143 const unsigned char* data, 152 const unsigned char* data,
144 unsigned data_size, 153 unsigned data_size,
145 WebKit::WebCryptoResult result) { 154 WebKit::WebCryptoResult result) {
155 DCHECK(!algorithm.isNull());
146 bool signature_match = false; 156 bool signature_match = false;
147 if (!VerifySignatureInternal(algorithm, 157 if (!VerifySignatureInternal(algorithm,
148 key, 158 key,
149 signature, 159 signature,
150 signature_size, 160 signature_size,
151 data, 161 data,
152 data_size, 162 data_size,
153 &signature_match)) { 163 &signature_match)) {
154 result.completeWithError(); 164 result.completeWithError();
155 } else { 165 } else {
156 result.completeWithBoolean(signature_match); 166 result.completeWithBoolean(signature_match);
157 } 167 }
158 } 168 }
159 169
160 } // namespace content 170 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/webcrypto/webcrypto_impl.h ('k') | content/renderer/webcrypto/webcrypto_impl_nss.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698