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

Side by Side Diff: content/child/webcrypto/test/aes_cbc_unittest.cc

Issue 745443002: Check that usage isn't empty when generateKey() is called (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add more tests Created 6 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
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 "base/stl_util.h" 5 #include "base/stl_util.h"
6 #include "content/child/webcrypto/algorithm_dispatch.h" 6 #include "content/child/webcrypto/algorithm_dispatch.h"
7 #include "content/child/webcrypto/crypto_data.h" 7 #include "content/child/webcrypto/crypto_data.h"
8 #include "content/child/webcrypto/status.h" 8 #include "content/child/webcrypto/status.h"
9 #include "content/child/webcrypto/test/test_helpers.h" 9 #include "content/child/webcrypto/test/test_helpers.h"
10 #include "content/child/webcrypto/webcrypto_util.h" 10 #include "content/child/webcrypto/webcrypto_util.h"
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 258
259 std::vector<std::vector<uint8_t> > keys; 259 std::vector<std::vector<uint8_t> > keys;
260 std::vector<uint8_t> key_bytes; 260 std::vector<uint8_t> key_bytes;
261 261
262 // Generate a small sample of keys. 262 // Generate a small sample of keys.
263 for (int j = 0; j < 16; ++j) { 263 for (int j = 0; j < 16; ++j) {
264 ASSERT_EQ(Status::Success(), 264 ASSERT_EQ(Status::Success(),
265 GenerateSecretKey( 265 GenerateSecretKey(
266 CreateAesCbcKeyGenAlgorithm(kKeyLength[key_length_i]), 266 CreateAesCbcKeyGenAlgorithm(kKeyLength[key_length_i]),
267 true, 267 true,
268 0, 268 blink::WebCryptoKeyUsageEncrypt,
269 &key)); 269 &key));
270 EXPECT_TRUE(key.handle()); 270 EXPECT_TRUE(key.handle());
271 EXPECT_EQ(blink::WebCryptoKeyTypeSecret, key.type()); 271 EXPECT_EQ(blink::WebCryptoKeyTypeSecret, key.type());
272 ASSERT_EQ(Status::Success(), 272 ASSERT_EQ(Status::Success(),
273 ExportKey(blink::WebCryptoKeyFormatRaw, key, &key_bytes)); 273 ExportKey(blink::WebCryptoKeyFormatRaw, key, &key_bytes));
274 EXPECT_EQ(key_bytes.size() * 8, 274 EXPECT_EQ(key_bytes.size() * 8,
275 key.algorithm().aesParams()->lengthBits()); 275 key.algorithm().aesParams()->lengthBits());
276 keys.push_back(key_bytes); 276 keys.push_back(key_bytes);
277 } 277 }
278 // Ensure all entries in the key sample set are unique. This is a simplistic 278 // Ensure all entries in the key sample set are unique. This is a simplistic
(...skipping 676 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 SCOPED_TRACE(i); 955 SCOPED_TRACE(i);
956 956
957 blink::WebCryptoKey key; 957 blink::WebCryptoKey key;
958 958
959 ASSERT_EQ(Status::ErrorCreateKeyBadUsages(), 959 ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
960 GenerateSecretKey( 960 GenerateSecretKey(
961 CreateAesCbcKeyGenAlgorithm(128), true, bad_usages[i], &key)); 961 CreateAesCbcKeyGenAlgorithm(128), true, bad_usages[i], &key));
962 } 962 }
963 } 963 }
964 964
965 // Generate an AES-CBC key with no usages.
966 TEST(WebCryptoAesCbcTest, GenerateKeyEmptyUsages) {
967 blink::WebCryptoKey key;
968
969 ASSERT_EQ(Status::ErrorCreateKeyBadUsages(),
970 GenerateSecretKey(
971 CreateAesCbcKeyGenAlgorithm(128), true, 0, &key));
972 }
973
965 // Generate an AES-CBC key and an RSA key pair. Use the AES-CBC key to wrap the 974 // Generate an AES-CBC key and an RSA key pair. Use the AES-CBC key to wrap the
966 // key pair (using SPKI format for public key, PKCS8 format for private key). 975 // key pair (using SPKI format for public key, PKCS8 format for private key).
967 // Then unwrap the wrapped key pair and verify that the key data is the same. 976 // Then unwrap the wrapped key pair and verify that the key data is the same.
968 TEST(WebCryptoAesCbcTest, WrapUnwrapRoundtripSpkiPkcs8) { 977 TEST(WebCryptoAesCbcTest, WrapUnwrapRoundtripSpkiPkcs8) {
969 if (!SupportsRsaPrivateKeyImport()) 978 if (!SupportsRsaPrivateKeyImport())
970 return; 979 return;
971 980
972 // Generate the wrapping key. 981 // Generate the wrapping key.
973 blink::WebCryptoKey wrapping_key; 982 blink::WebCryptoKey wrapping_key;
974 ASSERT_EQ(Status::Success(), 983 ASSERT_EQ(Status::Success(),
975 GenerateSecretKey(CreateAesCbcKeyGenAlgorithm(128), 984 GenerateSecretKey(CreateAesCbcKeyGenAlgorithm(128),
976 true, 985 true,
977 blink::WebCryptoKeyUsageWrapKey | 986 blink::WebCryptoKeyUsageWrapKey |
978 blink::WebCryptoKeyUsageUnwrapKey, 987 blink::WebCryptoKeyUsageUnwrapKey,
979 &wrapping_key)); 988 &wrapping_key));
980 989
981 // Generate an RSA key pair to be wrapped. 990 // Generate an RSA key pair to be wrapped.
982 const unsigned int modulus_length = 256; 991 const unsigned int modulus_length = 256;
983 const std::vector<uint8_t> public_exponent = HexStringToBytes("010001"); 992 const std::vector<uint8_t> public_exponent = HexStringToBytes("010001");
984 993
985 blink::WebCryptoKey public_key; 994 blink::WebCryptoKey public_key;
986 blink::WebCryptoKey private_key; 995 blink::WebCryptoKey private_key;
987 ASSERT_EQ(Status::Success(), 996 ASSERT_EQ(Status::Success(),
988 GenerateKeyPair(CreateRsaHashedKeyGenAlgorithm( 997 GenerateKeyPair(CreateRsaHashedKeyGenAlgorithm(
989 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5, 998 blink::WebCryptoAlgorithmIdRsaSsaPkcs1v1_5,
990 blink::WebCryptoAlgorithmIdSha256, 999 blink::WebCryptoAlgorithmIdSha256,
991 modulus_length, 1000 modulus_length,
992 public_exponent), 1001 public_exponent),
993 true, 1002 true,
994 0, 1003 blink::WebCryptoKeyUsageSign,
995 &public_key, 1004 &public_key,
996 &private_key)); 1005 &private_key));
997 1006
998 // Export key pair as SPKI + PKCS8 1007 // Export key pair as SPKI + PKCS8
999 std::vector<uint8_t> public_key_spki; 1008 std::vector<uint8_t> public_key_spki;
1000 ASSERT_EQ( 1009 ASSERT_EQ(
1001 Status::Success(), 1010 Status::Success(),
1002 ExportKey(blink::WebCryptoKeyFormatSpki, public_key, &public_key_spki)); 1011 ExportKey(blink::WebCryptoKeyFormatSpki, public_key, &public_key_spki));
1003 1012
1004 std::vector<uint8_t> private_key_pkcs8; 1013 std::vector<uint8_t> private_key_pkcs8;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1046 1055
1047 blink::WebCryptoKey unwrapped_private_key; 1056 blink::WebCryptoKey unwrapped_private_key;
1048 1057
1049 ASSERT_EQ(Status::Success(), 1058 ASSERT_EQ(Status::Success(),
1050 UnwrapKey(blink::WebCryptoKeyFormatPkcs8, 1059 UnwrapKey(blink::WebCryptoKeyFormatPkcs8,
1051 CryptoData(wrapped_private_key), 1060 CryptoData(wrapped_private_key),
1052 wrapping_key, 1061 wrapping_key,
1053 wrap_algorithm, 1062 wrap_algorithm,
1054 rsa_import_algorithm, 1063 rsa_import_algorithm,
1055 true, 1064 true,
1056 0, 1065 blink::WebCryptoKeyUsageSign,
1057 &unwrapped_private_key)); 1066 &unwrapped_private_key));
1058 1067
1059 // Export unwrapped key pair as SPKI + PKCS8 1068 // Export unwrapped key pair as SPKI + PKCS8
1060 std::vector<uint8_t> unwrapped_public_key_spki; 1069 std::vector<uint8_t> unwrapped_public_key_spki;
1061 ASSERT_EQ(Status::Success(), 1070 ASSERT_EQ(Status::Success(),
1062 ExportKey(blink::WebCryptoKeyFormatSpki, 1071 ExportKey(blink::WebCryptoKeyFormatSpki,
1063 unwrapped_public_key, 1072 unwrapped_public_key,
1064 &unwrapped_public_key_spki)); 1073 &unwrapped_public_key_spki));
1065 1074
1066 std::vector<uint8_t> unwrapped_private_key_pkcs8; 1075 std::vector<uint8_t> unwrapped_private_key_pkcs8;
1067 ASSERT_EQ(Status::Success(), 1076 ASSERT_EQ(Status::Success(),
1068 ExportKey(blink::WebCryptoKeyFormatPkcs8, 1077 ExportKey(blink::WebCryptoKeyFormatPkcs8,
1069 unwrapped_private_key, 1078 unwrapped_private_key,
1070 &unwrapped_private_key_pkcs8)); 1079 &unwrapped_private_key_pkcs8));
1071 1080
1072 EXPECT_EQ(public_key_spki, unwrapped_public_key_spki); 1081 EXPECT_EQ(public_key_spki, unwrapped_public_key_spki);
1073 EXPECT_EQ(private_key_pkcs8, unwrapped_private_key_pkcs8); 1082 EXPECT_EQ(private_key_pkcs8, unwrapped_private_key_pkcs8);
1074 1083
1075 EXPECT_NE(public_key_spki, wrapped_public_key); 1084 EXPECT_NE(public_key_spki, wrapped_public_key);
1076 EXPECT_NE(private_key_pkcs8, wrapped_private_key); 1085 EXPECT_NE(private_key_pkcs8, wrapped_private_key);
1077 } 1086 }
1078 1087
1079 } // namespace 1088 } // namespace
1080 1089
1081 } // namespace webcrypto 1090 } // namespace webcrypto
1082 1091
1083 } // namespace content 1092 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698