Commit 1e7444b5 authored by Leonid Baraz's avatar Leonid Baraz Committed by Commit Bot

Modify fake encryptor/decrytor to avoid streaming.

A conversation with experts gave a recommendation to not use
streaming ciphers - instead, accumulate data and do encyption/decryption
at the end (in place).

Bug: b:153649905
Change-Id: I1a146fcf571089c648a75c4d4cbd1b75a6900ff0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2363392Reviewed-by: default avatarZach Trudo <zatrudo@google.com>
Commit-Queue: Leonid Baraz <lbaraz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799281}
parent 1b6c885a
...@@ -24,21 +24,22 @@ class MockRecordHandle : public DecryptorBase::Handle { ...@@ -24,21 +24,22 @@ class MockRecordHandle : public DecryptorBase::Handle {
void AddToRecord(base::StringPiece data, void AddToRecord(base::StringPiece data,
base::OnceCallback<void(Status)> cb) override { base::OnceCallback<void(Status)> cb) override {
// Decrypt data by XORing every byte with the bytes of symmetric key and add // Add piece of data to the record.
// to the record. record_.append(data.data(), data.size());
record_.reserve(record_.size() + data.size());
size_t key_i = 0;
for (const auto& data_byte : data) {
record_.push_back(data_byte ^ symmetric_key_[key_i++]);
if (key_i >= symmetric_key_.size()) {
key_i = 0;
}
}
std::move(cb).Run(Status::StatusOK()); std::move(cb).Run(Status::StatusOK());
} }
void CloseRecord( void CloseRecord(
base::OnceCallback<void(StatusOr<base::StringPiece>)> cb) override { base::OnceCallback<void(StatusOr<base::StringPiece>)> cb) override {
// Decrypt data in place by XORing every byte with the bytes of symmetric
// key.
size_t key_i = 0;
for (auto& record_byte : record_) {
record_byte ^= symmetric_key_[key_i++];
if (key_i >= symmetric_key_.size()) {
key_i = 0;
}
}
std::move(cb).Run(record_); std::move(cb).Run(record_);
delete this; delete this;
} }
......
...@@ -28,21 +28,23 @@ class MockRecordHandle : public EncryptorBase::Handle { ...@@ -28,21 +28,23 @@ class MockRecordHandle : public EncryptorBase::Handle {
void AddToRecord(base::StringPiece data, void AddToRecord(base::StringPiece data,
base::OnceCallback<void(Status)> cb) override { base::OnceCallback<void(Status)> cb) override {
// Encrypt new data by XORing every byte with the symmetric key and add to // Append new data to the record.
// the encrypted record. record_.append(data.data(), data.size());
record_.reserve(record_.size() + data.size());
size_t key_i = 0;
for (const auto& data_byte : data) {
record_.push_back(data_byte ^ symmetric_key_[key_i++]);
if (key_i >= symmetric_key_.size()) {
key_i = 0;
}
}
std::move(cb).Run(Status::StatusOK()); std::move(cb).Run(Status::StatusOK());
} }
void CloseRecord( void CloseRecord(
base::OnceCallback<void(StatusOr<EncryptedRecord>)> cb) override { base::OnceCallback<void(StatusOr<EncryptedRecord>)> cb) override {
// Encrypt all collected data in place by XORing every byte with the
// symmetric key.
size_t key_i = 0;
for (auto& record_byte : record_) {
record_byte ^= symmetric_key_[key_i++];
if (key_i >= symmetric_key_.size()) {
key_i = 0;
}
}
// Encrypt the symmetric key.
encryptor()->EncryptKey( encryptor()->EncryptKey(
symmetric_key_, symmetric_key_,
base::BindOnce( base::BindOnce(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment