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

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: Address sleevi comments and make NullKey() work in debug mode 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 16 matching lines...) Expand all
27 if (new_size == buffer->byteLength()) 27 if (new_size == buffer->byteLength())
28 return; 28 return;
29 29
30 WebKit::WebArrayBuffer new_buffer = 30 WebKit::WebArrayBuffer new_buffer =
31 WebKit::WebArrayBuffer::create(new_size, 1); 31 WebKit::WebArrayBuffer::create(new_size, 1);
32 DCHECK(!new_buffer.isNull()); 32 DCHECK(!new_buffer.isNull());
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 // static
38 // TODO(eroman): Expose functionality in Blink instead.
39 WebKit::WebCryptoKey WebCryptoImpl::NullKey() {
40 // Needs a non-null algorithm to succeed.
41 return WebKit::WebCryptoKey::create(
42 NULL, WebKit::WebCryptoKeyTypeSecret, false,
43 WebKit::WebCryptoAlgorithm::adoptParamsAndCreate(
44 WebKit::WebCryptoAlgorithmIdAesGcm, NULL), 0);
45 }
46
37 void WebCryptoImpl::encrypt( 47 void WebCryptoImpl::encrypt(
38 const WebKit::WebCryptoAlgorithm& algorithm, 48 const WebKit::WebCryptoAlgorithm& algorithm,
39 const WebKit::WebCryptoKey& key, 49 const WebKit::WebCryptoKey& key,
40 const unsigned char* data, 50 const unsigned char* data,
41 unsigned data_size, 51 unsigned data_size,
42 WebKit::WebCryptoResult result) { 52 WebKit::WebCryptoResult result) {
53 DCHECK(!algorithm.isNull());
43 WebKit::WebArrayBuffer buffer; 54 WebKit::WebArrayBuffer buffer;
44 if (!EncryptInternal(algorithm, key, data, data_size, &buffer)) { 55 if (!EncryptInternal(algorithm, key, data, data_size, &buffer)) {
45 result.completeWithError(); 56 result.completeWithError();
46 } else { 57 } else {
47 result.completeWithBuffer(buffer); 58 result.completeWithBuffer(buffer);
48 } 59 }
49 } 60 }
50 61
51 void WebCryptoImpl::decrypt( 62 void WebCryptoImpl::decrypt(
52 const WebKit::WebCryptoAlgorithm& algorithm, 63 const WebKit::WebCryptoAlgorithm& algorithm,
53 const WebKit::WebCryptoKey& key, 64 const WebKit::WebCryptoKey& key,
54 const unsigned char* data, 65 const unsigned char* data,
55 unsigned data_size, 66 unsigned data_size,
56 WebKit::WebCryptoResult result) { 67 WebKit::WebCryptoResult result) {
68 DCHECK(!algorithm.isNull());
57 WebKit::WebArrayBuffer buffer; 69 WebKit::WebArrayBuffer buffer;
58 if (!DecryptInternal(algorithm, key, data, data_size, &buffer)) { 70 if (!DecryptInternal(algorithm, key, data, data_size, &buffer)) {
59 result.completeWithError(); 71 result.completeWithError();
60 } else { 72 } else {
61 result.completeWithBuffer(buffer); 73 result.completeWithBuffer(buffer);
62 } 74 }
63 } 75 }
64 76
65 void WebCryptoImpl::digest( 77 void WebCryptoImpl::digest(
66 const WebKit::WebCryptoAlgorithm& algorithm, 78 const WebKit::WebCryptoAlgorithm& algorithm,
67 const unsigned char* data, 79 const unsigned char* data,
68 unsigned data_size, 80 unsigned data_size,
69 WebKit::WebCryptoResult result) { 81 WebKit::WebCryptoResult result) {
82 DCHECK(!algorithm.isNull());
70 WebKit::WebArrayBuffer buffer; 83 WebKit::WebArrayBuffer buffer;
71 if (!DigestInternal(algorithm, data, data_size, &buffer)) { 84 if (!DigestInternal(algorithm, data, data_size, &buffer)) {
72 result.completeWithError(); 85 result.completeWithError();
73 } else { 86 } else {
74 result.completeWithBuffer(buffer); 87 result.completeWithBuffer(buffer);
75 } 88 }
76 } 89 }
77 90
78 void WebCryptoImpl::generateKey( 91 void WebCryptoImpl::generateKey(
79 const WebKit::WebCryptoAlgorithm& algorithm, 92 const WebKit::WebCryptoAlgorithm& algorithm,
80 bool exportable, 93 bool extractable,
81 WebKit::WebCryptoKeyUsageMask usage, 94 WebKit::WebCryptoKeyUsageMask usage_mask,
82 WebKit::WebCryptoResult result) { 95 WebKit::WebCryptoResult result) {
83 scoped_ptr<WebKit::WebCryptoKeyHandle> handle; 96 DCHECK(!algorithm.isNull());
84 WebKit::WebCryptoKeyType type; 97 WebKit::WebCryptoKey key = NullKey();
85 if (!GenerateKeyInternal(algorithm, &handle, &type)) { 98 if (!GenerateKeyInternal(algorithm, extractable, usage_mask, &key)) {
86 result.completeWithError(); 99 result.completeWithError();
87 } else { 100 } else {
88 WebKit::WebCryptoKey key( 101 DCHECK(key.handle());
89 WebKit::WebCryptoKey::create(handle.release(), type, exportable, 102 DCHECK_EQ(algorithm.id(), key.algorithm().id());
90 algorithm, usage)); 103 DCHECK_EQ(extractable, key.extractable());
104 DCHECK_EQ(usage_mask, key.usages());
91 result.completeWithKey(key); 105 result.completeWithKey(key);
92 } 106 }
93 } 107 }
94 108
95 void WebCryptoImpl::importKey( 109 void WebCryptoImpl::importKey(
96 WebKit::WebCryptoKeyFormat format, 110 WebKit::WebCryptoKeyFormat format,
97 const unsigned char* key_data, 111 const unsigned char* key_data,
98 unsigned key_data_size, 112 unsigned key_data_size,
99 const WebKit::WebCryptoAlgorithm& algorithm, 113 const WebKit::WebCryptoAlgorithm& algorithm_or_null,
100 bool extractable, 114 bool extractable,
101 WebKit::WebCryptoKeyUsageMask usage_mask, 115 WebKit::WebCryptoKeyUsageMask usage_mask,
102 WebKit::WebCryptoResult result) { 116 WebKit::WebCryptoResult result) {
103 WebKit::WebCryptoKeyType type; 117 WebKit::WebCryptoKey key = NullKey();
104 scoped_ptr<WebKit::WebCryptoKeyHandle> handle;
105
106 if (!ImportKeyInternal(format, 118 if (!ImportKeyInternal(format,
107 key_data, 119 key_data,
108 key_data_size, 120 key_data_size,
109 algorithm, 121 algorithm_or_null,
122 extractable,
110 usage_mask, 123 usage_mask,
111 &handle, 124 &key)) {
112 &type)) {
113 result.completeWithError(); 125 result.completeWithError();
114 return; 126 return;
115 } 127 }
116 128 DCHECK(key.handle());
117 WebKit::WebCryptoKey key( 129 DCHECK(!key.algorithm().isNull());
118 WebKit::WebCryptoKey::create( 130 DCHECK_EQ(extractable, key.extractable());
119 handle.release(), type, extractable, algorithm, usage_mask));
120
121 result.completeWithKey(key); 131 result.completeWithKey(key);
122 } 132 }
123 133
124 void WebCryptoImpl::sign( 134 void WebCryptoImpl::sign(
125 const WebKit::WebCryptoAlgorithm& algorithm, 135 const WebKit::WebCryptoAlgorithm& algorithm,
126 const WebKit::WebCryptoKey& key, 136 const WebKit::WebCryptoKey& key,
127 const unsigned char* data, 137 const unsigned char* data,
128 unsigned data_size, 138 unsigned data_size,
129 WebKit::WebCryptoResult result) { 139 WebKit::WebCryptoResult result) {
140 DCHECK(!algorithm.isNull());
130 WebKit::WebArrayBuffer buffer; 141 WebKit::WebArrayBuffer buffer;
131 if (!SignInternal(algorithm, key, data, data_size, &buffer)) { 142 if (!SignInternal(algorithm, key, data, data_size, &buffer)) {
132 result.completeWithError(); 143 result.completeWithError();
133 } else { 144 } else {
134 result.completeWithBuffer(buffer); 145 result.completeWithBuffer(buffer);
135 } 146 }
136 } 147 }
137 148
138 void WebCryptoImpl::verifySignature( 149 void WebCryptoImpl::verifySignature(
139 const WebKit::WebCryptoAlgorithm& algorithm, 150 const WebKit::WebCryptoAlgorithm& algorithm,
140 const WebKit::WebCryptoKey& key, 151 const WebKit::WebCryptoKey& key,
141 const unsigned char* signature, 152 const unsigned char* signature,
142 unsigned signature_size, 153 unsigned signature_size,
143 const unsigned char* data, 154 const unsigned char* data,
144 unsigned data_size, 155 unsigned data_size,
145 WebKit::WebCryptoResult result) { 156 WebKit::WebCryptoResult result) {
157 DCHECK(!algorithm.isNull());
146 bool signature_match = false; 158 bool signature_match = false;
147 if (!VerifySignatureInternal(algorithm, 159 if (!VerifySignatureInternal(algorithm,
148 key, 160 key,
149 signature, 161 signature,
150 signature_size, 162 signature_size,
151 data, 163 data,
152 data_size, 164 data_size,
153 &signature_match)) { 165 &signature_match)) {
154 result.completeWithError(); 166 result.completeWithError();
155 } else { 167 } else {
156 result.completeWithBoolean(signature_match); 168 result.completeWithBoolean(signature_match);
157 } 169 }
158 } 170 }
159 171
160 } // namespace content 172 } // 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