Add hash operation support to Crypto service provider

Adds support for multi-step hash operations.  Only includes
protocol support for packed-c serialization at the moment.
Protobuf serialization still needs to be added.  Includes
crypto context management that can be used for any multi-
step operations such as MAC and symmetric encrypt/decrypt.

Signed-off-by: Julian Hall <julian.hall@arm.com>
Change-Id: Ib51a9737f1987e1e7531da7edb38d9dc4095cc7e
diff --git a/components/service/crypto/client/cpp/crypto_client.h b/components/service/crypto/client/cpp/crypto_client.h
index 4884344..03cf4b3 100644
--- a/components/service/crypto/client/cpp/crypto_client.h
+++ b/components/service/crypto/client/cpp/crypto_client.h
@@ -24,7 +24,8 @@
     int err_rpc_status() const;
 
     /* Key lifecycle methods */
-    virtual psa_status_t generate_key(const psa_key_attributes_t *attributes, psa_key_id_t *id) = 0;
+    virtual psa_status_t generate_key(const psa_key_attributes_t *attributes,
+                            psa_key_id_t *id) = 0;
     virtual psa_status_t destroy_key(psa_key_id_t id) = 0;
     virtual psa_status_t import_key(const psa_key_attributes_t *attributes,
                             const uint8_t *data, size_t data_length, psa_key_id_t *id) = 0;
@@ -39,7 +40,8 @@
     /* Sign/verify methods */
     virtual psa_status_t sign_hash(psa_key_id_t id, psa_algorithm_t alg,
                             const uint8_t *hash, size_t hash_length,
-                            uint8_t *signature, size_t signature_size, size_t *signature_length) = 0;
+                            uint8_t *signature, size_t signature_size,
+                            size_t *signature_length) = 0;
     virtual psa_status_t verify_hash(psa_key_id_t id, psa_algorithm_t alg,
                             const uint8_t *hash, size_t hash_length,
                             const uint8_t *signature, size_t signature_length) = 0;
@@ -57,6 +59,14 @@
     /* Random number generation */
     virtual psa_status_t generate_random(uint8_t *output, size_t output_size) = 0;
 
+    /* Hash methods */
+    virtual psa_status_t hash_setup(uint32_t *op_handle,
+                            psa_algorithm_t alg) = 0;
+    virtual psa_status_t hash_update(uint32_t op_handle,
+                            const uint8_t *input, size_t input_length) = 0;
+    virtual psa_status_t hash_finish(uint32_t op_handle,
+                            uint8_t *hash, size_t hash_size, size_t *hash_length) = 0;
+
 protected:
     crypto_client();
     crypto_client(struct rpc_caller *caller);