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

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

Issue 2502343003: Moved //components/proximity_auth/cryptauth to //components/cryptauth. (Closed)
Patch Set: Fixed proto #includes. Created 4 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 side-by-side diff with in-line comments
Download patch
Index: components/proximity_auth/cryptauth/fake_secure_message_delegate.cc
diff --git a/components/proximity_auth/cryptauth/fake_secure_message_delegate.cc b/components/proximity_auth/cryptauth/fake_secure_message_delegate.cc
deleted file mode 100644
index 0ed896eeb224e7a84b3e467298eaab65463fe9a9..0000000000000000000000000000000000000000
--- a/components/proximity_auth/cryptauth/fake_secure_message_delegate.cc
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright 2015 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 <stddef.h>
-
-#include <algorithm>
-
-#include "base/callback.h"
-#include "base/md5.h"
-#include "base/strings/string_util.h"
-
-namespace proximity_auth {
-
-namespace {
-
-const char kKeyPrefix[] = "fake_key_";
-const char kPrivateKeyPrefix[] = "private_";
-
-// Encrypts the |plaintext| with the |key| using the |encryption_scheme| and
-// returns the ciphertext.
-std::string Encrypt(const std::string& plaintext,
- const std::string& key,
- const securemessage::EncScheme& encryption_scheme) {
- if (encryption_scheme == securemessage::NONE)
- return plaintext;
-
- // Encrypt with a Vigenere cipher.
- std::string ciphertext;
- ciphertext.resize(plaintext.size());
- for (size_t i = 0; i < plaintext.size(); ++i) {
- unsigned char plaintext_char = plaintext[i];
- unsigned char key_char = key[i % key.size()];
- ciphertext[i] = plaintext_char + key_char;
- }
- return ciphertext;
-}
-
-// Decrypts the |ciphertext| with the |key| using the |encryption_scheme| and
-// returns the plaintext.
-std::string Decrypt(const std::string& ciphertext,
- const std::string& key,
- const securemessage::EncScheme& encryption_scheme) {
- if (encryption_scheme == securemessage::NONE)
- return ciphertext;
-
- // Decrypt with a Vigenere cipher.
- std::string plaintext;
- plaintext.resize(ciphertext.size());
- for (size_t i = 0; i < ciphertext.size(); ++i) {
- unsigned char ciphertext_char = ciphertext[i];
- unsigned char key_char = key[i % key.size()];
- plaintext[i] = ciphertext_char - key_char;
- }
- return plaintext;
-}
-
-// Signs the |payload| and |associated_data| with the |key| using the
-// |signature_scheme| and returns the signature.
-std::string Sign(const std::string& payload,
- const std::string& associated_data,
- const std::string& key) {
- return base::MD5String(payload + "|" + associated_data + "|" + key);
-}
-
-// Verifies that the |signature| for the the |payload| and |associated_data| is
-// valid for the given the |key| and |signature_scheme|.
-bool Verify(const std::string& signature,
- const std::string& payload,
- const std::string& associated_data,
- const std::string& key,
- const securemessage::SigScheme& signature_scheme) {
- std::string signing_key;
-
- if (signature_scheme == securemessage::HMAC_SHA256) {
- signing_key = key;
- } else {
- std::string prefix = kPrivateKeyPrefix;
- bool is_private_key =
- base::StartsWith(key, prefix, base::CompareCase::SENSITIVE);
- signing_key = is_private_key ? key.substr(prefix.size()) : prefix + key;
- }
-
- std::string expected_signature = Sign(payload, associated_data, signing_key);
- return signature == expected_signature;
-}
-
-} // namespace
-
-FakeSecureMessageDelegate::FakeSecureMessageDelegate()
- : next_public_key_(std::string(kKeyPrefix) + "0") {
-}
-
-FakeSecureMessageDelegate::~FakeSecureMessageDelegate() {
-}
-
-void FakeSecureMessageDelegate::GenerateKeyPair(
- const GenerateKeyPairCallback& callback) {
- std::string public_key = next_public_key_;
-
- // The private key is simply the public key prepended with "private_".
- std::string private_key(kPrivateKeyPrefix + public_key);
-
- next_public_key_ = std::string(kKeyPrefix) + base::MD5String(public_key);
-
- callback.Run(public_key, private_key);
-}
-
-void FakeSecureMessageDelegate::DeriveKey(const std::string& private_key,
- const std::string& public_key,
- const DeriveKeyCallback& callback) {
- // To ensure that the same symmetric key is derived for DeriveKey(private1,
- // public2) and DeriveKey(private2, public1), we remove the prefix from the
- // private key so it is equal to its corresponding public key.
- std::string prefix(kPrivateKeyPrefix);
- std::string normalized_private_key =
- base::StartsWith(private_key, prefix, base::CompareCase::SENSITIVE)
- ? private_key.substr(prefix.size())
- : private_key;
-
- std::vector<std::string> keys;
- keys.push_back(normalized_private_key);
- keys.push_back(public_key);
- std::sort(keys.begin(), keys.end());
- callback.Run(base::MD5String(keys[0] + "|" + keys[1]));
-}
-
-void FakeSecureMessageDelegate::CreateSecureMessage(
- const std::string& payload,
- const std::string& key,
- const CreateOptions& create_options,
- const CreateSecureMessageCallback& callback) {
- securemessage::Header header;
- header.set_signature_scheme(create_options.signature_scheme);
- header.set_encryption_scheme(create_options.encryption_scheme);
- if (!create_options.public_metadata.empty())
- header.set_public_metadata(create_options.public_metadata);
- if (!create_options.verification_key_id.empty())
- header.set_verification_key_id(create_options.verification_key_id);
- if (!create_options.decryption_key_id.empty())
- header.set_decryption_key_id(create_options.decryption_key_id);
-
- securemessage::HeaderAndBody header_and_body;
- header_and_body.mutable_header()->CopyFrom(header);
- header_and_body.set_body(
- Encrypt(payload, key, create_options.encryption_scheme));
- std::string serialized_header_and_body;
- header_and_body.SerializeToString(&serialized_header_and_body);
-
- securemessage::SecureMessage secure_message;
- secure_message.set_header_and_body(serialized_header_and_body);
- secure_message.set_signature(
- Sign(payload, create_options.associated_data, key));
-
- std::string serialized_secure_message;
- secure_message.SerializeToString(&serialized_secure_message);
- callback.Run(serialized_secure_message);
-}
-
-void FakeSecureMessageDelegate::UnwrapSecureMessage(
- const std::string& serialized_message,
- const std::string& key,
- const UnwrapOptions& unwrap_options,
- const UnwrapSecureMessageCallback& callback) {
- securemessage::SecureMessage secure_message;
- if (!secure_message.ParseFromString(serialized_message)) {
- LOG(ERROR) << "Failed to parse SecureMessage.";
- callback.Run(false, std::string(), securemessage::Header());
- return;
- }
-
- securemessage::HeaderAndBody header_and_body;
- if (!header_and_body.ParseFromString(secure_message.header_and_body())) {
- LOG(ERROR) << "Failed to parse secure message HeaderAndBody.";
- callback.Run(false, std::string(), securemessage::Header());
- return;
- }
-
- const securemessage::Header& header = header_and_body.header();
- std::string payload =
- Decrypt(header_and_body.body(), key, unwrap_options.encryption_scheme);
-
- bool verified = Verify(secure_message.signature(), payload,
- unwrap_options.associated_data, key,
- unwrap_options.signature_scheme);
- if (verified) {
- callback.Run(true, payload, header);
- } else {
- callback.Run(false, std::string(), securemessage::Header());
- }
-}
-
-std::string FakeSecureMessageDelegate::GetPrivateKeyForPublicKey(
- const std::string& public_key) {
- return kPrivateKeyPrefix + public_key;
-}
-
-} // namespace proximity_auth

Powered by Google App Engine
This is Rietveld 408576698