summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn Willden <swillden@google.com>2015-02-05 22:44:24 -0700
committerShawn Willden <swillden@google.com>2015-02-17 15:02:42 -0700
commit111edb3bf8c51be9ffa3bb2454085f0b300c1e7a (patch)
tree094edb17b8ec7917cf1b5f07b0f09adf43fcee20
parentb751033ec92dfc57e5f922d7b55bea2f41ddb7e6 (diff)
downloadandroid_system_keymaster-111edb3bf8c51be9ffa3bb2454085f0b300c1e7a.tar.gz
android_system_keymaster-111edb3bf8c51be9ffa3bb2454085f0b300c1e7a.tar.bz2
android_system_keymaster-111edb3bf8c51be9ffa3bb2454085f0b300c1e7a.zip
Add input & output params to begin operations.
This is in preparation for handling IV/nonce values via params rather than prepended to ciphertext. Change-Id: I657a029eaf66c2218c3f7cc149e86e9d01c41be0
-rw-r--r--aead_mode_operation.cpp3
-rw-r--r--aead_mode_operation.h3
-rw-r--r--ecdsa_operation.h5
-rw-r--r--google_keymaster.cpp3
-rw-r--r--hmac_operation.cpp3
-rw-r--r--hmac_operation.h3
-rw-r--r--operation.h5
-rw-r--r--rsa_operation.h5
8 files changed, 22 insertions, 8 deletions
diff --git a/aead_mode_operation.cpp b/aead_mode_operation.cpp
index 44d98cc..8b117f0 100644
--- a/aead_mode_operation.cpp
+++ b/aead_mode_operation.cpp
@@ -23,7 +23,8 @@
namespace keymaster {
-keymaster_error_t AeadModeOperation::Begin() {
+keymaster_error_t AeadModeOperation::Begin(const AuthorizationSet& /* input_params */,
+ AuthorizationSet* /* output_params */) {
keymaster_error_t error = Initialize(key_, key_size_, nonce_length_, tag_length_);
if (error == KM_ERROR_OK) {
buffer_end_ = 0;
diff --git a/aead_mode_operation.h b/aead_mode_operation.h
index ba75c13..bdebaec 100644
--- a/aead_mode_operation.h
+++ b/aead_mode_operation.h
@@ -47,7 +47,8 @@ class AeadModeOperation : public Operation {
delete[] additional_data_.data;
}
- virtual keymaster_error_t Begin();
+ virtual keymaster_error_t Begin(const AuthorizationSet& /* input_params */,
+ AuthorizationSet* output_params);
virtual keymaster_error_t Update(const Buffer& input, Buffer* output, size_t* input_consumed);
virtual keymaster_error_t Finish(const Buffer& /* signature */, Buffer* output);
diff --git a/ecdsa_operation.h b/ecdsa_operation.h
index fb14f8b..a0dbda6 100644
--- a/ecdsa_operation.h
+++ b/ecdsa_operation.h
@@ -33,7 +33,10 @@ class EcdsaOperation : public Operation {
: Operation(purpose, logger), ecdsa_key_(key) {}
~EcdsaOperation();
- virtual keymaster_error_t Begin() { return KM_ERROR_OK; }
+ virtual keymaster_error_t Begin(const AuthorizationSet& /* input_params */,
+ AuthorizationSet* /* output_params */) {
+ return KM_ERROR_OK;
+ }
virtual keymaster_error_t Update(const Buffer& input, Buffer* output, size_t* input_consumed);
virtual keymaster_error_t Abort() { return KM_ERROR_OK; }
diff --git a/google_keymaster.cpp b/google_keymaster.cpp
index af0ece3..056f643 100644
--- a/google_keymaster.cpp
+++ b/google_keymaster.cpp
@@ -234,7 +234,8 @@ void GoogleKeymaster::BeginOperation(const BeginOperationRequest& request,
if (operation.get() == NULL)
return;
- response->error = operation->Begin();
+ response->output_params.Clear();
+ response->error = operation->Begin(request.additional_params, &response->output_params);
if (response->error != KM_ERROR_OK)
return;
diff --git a/hmac_operation.cpp b/hmac_operation.cpp
index 9050f99..8023662 100644
--- a/hmac_operation.cpp
+++ b/hmac_operation.cpp
@@ -65,7 +65,8 @@ HmacOperation::~HmacOperation() {
HMAC_CTX_cleanup(&ctx_);
}
-keymaster_error_t HmacOperation::Begin() {
+keymaster_error_t HmacOperation::Begin(const AuthorizationSet& /* input_params */,
+ AuthorizationSet* /* output_params */) {
return error_;
}
diff --git a/hmac_operation.h b/hmac_operation.h
index 9299b82..61f76d5 100644
--- a/hmac_operation.h
+++ b/hmac_operation.h
@@ -29,7 +29,8 @@ class HmacOperation : public Operation {
size_t key_data_size, keymaster_digest_t digest, size_t tag_length);
~HmacOperation();
- virtual keymaster_error_t Begin();
+ virtual keymaster_error_t Begin(const AuthorizationSet& /* input_params */,
+ AuthorizationSet* output_params);
virtual keymaster_error_t Update(const Buffer& input, Buffer* output, size_t* input_consumed);
virtual keymaster_error_t Abort();
virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output);
diff --git a/operation.h b/operation.h
index 9aa122c..6d55340 100644
--- a/operation.h
+++ b/operation.h
@@ -27,6 +27,8 @@
namespace keymaster {
+class AuthorizationSet;
+
/**
* Abstract base for all cryptographic operations.
*/
@@ -40,7 +42,8 @@ class Operation {
const Logger& logger() { return logger_; }
- virtual keymaster_error_t Begin() = 0;
+ virtual keymaster_error_t Begin(const AuthorizationSet& input_params,
+ AuthorizationSet* output_params) = 0;
virtual keymaster_error_t Update(const Buffer& input, Buffer* output,
size_t* input_consumed) = 0;
virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output) = 0;
diff --git a/rsa_operation.h b/rsa_operation.h
index 7ffbbce..16548ee 100644
--- a/rsa_operation.h
+++ b/rsa_operation.h
@@ -32,7 +32,10 @@ class RsaOperation : public Operation {
: Operation(purpose, logger), rsa_key_(key), padding_(padding) {}
~RsaOperation();
- virtual keymaster_error_t Begin() { return KM_ERROR_OK; }
+ virtual keymaster_error_t Begin(const AuthorizationSet& /* input_params */,
+ AuthorizationSet* /* output_params */) {
+ return KM_ERROR_OK;
+ }
virtual keymaster_error_t Update(const Buffer& input, Buffer* output, size_t* input_consumed);
virtual keymaster_error_t Abort() { return KM_ERROR_OK; }