summaryrefslogtreecommitdiff
path: root/ecies_kem.cpp
diff options
context:
space:
mode:
authorQuan Nguyen <quannguyen@google.com>2015-05-21 00:49:11 -0700
committerShawn Willden <swillden@google.com>2016-01-20 14:26:06 -0700
commitf7538e0127ec2cb5202b0cbc64ad8305aae6243b (patch)
treefc8e2f672a6b11473913dc1c41c87c602f1b2d82 /ecies_kem.cpp
parentd4c83db6b3bbb83985715fa88fcec580594c1c9c (diff)
downloadkeymaster-f7538e0127ec2cb5202b0cbc64ad8305aae6243b.tar.gz
KDF1 and KDF2
Change-Id: I34a1116adf650eb5fe7937940d7bb768fd28b9a1
Diffstat (limited to 'ecies_kem.cpp')
-rw-r--r--ecies_kem.cpp30
1 files changed, 16 insertions, 14 deletions
diff --git a/ecies_kem.cpp b/ecies_kem.cpp
index 70ef286..b726834 100644
--- a/ecies_kem.cpp
+++ b/ecies_kem.cpp
@@ -88,12 +88,12 @@ bool EciesKem::Encrypt(const uint8_t* peer_public_value, size_t peer_public_valu
}
Buffer shared_secret;
- if (!key_exchange_.get()->CalculateSharedKey(peer_public_value, peer_public_value_len,
- &shared_secret)) {
+ if (!key_exchange_->CalculateSharedKey(peer_public_value, peer_public_value_len,
+ &shared_secret)) {
LOG_E("EciesKem: ECDH failed, can't obtain shared secret", 0);
return false;
}
- if (!key_exchange_.get()->public_value(output_encrypted_key)) {
+ if (!key_exchange_->public_value(output_encrypted_key)) {
LOG_E("EciesKem: Can't obtain public value", 0);
return false;
}
@@ -111,16 +111,17 @@ bool EciesKem::Encrypt(const uint8_t* peer_public_value, size_t peer_public_valu
actual_secret.write(shared_secret.peek_read(), shared_secret.available_read());
if (!kdf_->Init(actual_secret.peek_read(), actual_secret.available_read(), nullptr /* salt */,
- 0 /* salt_len */, nullptr /* info */, 0 /* info_len */,
- key_bytes_to_generate_)) {
+ 0 /* salt_len */)) {
LOG_E("EciesKem: KDF failed, can't derived keys", 0);
return false;
}
-
- if (!kdf_.get()->secret_key(output_clear_key)) {
+ output_clear_key->Reinitialize(key_bytes_to_generate_);
+ if (!kdf_->GenerateKey(nullptr /* info */, 0 /* info length */, output_clear_key->peek_write(),
+ key_bytes_to_generate_)) {
LOG_E("EciesKem: KDF failed, can't derived keys", 0);
return false;
}
+ output_clear_key->advance_write(key_bytes_to_generate_);
return true;
}
@@ -141,14 +142,13 @@ bool EciesKem::Decrypt(EC_KEY* private_key, const uint8_t* encrypted_key, size_t
}
Buffer shared_secret;
- if (!key_exchange_.get()->CalculateSharedKey(encrypted_key, encrypted_key_len,
- &shared_secret)) {
+ if (!key_exchange_->CalculateSharedKey(encrypted_key, encrypted_key_len, &shared_secret)) {
LOG_E("EciesKem: ECDH failed, can't obtain shared secret", 0);
return false;
}
Buffer public_value;
- if (!key_exchange_.get()->public_value(&public_value)) {
+ if (!key_exchange_->public_value(&public_value)) {
LOG_E("%s", "EciesKem: Can't obtain public value");
return false;
}
@@ -165,17 +165,19 @@ bool EciesKem::Decrypt(EC_KEY* private_key, const uint8_t* encrypted_key, size_t
actual_secret.write(z.peek_read(), z.available_read());
actual_secret.write(shared_secret.peek_read(), shared_secret.available_read());
- if (!kdf_.get()->Init(actual_secret.peek_read(), actual_secret.available_read(),
- nullptr /* salt */, 0 /* salt_len */, nullptr /* info */,
- 0 /* info_len */, key_bytes_to_generate_)) {
+ if (!kdf_->Init(actual_secret.peek_read(), actual_secret.available_read(), nullptr /* salt */,
+ 0 /* salt_len */)) {
LOG_E("%s", "EciesKem: KDF failed, can't derived keys");
return false;
}
- if (!kdf_.get()->secret_key(output_key)) {
+ output_key->Reinitialize(key_bytes_to_generate_);
+ if (!kdf_->GenerateKey(nullptr /* info */, 0 /* info_len */, output_key->peek_write(),
+ key_bytes_to_generate_)) {
LOG_E("%s", "EciesKem: KDF failed, can't derived keys");
return false;
}
+ output_key->advance_write(key_bytes_to_generate_);
return true;
}