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

Side by Side Diff: trunk/src/content/child/webcrypto/shared_crypto_unittest.cc

Issue 252213003: Revert 266798 "[webcrypto] Make operations run on a background t..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
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 "content/child/webcrypto/shared_crypto.h" 5 #include "content/child/webcrypto/shared_crypto.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 a.error_details() == b.error_details(); 60 a.error_details() == b.error_details();
61 } 61 }
62 62
63 bool operator!=(const content::webcrypto::Status& a, 63 bool operator!=(const content::webcrypto::Status& a,
64 const content::webcrypto::Status& b) { 64 const content::webcrypto::Status& b) {
65 return !(a == b); 65 return !(a == b);
66 } 66 }
67 67
68 namespace { 68 namespace {
69 69
70 // -----------------------------------------------------------------------------
71 // TODO(eroman): Remove these helpers and convert all of the tests to using the
72 // std::vector<> flavor of functions directly.
73 // -----------------------------------------------------------------------------
74
75 blink::WebArrayBuffer CreateArrayBuffer(const uint8* data,
76 unsigned int data_size) {
77 blink::WebArrayBuffer buffer = blink::WebArrayBuffer::create(data_size, 1);
78 DCHECK(!buffer.isNull());
79 if (data_size) // data_size == 0 might mean the data pointer is invalid
80 memcpy(buffer.data(), data, data_size);
81 return buffer;
82 }
83
84 void AssignWebArrayBuffer(const std::vector<uint8>& in,
85 blink::WebArrayBuffer* out) {
86 *out = CreateArrayBuffer(Uint8VectorStart(in), in.size());
87 }
88
89 Status Encrypt(const blink::WebCryptoAlgorithm& algorithm,
90 const blink::WebCryptoKey& key,
91 const CryptoData& data,
92 blink::WebArrayBuffer* web_buffer) {
93 std::vector<uint8> buffer;
94 Status status = Encrypt(algorithm, key, data, &buffer);
95 AssignWebArrayBuffer(buffer, web_buffer);
96 return status;
97 }
98
99 Status Decrypt(const blink::WebCryptoAlgorithm& algorithm,
100 const blink::WebCryptoKey& key,
101 const CryptoData& data,
102 blink::WebArrayBuffer* web_buffer) {
103 std::vector<uint8> buffer;
104 Status status = Decrypt(algorithm, key, data, &buffer);
105 AssignWebArrayBuffer(buffer, web_buffer);
106 return status;
107 }
108
109 Status Digest(const blink::WebCryptoAlgorithm& algorithm,
110 const CryptoData& data,
111 blink::WebArrayBuffer* web_buffer) {
112 std::vector<uint8> buffer;
113 Status status = Digest(algorithm, data, &buffer);
114 AssignWebArrayBuffer(buffer, web_buffer);
115 return status;
116 }
117
118 Status ExportKey(blink::WebCryptoKeyFormat format,
119 const blink::WebCryptoKey& key,
120 blink::WebArrayBuffer* web_buffer) {
121 std::vector<uint8> buffer;
122 Status status = webcrypto::ExportKey(format, key, &buffer);
123 AssignWebArrayBuffer(buffer, web_buffer);
124 return status;
125 }
126
127 Status Sign(const blink::WebCryptoAlgorithm& algorithm,
128 const blink::WebCryptoKey& key,
129 const CryptoData& data,
130 blink::WebArrayBuffer* web_buffer) {
131 std::vector<uint8> buffer;
132
133 Status status = Sign(algorithm, key, data, &buffer);
134 AssignWebArrayBuffer(buffer, web_buffer);
135 return status;
136 }
137
138 Status WrapKey(blink::WebCryptoKeyFormat format,
139 const blink::WebCryptoKey& wrapping_key,
140 const blink::WebCryptoKey& key_to_wrap,
141 const blink::WebCryptoAlgorithm& wrapping_algorithm,
142 blink::WebArrayBuffer* web_buffer) {
143 std::vector<uint8> buffer;
144
145 Status status = webcrypto::WrapKey(
146 format, wrapping_key, key_to_wrap, wrapping_algorithm, &buffer);
147 AssignWebArrayBuffer(buffer, web_buffer);
148 return status;
149 }
150
151 // -----------------------------------------------------------------------------
152
153 // TODO(eroman): For Linux builds using system NSS, AES-GCM support is a 70 // TODO(eroman): For Linux builds using system NSS, AES-GCM support is a
154 // runtime dependency. Test it by trying to import a key. 71 // runtime dependency. Test it by trying to import a key.
155 // TODO(padolph): Consider caching the result of the import key test. 72 // TODO(padolph): Consider caching the result of the import key test.
156 bool SupportsAesGcm() { 73 bool SupportsAesGcm() {
157 std::vector<uint8> key_raw(16, 0); 74 std::vector<uint8> key_raw(16, 0);
158 75
159 blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); 76 blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
160 Status status = ImportKey(blink::WebCryptoKeyFormatRaw, 77 Status status = ImportKey(blink::WebCryptoKeyFormatRaw,
161 CryptoData(key_raw), 78 CryptoData(key_raw),
162 CreateAlgorithm(blink::WebCryptoAlgorithmIdAesGcm), 79 CreateAlgorithm(blink::WebCryptoAlgorithmIdAesGcm),
(...skipping 1788 matching lines...) Expand 10 before | Expand all | Expand 10 after
1951 EXPECT_EQ(test.usage, key.usages()); 1868 EXPECT_EQ(test.usage, key.usages());
1952 1869
1953 // Export the key in raw format and compare to the original. 1870 // Export the key in raw format and compare to the original.
1954 blink::WebArrayBuffer key_raw_out; 1871 blink::WebArrayBuffer key_raw_out;
1955 ASSERT_EQ(Status::Success(), 1872 ASSERT_EQ(Status::Success(),
1956 ExportKey(blink::WebCryptoKeyFormatRaw, key, &key_raw_out)); 1873 ExportKey(blink::WebCryptoKeyFormatRaw, key, &key_raw_out));
1957 ExpectArrayBufferMatchesHex(test.key_hex, key_raw_out); 1874 ExpectArrayBufferMatchesHex(test.key_hex, key_raw_out);
1958 } 1875 }
1959 } 1876 }
1960 1877
1961 TEST_F(SharedCryptoTest, MAYBE(ExportJwkEmptySymmetricKey)) {
1962 const blink::WebCryptoAlgorithm import_algorithm =
1963 webcrypto::CreateHmacImportAlgorithm(blink::WebCryptoAlgorithmIdSha1);
1964
1965 blink::WebCryptoKeyUsageMask usages = blink::WebCryptoKeyUsageSign;
1966 blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
1967
1968 // Import a zero-byte HMAC key.
1969 const char key_data_hex[] = "";
1970 key = ImportSecretKeyFromRaw(
1971 HexStringToBytes(key_data_hex), import_algorithm, usages);
1972 EXPECT_EQ(0u, key.algorithm().hmacParams()->lengthBits());
1973
1974 // Export the key in JWK format and validate.
1975 blink::WebArrayBuffer json;
1976 ASSERT_EQ(Status::Success(),
1977 ExportKey(blink::WebCryptoKeyFormatJwk, key, &json));
1978 EXPECT_TRUE(VerifySecretJwk(json, "HS1", key_data_hex, usages));
1979
1980 // Now try re-importing the JWK key.
1981 key = blink::WebCryptoKey::createNull();
1982 EXPECT_EQ(Status::Success(),
1983 ImportKey(blink::WebCryptoKeyFormatJwk,
1984 CryptoData(json),
1985 import_algorithm,
1986 true,
1987 usages,
1988 &key));
1989
1990 EXPECT_EQ(blink::WebCryptoKeyTypeSecret, key.type());
1991 EXPECT_EQ(0u, key.algorithm().hmacParams()->lengthBits());
1992
1993 blink::WebArrayBuffer exported_key_data;
1994 EXPECT_EQ(Status::Success(),
1995 ExportKey(blink::WebCryptoKeyFormatRaw, key, &exported_key_data));
1996
1997 EXPECT_EQ(0u, exported_key_data.byteLength());
1998 }
1999
2000 TEST_F(SharedCryptoTest, MAYBE(ImportExportSpki)) { 1878 TEST_F(SharedCryptoTest, MAYBE(ImportExportSpki)) {
2001 // Passing case: Import a valid RSA key in SPKI format. 1879 // Passing case: Import a valid RSA key in SPKI format.
2002 blink::WebCryptoKey key = blink::WebCryptoKey::createNull(); 1880 blink::WebCryptoKey key = blink::WebCryptoKey::createNull();
2003 ASSERT_EQ( 1881 ASSERT_EQ(
2004 Status::Success(), 1882 Status::Success(),
2005 ImportKey(blink::WebCryptoKeyFormatSpki, 1883 ImportKey(blink::WebCryptoKeyFormatSpki,
2006 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)), 1884 CryptoData(HexStringToBytes(kPublicKeySpkiDerHex)),
2007 CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5), 1885 CreateAlgorithm(blink::WebCryptoAlgorithmIdRsaEsPkcs1v1_5),
2008 true, 1886 true,
2009 blink::WebCryptoKeyUsageEncrypt, 1887 blink::WebCryptoKeyUsageEncrypt,
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
2243 algorithm, extractable, usage_mask, &public_key, &private_key)); 2121 algorithm, extractable, usage_mask, &public_key, &private_key));
2244 EXPECT_FALSE(public_key.isNull()); 2122 EXPECT_FALSE(public_key.isNull());
2245 EXPECT_FALSE(private_key.isNull()); 2123 EXPECT_FALSE(private_key.isNull());
2246 EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key.type()); 2124 EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key.type());
2247 EXPECT_EQ(blink::WebCryptoKeyTypePrivate, private_key.type()); 2125 EXPECT_EQ(blink::WebCryptoKeyTypePrivate, private_key.type());
2248 EXPECT_TRUE(public_key.extractable()); 2126 EXPECT_TRUE(public_key.extractable());
2249 EXPECT_EQ(extractable, private_key.extractable()); 2127 EXPECT_EQ(extractable, private_key.extractable());
2250 EXPECT_EQ(usage_mask, public_key.usages()); 2128 EXPECT_EQ(usage_mask, public_key.usages());
2251 EXPECT_EQ(usage_mask, private_key.usages()); 2129 EXPECT_EQ(usage_mask, private_key.usages());
2252 2130
2253 // Successful WebCryptoAlgorithmIdRsaSsaPkcs1v1_5 key generation (sha256) 2131 // Successful WebCryptoAlgorithmIdRsaOaep key generation.
2254 algorithm = 2132 algorithm = CreateRsaHashedKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaOaep,
2255 CreateRsaHashedKeyGenAlgorithm(blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 2133 blink::WebCryptoAlgorithmIdSha256,
2256 blink::WebCryptoAlgorithmIdSha256, 2134 modulus_length,
2257 modulus_length, 2135 public_exponent);
2258 public_exponent);
2259 EXPECT_EQ(Status::Success(), 2136 EXPECT_EQ(Status::Success(),
2260 GenerateKeyPair( 2137 GenerateKeyPair(
2261 algorithm, extractable, usage_mask, &public_key, &private_key)); 2138 algorithm, extractable, usage_mask, &public_key, &private_key));
2262 EXPECT_FALSE(public_key.isNull()); 2139 EXPECT_FALSE(public_key.isNull());
2263 EXPECT_FALSE(private_key.isNull()); 2140 EXPECT_FALSE(private_key.isNull());
2264 EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key.type()); 2141 EXPECT_EQ(blink::WebCryptoKeyTypePublic, public_key.type());
2265 EXPECT_EQ(blink::WebCryptoKeyTypePrivate, private_key.type()); 2142 EXPECT_EQ(blink::WebCryptoKeyTypePrivate, private_key.type());
2266 EXPECT_EQ(modulus_length, 2143 EXPECT_EQ(modulus_length,
2267 public_key.algorithm().rsaHashedParams()->modulusLengthBits()); 2144 public_key.algorithm().rsaHashedParams()->modulusLengthBits());
2268 EXPECT_EQ(modulus_length, 2145 EXPECT_EQ(modulus_length,
(...skipping 1252 matching lines...) Expand 10 before | Expand all | Expand 10 after
3521 algorithm, 3398 algorithm,
3522 CreateAesCbcAlgorithm(std::vector<uint8>(0, 16)), 3399 CreateAesCbcAlgorithm(std::vector<uint8>(0, 16)),
3523 true, 3400 true,
3524 blink::WebCryptoKeyUsageEncrypt, 3401 blink::WebCryptoKeyUsageEncrypt,
3525 &unwrapped_key)); 3402 &unwrapped_key));
3526 } 3403 }
3527 3404
3528 } // namespace webcrypto 3405 } // namespace webcrypto
3529 3406
3530 } // namespace content 3407 } // namespace content
OLDNEW
« no previous file with comments | « trunk/src/content/child/webcrypto/shared_crypto.cc ('k') | trunk/src/content/child/webcrypto/status.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698