Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "components/proximity_auth/cryptauth/fake_secure_message_delegate.h" | |
| 6 | |
| 7 #include "base/bind.h" | |
| 8 #include "testing/gtest/include/gtest/gtest.h" | |
| 9 | |
| 10 namespace proximity_auth { | |
| 11 | |
| 12 namespace { | |
| 13 | |
| 14 const char kTestPublicKey[] = "the private key is in another castle"; | |
| 15 const char kPayload[] = "500 tons of uranium"; | |
| 16 const char kSymmetricKey[] = "hunter2"; | |
| 17 const char kPublicMetadata[] = "brought to you by our sponsors"; | |
| 18 const char kAssociatedData[] = "save 20% bytes on your nonce insurance"; | |
| 19 const char kVerificationKeyId[] = "the one with the red stripes"; | |
| 20 const char kDecryptionKeyId[] = "it's in your pocket somewhere"; | |
|
Ilya Sherman
2015/04/03 22:43:42
:)
Tim Song
2015/04/04 05:06:14
:)
| |
| 21 | |
| 22 void SaveKeyPair(std::string* private_key_out, | |
|
Ilya Sherman
2015/04/03 22:43:42
nit: Please write (brief) doc strings for all thes
Tim Song
2015/04/04 05:06:14
Done.
| |
| 23 std::string* public_key_out, | |
| 24 const std::string& private_key, | |
| 25 const std::string& public_key) { | |
| 26 *private_key_out = private_key; | |
| 27 *public_key_out = public_key; | |
| 28 } | |
| 29 | |
| 30 void SaveString(std::string* out, const std::string& value) { | |
| 31 *out = value; | |
| 32 } | |
| 33 | |
| 34 void SaveUnwrapResults(std::string* payload_out, | |
| 35 securemessage::Header* header_out, | |
| 36 bool verified, | |
| 37 const std::string& payload, | |
| 38 const securemessage::Header& header) { | |
| 39 ASSERT_TRUE(verified); | |
| 40 *payload_out = payload; | |
| 41 *header_out = header; | |
| 42 } | |
| 43 | |
| 44 SecureMessageDelegate::CreateOptions GetCreateOptions( | |
| 45 securemessage::EncScheme encryption_scheme, | |
| 46 securemessage::SigScheme signature_scheme) { | |
| 47 SecureMessageDelegate::CreateOptions create_options; | |
| 48 create_options.encryption_scheme = encryption_scheme; | |
| 49 create_options.signature_scheme = signature_scheme; | |
| 50 create_options.public_metadata = kPublicMetadata; | |
| 51 create_options.associated_data = kAssociatedData; | |
| 52 create_options.verification_key_id = kVerificationKeyId; | |
| 53 create_options.decryption_key_id = kDecryptionKeyId; | |
| 54 return create_options; | |
| 55 } | |
| 56 | |
| 57 SecureMessageDelegate::UnwrapOptions GetUnwrapOptions( | |
| 58 securemessage::EncScheme encryption_scheme, | |
| 59 securemessage::SigScheme signature_scheme) { | |
| 60 SecureMessageDelegate::UnwrapOptions unwrap_options; | |
| 61 unwrap_options.encryption_scheme = encryption_scheme; | |
| 62 unwrap_options.signature_scheme = signature_scheme; | |
| 63 unwrap_options.associated_data = kAssociatedData; | |
| 64 return unwrap_options; | |
| 65 } | |
| 66 | |
| 67 void CheckSerializedSecureMessage( | |
| 68 const std::string& serialized_message, | |
| 69 const SecureMessageDelegate::CreateOptions& create_options) { | |
| 70 securemessage::SecureMessage secure_message; | |
| 71 ASSERT_TRUE(secure_message.ParseFromString(serialized_message)); | |
| 72 securemessage::HeaderAndBody header_and_body; | |
| 73 ASSERT_TRUE( | |
| 74 header_and_body.ParseFromString(secure_message.header_and_body())); | |
| 75 | |
| 76 const securemessage::Header& header = header_and_body.header(); | |
| 77 EXPECT_EQ(create_options.signature_scheme, header.signature_scheme()); | |
| 78 EXPECT_EQ(create_options.encryption_scheme, header.encryption_scheme()); | |
| 79 EXPECT_EQ(create_options.verification_key_id, header.verification_key_id()); | |
| 80 EXPECT_EQ(create_options.decryption_key_id, header.decryption_key_id()); | |
| 81 EXPECT_EQ(create_options.public_metadata, header.public_metadata()); | |
| 82 } | |
| 83 | |
| 84 } // namespace | |
| 85 | |
| 86 class ProximityAuthFakeSecureMessageDelegateTest : public testing::Test { | |
| 87 protected: | |
| 88 ProximityAuthFakeSecureMessageDelegateTest() {} | |
| 89 | |
| 90 FakeSecureMessageDelegate delegate_; | |
| 91 | |
| 92 DISALLOW_COPY_AND_ASSIGN(ProximityAuthFakeSecureMessageDelegateTest); | |
| 93 }; | |
| 94 | |
| 95 TEST_F(ProximityAuthFakeSecureMessageDelegateTest, GenerateKeyPair) { | |
| 96 std::string public_key1, private_key1; | |
| 97 delegate_.GenerateKeyPair( | |
| 98 base::Bind(&SaveKeyPair, &public_key1, &private_key1)); | |
| 99 EXPECT_NE(private_key1, public_key1); | |
| 100 | |
| 101 std::string public_key2, private_key2; | |
| 102 delegate_.GenerateKeyPair( | |
| 103 base::Bind(&SaveKeyPair, &public_key2, &private_key2)); | |
| 104 EXPECT_NE(private_key2, public_key2); | |
| 105 | |
| 106 EXPECT_NE(public_key1, public_key2); | |
| 107 EXPECT_NE(private_key1, private_key2); | |
| 108 | |
| 109 delegate_.set_next_public_key(kTestPublicKey); | |
| 110 std::string public_key3, private_key3; | |
| 111 delegate_.GenerateKeyPair( | |
| 112 base::Bind(&SaveKeyPair, &public_key3, &private_key3)); | |
| 113 EXPECT_EQ(kTestPublicKey, public_key3); | |
| 114 EXPECT_NE(private_key3, public_key3); | |
| 115 | |
| 116 EXPECT_NE(public_key1, public_key3); | |
| 117 EXPECT_NE(private_key1, private_key3); | |
| 118 } | |
| 119 | |
| 120 TEST_F(ProximityAuthFakeSecureMessageDelegateTest, DeriveKey) { | |
| 121 delegate_.set_next_public_key("key_pair_1"); | |
| 122 std::string public_key1, private_key1; | |
| 123 delegate_.GenerateKeyPair( | |
| 124 base::Bind(&SaveKeyPair, &public_key1, &private_key1)); | |
| 125 | |
| 126 delegate_.set_next_public_key("key_pair_2"); | |
| 127 std::string public_key2, private_key2; | |
| 128 delegate_.GenerateKeyPair( | |
| 129 base::Bind(&SaveKeyPair, &public_key2, &private_key2)); | |
| 130 | |
| 131 std::string symmetric_key1, symmetric_key2; | |
| 132 delegate_.DeriveKey(private_key1, public_key2, | |
| 133 base::Bind(&SaveString, &symmetric_key1)); | |
| 134 delegate_.DeriveKey(private_key2, public_key1, | |
| 135 base::Bind(&SaveString, &symmetric_key2)); | |
| 136 | |
| 137 EXPECT_EQ(symmetric_key1, symmetric_key2); | |
| 138 } | |
| 139 | |
| 140 TEST_F(ProximityAuthFakeSecureMessageDelegateTest, | |
| 141 CreateAndUnwrapWithSymmetricKey) { | |
| 142 // Create SecureMessage using symmetric key. | |
| 143 SecureMessageDelegate::CreateOptions create_options = | |
| 144 GetCreateOptions(securemessage::AES_256_CBC, securemessage::HMAC_SHA256); | |
| 145 std::string serialized_message; | |
| 146 delegate_.CreateSecureMessage(kPayload, kSymmetricKey, create_options, | |
| 147 base::Bind(&SaveString, &serialized_message)); | |
| 148 | |
| 149 CheckSerializedSecureMessage(serialized_message, create_options); | |
| 150 | |
| 151 // Unwrap SecureMessage using symmetric key. | |
| 152 SecureMessageDelegate::UnwrapOptions unwrap_options = | |
| 153 GetUnwrapOptions(securemessage::AES_256_CBC, securemessage::HMAC_SHA256); | |
| 154 std::string payload; | |
| 155 securemessage::Header header; | |
| 156 delegate_.UnwrapSecureMessage( | |
| 157 serialized_message, kSymmetricKey, unwrap_options, | |
| 158 base::Bind(&SaveUnwrapResults, &payload, &header)); | |
| 159 | |
| 160 EXPECT_EQ(kPayload, payload); | |
| 161 } | |
| 162 | |
| 163 TEST_F(ProximityAuthFakeSecureMessageDelegateTest, | |
| 164 CreateAndUnwrapWithAsymmetricKey) { | |
| 165 delegate_.set_next_public_key(kTestPublicKey); | |
| 166 std::string public_key, private_key; | |
| 167 delegate_.GenerateKeyPair( | |
| 168 base::Bind(&SaveKeyPair, &public_key, &private_key)); | |
| 169 | |
| 170 // Create SecureMessage using asymmetric key. | |
| 171 SecureMessageDelegate::CreateOptions create_options = | |
| 172 GetCreateOptions(securemessage::NONE, securemessage::ECDSA_P256_SHA256); | |
| 173 std::string serialized_message; | |
| 174 delegate_.CreateSecureMessage(kPayload, private_key, create_options, | |
| 175 base::Bind(&SaveString, &serialized_message)); | |
| 176 | |
| 177 CheckSerializedSecureMessage(serialized_message, create_options); | |
| 178 | |
| 179 // Unwrap SecureMessage using symmetric key. | |
| 180 SecureMessageDelegate::UnwrapOptions unwrap_options = | |
| 181 GetUnwrapOptions(securemessage::NONE, securemessage::ECDSA_P256_SHA256); | |
| 182 std::string payload; | |
| 183 securemessage::Header header; | |
| 184 delegate_.UnwrapSecureMessage( | |
| 185 serialized_message, public_key, unwrap_options, | |
| 186 base::Bind(&SaveUnwrapResults, &payload, &header)); | |
| 187 | |
| 188 EXPECT_EQ(kPayload, payload); | |
| 189 } | |
| 190 | |
| 191 } // proximity_auth | |
| OLD | NEW |