Add loggers to crypto operation classes.

Change-Id: I06a83884721f3b9ee7853c9495e18d8ccd093182
diff --git a/asymmetric_key.cpp b/asymmetric_key.cpp
index 40b01fb..12f41b1 100644
--- a/asymmetric_key.cpp
+++ b/asymmetric_key.cpp
@@ -229,10 +229,10 @@
     Operation* op;
     switch (purpose) {
     case KM_PURPOSE_SIGN:
-        op = new RsaSignOperation(purpose, digest, padding, rsa_key_.release());
+        op = new RsaSignOperation(purpose, logger_, digest, padding, rsa_key_.release());
         break;
     case KM_PURPOSE_VERIFY:
-        op = new RsaVerifyOperation(purpose, digest, padding, rsa_key_.release());
+        op = new RsaVerifyOperation(purpose, logger_, digest, padding, rsa_key_.release());
         break;
     default:
         *error = KM_ERROR_UNIMPLEMENTED;
@@ -433,10 +433,10 @@
     Operation* op;
     switch (purpose) {
     case KM_PURPOSE_SIGN:
-        op = new DsaSignOperation(purpose, digest, padding, dsa_key_.release());
+        op = new DsaSignOperation(purpose, logger_, digest, padding, dsa_key_.release());
         break;
     case KM_PURPOSE_VERIFY:
-        op = new DsaVerifyOperation(purpose, digest, padding, dsa_key_.release());
+        op = new DsaVerifyOperation(purpose, logger_, digest, padding, dsa_key_.release());
         break;
     default:
         *error = KM_ERROR_UNIMPLEMENTED;
@@ -601,10 +601,10 @@
     Operation* op;
     switch (purpose) {
     case KM_PURPOSE_SIGN:
-        op = new EcdsaSignOperation(purpose, digest, padding, ecdsa_key_.release());
+        op = new EcdsaSignOperation(purpose, logger_, digest, padding, ecdsa_key_.release());
         break;
     case KM_PURPOSE_VERIFY:
-        op = new EcdsaVerifyOperation(purpose, digest, padding, ecdsa_key_.release());
+        op = new EcdsaVerifyOperation(purpose, logger_, digest, padding, ecdsa_key_.release());
         break;
     default:
         *error = KM_ERROR_UNIMPLEMENTED;
diff --git a/dsa_operation.h b/dsa_operation.h
index 685ec55..969cb61 100644
--- a/dsa_operation.h
+++ b/dsa_operation.h
@@ -29,9 +29,9 @@
 
 class DsaOperation : public Operation {
   public:
-    DsaOperation(keymaster_purpose_t purpose, keymaster_digest_t digest,
+    DsaOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest,
                  keymaster_padding_t padding, DSA* key)
-        : Operation(purpose), dsa_key_(key), digest_(digest), padding_(padding) {}
+        : Operation(purpose, logger), dsa_key_(key), digest_(digest), padding_(padding) {}
     ~DsaOperation();
 
     virtual keymaster_error_t Begin() { return KM_ERROR_OK; }
@@ -49,17 +49,17 @@
 
 class DsaSignOperation : public DsaOperation {
   public:
-    DsaSignOperation(keymaster_purpose_t purpose, keymaster_digest_t digest,
+    DsaSignOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest,
                      keymaster_padding_t padding, DSA* key)
-        : DsaOperation(purpose, digest, padding, key) {}
+        : DsaOperation(purpose, logger, digest, padding, key) {}
     virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output);
 };
 
 class DsaVerifyOperation : public DsaOperation {
   public:
-    DsaVerifyOperation(keymaster_purpose_t purpose, keymaster_digest_t digest,
+    DsaVerifyOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest,
                        keymaster_padding_t padding, DSA* key)
-        : DsaOperation(purpose, digest, padding, key) {}
+        : DsaOperation(purpose, logger, digest, padding, key) {}
     virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output);
 };
 
diff --git a/ecdsa_operation.h b/ecdsa_operation.h
index 473f87f..684c145 100644
--- a/ecdsa_operation.h
+++ b/ecdsa_operation.h
@@ -29,9 +29,9 @@
 
 class EcdsaOperation : public Operation {
   public:
-    EcdsaOperation(keymaster_purpose_t purpose, keymaster_digest_t digest,
+    EcdsaOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest,
                    keymaster_padding_t padding, EC_KEY* key)
-        : Operation(purpose), ecdsa_key_(key), digest_(digest), padding_(padding) {}
+        : Operation(purpose, logger), ecdsa_key_(key), digest_(digest), padding_(padding) {}
     ~EcdsaOperation();
 
     virtual keymaster_error_t Begin() { return KM_ERROR_OK; }
@@ -49,17 +49,17 @@
 
 class EcdsaSignOperation : public EcdsaOperation {
   public:
-    EcdsaSignOperation(keymaster_purpose_t purpose, keymaster_digest_t digest,
+    EcdsaSignOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest,
                        keymaster_padding_t padding, EC_KEY* key)
-        : EcdsaOperation(purpose, digest, padding, key) {}
+        : EcdsaOperation(purpose, logger, digest, padding, key) {}
     virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output);
 };
 
 class EcdsaVerifyOperation : public EcdsaOperation {
   public:
-    EcdsaVerifyOperation(keymaster_purpose_t purpose, keymaster_digest_t digest,
-                         keymaster_padding_t padding, EC_KEY* key)
-        : EcdsaOperation(purpose, digest, padding, key) {}
+    EcdsaVerifyOperation(keymaster_purpose_t purpose, const Logger& logger,
+                         keymaster_digest_t digest, keymaster_padding_t padding, EC_KEY* key)
+        : EcdsaOperation(purpose, logger, digest, padding, key) {}
     virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output);
 };
 
diff --git a/operation.h b/operation.h
index 5d20541..f1be8b2 100644
--- a/operation.h
+++ b/operation.h
@@ -23,6 +23,7 @@
 
 #include <keymaster/google_keymaster_utils.h>
 #include <keymaster/keymaster_defs.h>
+#include <keymaster/logger.h>
 
 namespace keymaster {
 
@@ -31,14 +32,13 @@
  */
 class Operation {
   public:
-    Operation(keymaster_purpose_t purpose) : purpose_(purpose) {
-    }
-    virtual ~Operation() {
-    }
+    Operation(keymaster_purpose_t purpose, const Logger& logger)
+        : purpose_(purpose), logger_(logger) {}
+    virtual ~Operation() {}
 
-    keymaster_purpose_t purpose() const {
-        return purpose_;
-    }
+    keymaster_purpose_t purpose() const { return purpose_; }
+
+    const Logger& logger() { return logger_; }
 
     virtual keymaster_error_t Begin() = 0;
     virtual keymaster_error_t Update(const Buffer& input, Buffer* output) = 0;
@@ -47,6 +47,7 @@
 
   private:
     const keymaster_purpose_t purpose_;
+    const Logger& logger_;
 };
 
 }  // namespace keymaster
diff --git a/rsa_operation.h b/rsa_operation.h
index ad0ebfc..4697866 100644
--- a/rsa_operation.h
+++ b/rsa_operation.h
@@ -27,9 +27,9 @@
 
 class RsaOperation : public Operation {
   public:
-    RsaOperation(keymaster_purpose_t purpose, keymaster_digest_t digest,
+    RsaOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest,
                  keymaster_padding_t padding, RSA* key)
-        : Operation(purpose), rsa_key_(key), digest_(digest), padding_(padding) {}
+        : Operation(purpose, logger), rsa_key_(key), digest_(digest), padding_(padding) {}
     ~RsaOperation();
 
     virtual keymaster_error_t Begin() { return KM_ERROR_OK; }
@@ -47,17 +47,17 @@
 
 class RsaSignOperation : public RsaOperation {
   public:
-    RsaSignOperation(keymaster_purpose_t purpose, keymaster_digest_t digest,
+    RsaSignOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest,
                      keymaster_padding_t padding, RSA* key)
-        : RsaOperation(purpose, digest, padding, key) {}
+        : RsaOperation(purpose, logger, digest, padding, key) {}
     virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output);
 };
 
 class RsaVerifyOperation : public RsaOperation {
   public:
-    RsaVerifyOperation(keymaster_purpose_t purpose, keymaster_digest_t digest,
+    RsaVerifyOperation(keymaster_purpose_t purpose, const Logger& logger, keymaster_digest_t digest,
                        keymaster_padding_t padding, RSA* key)
-        : RsaOperation(purpose, digest, padding, key) {}
+        : RsaOperation(purpose, logger, digest, padding, key) {}
     virtual keymaster_error_t Finish(const Buffer& signature, Buffer* output);
 };