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

Unified Diff: components/proximity_auth/cryptauth/fake_secure_message_delegate_unittest.cc

Issue 1060483002: Add SecureMessage definitions to CryptAuth. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use StartsWithASCII Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: components/proximity_auth/cryptauth/fake_secure_message_delegate_unittest.cc
diff --git a/components/proximity_auth/cryptauth/fake_secure_message_delegate_unittest.cc b/components/proximity_auth/cryptauth/fake_secure_message_delegate_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..12a02cd6068021b5e0529dda01802100ecf84075
--- /dev/null
+++ b/components/proximity_auth/cryptauth/fake_secure_message_delegate_unittest.cc
@@ -0,0 +1,196 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/proximity_auth/cryptauth/fake_secure_message_delegate.h"
+
+#include "base/bind.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace proximity_auth {
+
+namespace {
+
+const char kTestPublicKey[] = "the private key is in another castle";
+const char kPayload[] = "500 tons of uranium";
+const char kSymmetricKey[] = "hunter2";
+const char kPublicMetadata[] = "brought to you by our sponsors";
+const char kAssociatedData[] = "save 20% bytes on your nonce insurance";
+const char kVerificationKeyId[] = "the one with the red stripes";
+const char kDecryptionKeyId[] = "it's in your pocket somewhere";
+
+// Callback for saving the result of GenerateKeys().
+void SaveKeyPair(std::string* private_key_out,
+ std::string* public_key_out,
+ const std::string& private_key,
+ const std::string& public_key) {
+ *private_key_out = private_key;
+ *public_key_out = public_key;
+}
+
+// Callback for saving the result of DeriveKey() and CreateSecureMessage().
+void SaveString(std::string* out, const std::string& value) {
+ *out = value;
+}
+
+// Callback for saving the result of UnwrapSecureMessage().
+void SaveUnwrapResults(std::string* payload_out,
+ securemessage::Header* header_out,
+ bool verified,
+ const std::string& payload,
+ const securemessage::Header& header) {
+ ASSERT_TRUE(verified);
+ *payload_out = payload;
+ *header_out = header;
+}
+
+// Returns the CreateOptions struct to create the test message.
+SecureMessageDelegate::CreateOptions GetCreateOptions(
+ securemessage::EncScheme encryption_scheme,
+ securemessage::SigScheme signature_scheme) {
+ SecureMessageDelegate::CreateOptions create_options;
+ create_options.encryption_scheme = encryption_scheme;
+ create_options.signature_scheme = signature_scheme;
+ create_options.public_metadata = kPublicMetadata;
+ create_options.associated_data = kAssociatedData;
+ create_options.verification_key_id = kVerificationKeyId;
+ create_options.decryption_key_id = kDecryptionKeyId;
+ return create_options;
+}
+
+// Returns the UnwrapOptions struct to unwrap the test message.
+SecureMessageDelegate::UnwrapOptions GetUnwrapOptions(
+ securemessage::EncScheme encryption_scheme,
+ securemessage::SigScheme signature_scheme) {
+ SecureMessageDelegate::UnwrapOptions unwrap_options;
+ unwrap_options.encryption_scheme = encryption_scheme;
+ unwrap_options.signature_scheme = signature_scheme;
+ unwrap_options.associated_data = kAssociatedData;
+ return unwrap_options;
+}
+
+void CheckSerializedSecureMessage(
+ const std::string& serialized_message,
+ const SecureMessageDelegate::CreateOptions& create_options) {
+ securemessage::SecureMessage secure_message;
+ ASSERT_TRUE(secure_message.ParseFromString(serialized_message));
+ securemessage::HeaderAndBody header_and_body;
+ ASSERT_TRUE(
+ header_and_body.ParseFromString(secure_message.header_and_body()));
+
+ const securemessage::Header& header = header_and_body.header();
+ EXPECT_EQ(create_options.signature_scheme, header.signature_scheme());
+ EXPECT_EQ(create_options.encryption_scheme, header.encryption_scheme());
+ EXPECT_EQ(create_options.verification_key_id, header.verification_key_id());
+ EXPECT_EQ(create_options.decryption_key_id, header.decryption_key_id());
+ EXPECT_EQ(create_options.public_metadata, header.public_metadata());
+}
+
+} // namespace
+
+class ProximityAuthFakeSecureMessageDelegateTest : public testing::Test {
+ protected:
+ ProximityAuthFakeSecureMessageDelegateTest() {}
+
+ FakeSecureMessageDelegate delegate_;
+
+ DISALLOW_COPY_AND_ASSIGN(ProximityAuthFakeSecureMessageDelegateTest);
+};
+
+TEST_F(ProximityAuthFakeSecureMessageDelegateTest, GenerateKeyPair) {
+ std::string public_key1, private_key1;
+ delegate_.GenerateKeyPair(
+ base::Bind(&SaveKeyPair, &public_key1, &private_key1));
+ EXPECT_NE(private_key1, public_key1);
+
+ std::string public_key2, private_key2;
+ delegate_.GenerateKeyPair(
+ base::Bind(&SaveKeyPair, &public_key2, &private_key2));
+ EXPECT_NE(private_key2, public_key2);
+
+ EXPECT_NE(public_key1, public_key2);
+ EXPECT_NE(private_key1, private_key2);
+
+ delegate_.set_next_public_key(kTestPublicKey);
+ std::string public_key3, private_key3;
+ delegate_.GenerateKeyPair(
+ base::Bind(&SaveKeyPair, &public_key3, &private_key3));
+ EXPECT_EQ(kTestPublicKey, public_key3);
+ EXPECT_NE(private_key3, public_key3);
+
+ EXPECT_NE(public_key1, public_key3);
+ EXPECT_NE(private_key1, private_key3);
+}
+
+TEST_F(ProximityAuthFakeSecureMessageDelegateTest, DeriveKey) {
+ delegate_.set_next_public_key("key_pair_1");
+ std::string public_key1, private_key1;
+ delegate_.GenerateKeyPair(
+ base::Bind(&SaveKeyPair, &public_key1, &private_key1));
+
+ delegate_.set_next_public_key("key_pair_2");
+ std::string public_key2, private_key2;
+ delegate_.GenerateKeyPair(
+ base::Bind(&SaveKeyPair, &public_key2, &private_key2));
+
+ std::string symmetric_key1, symmetric_key2;
+ delegate_.DeriveKey(private_key1, public_key2,
+ base::Bind(&SaveString, &symmetric_key1));
+ delegate_.DeriveKey(private_key2, public_key1,
+ base::Bind(&SaveString, &symmetric_key2));
+
+ EXPECT_EQ(symmetric_key1, symmetric_key2);
+}
+
+TEST_F(ProximityAuthFakeSecureMessageDelegateTest,
+ CreateAndUnwrapWithSymmetricKey) {
+ // Create SecureMessage using symmetric key.
+ SecureMessageDelegate::CreateOptions create_options =
+ GetCreateOptions(securemessage::AES_256_CBC, securemessage::HMAC_SHA256);
+ std::string serialized_message;
+ delegate_.CreateSecureMessage(kPayload, kSymmetricKey, create_options,
+ base::Bind(&SaveString, &serialized_message));
+
+ CheckSerializedSecureMessage(serialized_message, create_options);
+
+ // Unwrap SecureMessage using symmetric key.
+ SecureMessageDelegate::UnwrapOptions unwrap_options =
+ GetUnwrapOptions(securemessage::AES_256_CBC, securemessage::HMAC_SHA256);
+ std::string payload;
+ securemessage::Header header;
+ delegate_.UnwrapSecureMessage(
+ serialized_message, kSymmetricKey, unwrap_options,
+ base::Bind(&SaveUnwrapResults, &payload, &header));
+
+ EXPECT_EQ(kPayload, payload);
+}
+
+TEST_F(ProximityAuthFakeSecureMessageDelegateTest,
+ CreateAndUnwrapWithAsymmetricKey) {
+ delegate_.set_next_public_key(kTestPublicKey);
+ std::string public_key, private_key;
+ delegate_.GenerateKeyPair(
+ base::Bind(&SaveKeyPair, &public_key, &private_key));
+
+ // Create SecureMessage using asymmetric key.
+ SecureMessageDelegate::CreateOptions create_options =
+ GetCreateOptions(securemessage::NONE, securemessage::ECDSA_P256_SHA256);
+ std::string serialized_message;
+ delegate_.CreateSecureMessage(kPayload, private_key, create_options,
+ base::Bind(&SaveString, &serialized_message));
+
+ CheckSerializedSecureMessage(serialized_message, create_options);
+
+ // Unwrap SecureMessage using symmetric key.
+ SecureMessageDelegate::UnwrapOptions unwrap_options =
+ GetUnwrapOptions(securemessage::NONE, securemessage::ECDSA_P256_SHA256);
+ std::string payload;
+ securemessage::Header header;
+ delegate_.UnwrapSecureMessage(
+ serialized_message, public_key, unwrap_options,
+ base::Bind(&SaveUnwrapResults, &payload, &header));
+
+ EXPECT_EQ(kPayload, payload);
+}
+
+} // proximity_auth

Powered by Google App Engine
This is Rietveld 408576698