Add RSA encryption and decryption support.
This change was already reviewed, merged and reverted, so I'm skipping
the review step this time.
Change-Id: Ie5b7dba86a7ae7f62eedbdb6eec7b61ef83d0c73
diff --git a/rsa_operation.h b/rsa_operation.h
index 4697866..fb417a7 100644
--- a/rsa_operation.h
+++ b/rsa_operation.h
@@ -27,9 +27,9 @@
class RsaOperation : public Operation {
public:
- RsaOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest,
- keymaster_padding_t padding, RSA* key)
- : Operation(purpose, logger), rsa_key_(key), digest_(digest), padding_(padding) {}
+ RsaOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_padding_t padding,
+ RSA* key)
+ : Operation(purpose, logger), rsa_key_(key), padding_(padding) {}
~RsaOperation();
virtual keymaster_error_t Begin() { return KM_ERROR_OK; }
@@ -40,24 +40,43 @@
keymaster_error_t StoreData(const Buffer& input);
RSA* rsa_key_;
- keymaster_digest_t digest_;
keymaster_padding_t padding_;
Buffer data_;
};
class RsaSignOperation : public RsaOperation {
public:
- RsaSignOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest,
- keymaster_padding_t padding, RSA* key)
- : RsaOperation(purpose, logger, digest, padding, key) {}
+ RsaSignOperation(const Logger& logger, keymaster_digest_t digest, keymaster_padding_t padding,
+ RSA* key)
+ : RsaOperation(KM_PURPOSE_SIGN, logger, padding, key), digest_(digest) {}
virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output);
+
+ private:
+ keymaster_digest_t digest_;
};
class RsaVerifyOperation : public RsaOperation {
public:
- RsaVerifyOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest,
- keymaster_padding_t padding, RSA* key)
- : RsaOperation(purpose, logger, digest, padding, key) {}
+ RsaVerifyOperation(const Logger& logger, keymaster_digest_t digest, keymaster_padding_t padding,
+ RSA* key)
+ : RsaOperation(KM_PURPOSE_VERIFY, logger, padding, key), digest_(digest) {}
+ virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output);
+
+ private:
+ keymaster_digest_t digest_;
+};
+
+class RsaEncryptOperation : public RsaOperation {
+ public:
+ RsaEncryptOperation(const Logger& logger, keymaster_padding_t padding, RSA* key)
+ : RsaOperation(KM_PURPOSE_ENCRYPT, logger, padding, key) {}
+ virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output);
+};
+
+class RsaDecryptOperation : public RsaOperation {
+ public:
+ RsaDecryptOperation(const Logger& logger, keymaster_padding_t padding, RSA* key)
+ : RsaOperation(KM_PURPOSE_DECRYPT, logger, padding, key) {}
virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output);
};