1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "crypto/symmetric_key.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "base/string_number_conversions.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(SymmetricKeyTest, GenerateRandomKey) {
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<crypto::SymmetricKey> key(
16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      crypto::SymmetricKey::GenerateRandomKey(crypto::SymmetricKey::AES, 256));
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(NULL != key.get());
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string raw_key;
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(key->GetRawKey(&raw_key));
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(32U, raw_key.size());
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Do it again and check that the keys are different.
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // (Note: this has a one-in-10^77 chance of failure!)
24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<crypto::SymmetricKey> key2(
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      crypto::SymmetricKey::GenerateRandomKey(crypto::SymmetricKey::AES, 256));
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(NULL != key2.get());
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string raw_key2;
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(key2->GetRawKey(&raw_key2));
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(32U, raw_key2.size());
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_NE(raw_key, raw_key2);
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(SymmetricKeyTest, ImportGeneratedKey) {
34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<crypto::SymmetricKey> key1(
35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      crypto::SymmetricKey::GenerateRandomKey(crypto::SymmetricKey::AES, 256));
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(NULL != key1.get());
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string raw_key1;
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(key1->GetRawKey(&raw_key1));
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<crypto::SymmetricKey> key2(
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      crypto::SymmetricKey::Import(crypto::SymmetricKey::AES, raw_key1));
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(NULL != key2.get());
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string raw_key2;
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(key2->GetRawKey(&raw_key2));
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(raw_key1, raw_key2);
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST(SymmetricKeyTest, ImportDerivedKey) {
51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<crypto::SymmetricKey> key1(
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      crypto::SymmetricKey::DeriveKeyFromPassword(
53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          crypto::SymmetricKey::HMAC_SHA1, "password", "somesalt", 1024, 160));
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(NULL != key1.get());
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string raw_key1;
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(key1->GetRawKey(&raw_key1));
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<crypto::SymmetricKey> key2(
59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      crypto::SymmetricKey::Import(crypto::SymmetricKey::HMAC_SHA1, raw_key1));
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(NULL != key2.get());
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string raw_key2;
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(key2->GetRawKey(&raw_key2));
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(raw_key1, raw_key2);
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct PBKDF2TestVector {
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  crypto::SymmetricKey::Algorithm algorithm;
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* password;
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* salt;
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  unsigned int rounds;
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  unsigned int key_size_in_bits;
744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  const char* expected;  // ASCII encoded hex bytes
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass SymmetricKeyDeriveKeyFromPasswordTest
784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    : public testing::TestWithParam<PBKDF2TestVector> {
794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch};
804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST_P(SymmetricKeyDeriveKeyFromPasswordTest, DeriveKeyFromPassword) {
824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  PBKDF2TestVector test_data(GetParam());
834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#if defined(OS_MACOSX)
844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // The OS X crypto libraries have minimum salt and iteration requirements
854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // so some of the tests below will cause them to barf. Skip these.
864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  if (strlen(test_data.salt) < 8 || test_data.rounds < 1000) {
874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    VLOG(1) << "Skipped test vector for " << test_data.expected;
884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    return;
894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  }
904a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif  // OS_MACOSX
914a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<crypto::SymmetricKey> key(
93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      crypto::SymmetricKey::DeriveKeyFromPassword(
944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch          test_data.algorithm,
954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch          test_data.password, test_data.salt,
964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch          test_data.rounds, test_data.key_size_in_bits));
974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  ASSERT_TRUE(NULL != key.get());
984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  std::string raw_key;
1004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  key->GetRawKey(&raw_key);
1014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  EXPECT_EQ(test_data.key_size_in_bits / 8, raw_key.size());
1024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  EXPECT_EQ(test_data.expected,
1034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch            StringToLowerASCII(base::HexEncode(raw_key.data(),
1044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                               raw_key.size())));
1054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
1064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
1074a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochstatic const PBKDF2TestVector kTestVectors[] = {
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // These tests come from
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // http://www.ietf.org/id/draft-josefsson-pbkdf2-test-vectors-00.txt
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::HMAC_SHA1,
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "password",
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "salt",
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    1,
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    160,
1164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "0c60c80f961f0e71f3a9b524af6012062fe037a6",
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::HMAC_SHA1,
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "password",
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "salt",
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    2,
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    160,
1244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "ea6c014dc72d6f8ccd1ed92ace1d41f0d8de8957",
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::HMAC_SHA1,
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "password",
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "salt",
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    4096,
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    160,
1324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "4b007901b765489abead49d926f721d065a429c1",
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This test takes over 30s to run on the trybots.
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if 0
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::HMAC_SHA1,
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "password",
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "salt",
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    16777216,
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    160,
1424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "eefe3d61cd4da4e4e9945b3d6ba2158c2634e984",
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // These tests come from RFC 3962, via BSD source code at
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // http://www.openbsd.org/cgi-bin/cvsweb/src/sbin/bioctl/pbkdf2.c?rev=HEAD&content-type=text/plain
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::HMAC_SHA1,
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "password",
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "ATHENA.MIT.EDUraeburn",
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    1,
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    160,
1544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "cdedb5281bb2f801565a1122b25635150ad1f7a0",
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::HMAC_SHA1,
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "password",
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "ATHENA.MIT.EDUraeburn",
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    2,
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    160,
1624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "01dbee7f4a9e243e988b62c73cda935da05378b9",
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::HMAC_SHA1,
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "password",
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "ATHENA.MIT.EDUraeburn",
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    1200,
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    160,
1704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "5c08eb61fdf71e4e4ec3cf6ba1f5512ba7e52ddb",
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::HMAC_SHA1,
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "password",
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "\0224VxxV4\022", /* 0x1234567878563412 */
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    5,
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    160,
1784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "d1daa78615f287e6a1c8b120d7062a493f98d203",
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::HMAC_SHA1,
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "pass phrase equals block size",
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    1200,
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    160,
1864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "139c30c0966bc32ba55fdbf212530ac9c5ec59f1",
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::HMAC_SHA1,
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "pass phrase exceeds block size",
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    1200,
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    160,
1944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "9ccad6d468770cd51b10e6a68721be611a8b4d28",
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  },
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  {
197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::HMAC_SHA1,
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "\360\235\204\236", /* g-clef (0xf09d849e) */
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    "EXAMPLE.COMpianist",
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    50,
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    160,
2024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "6b9cf26d45455a43a5b8bb276a403b39e7fe37a0",
2034a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  },
2044a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2054a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  // Regression tests for AES keys, derived from the Linux NSS implementation.
2064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  {
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::AES,
2084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "A test password",
2094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "saltsalt",
2104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    1,
2114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    256,
2124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "44899a7777f0e6e8b752f875f02044b8ac593de146de896f2e8a816e315a36de",
2134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  },
2144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  {
215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    crypto::SymmetricKey::AES,
2164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
2174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "pass phrase exceeds block size",
2184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    20,
2194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    256,
2204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    "e0739745dc28b8721ba402e05214d2ac1eab54cf72bee1fba388297a09eb493c",
2214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  },
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochINSTANTIATE_TEST_CASE_P(, SymmetricKeyDeriveKeyFromPasswordTest,
2254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                        testing::ValuesIn(kTestVectors));
226