msm_shared: Implements Crypto Engine v5 driver

Change-Id: I8be7dc210ed7ec861994a4a511b5ccec281e3f43
diff --git a/platform/msm_shared/crypto5_wrapper.c b/platform/msm_shared/crypto5_wrapper.c
new file mode 100644
index 0000000..db12320
--- /dev/null
+++ b/platform/msm_shared/crypto5_wrapper.c
@@ -0,0 +1,112 @@
+/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <debug.h>
+#include <crypto5_wrapper.h>
+
+/* This file is a wrapper to the crypto5_eng.c.
+ * This is required so that we maintian the backward compatibility
+ * with the authentication logic in image_verify.c
+ */
+static struct crypto_dev dev;
+
+void crypto_init_params(struct crypto_init_params * params)
+{
+	crypto5_init_params(&dev, params);
+}
+
+void crypto_eng_cleanup(void)
+{
+	crypto5_cleanup(&dev);
+}
+
+void ce_clock_init(void)
+{
+	/* Clock init is done during crypto_init. */
+}
+
+void crypto_eng_reset(void)
+{
+	/* Reset tied in with the clock init. */
+}
+
+void crypto_eng_init(void)
+{
+	crypto5_init(&dev);
+}
+
+void crypto_set_sha_ctx(void *ctx_ptr,
+						unsigned int bytes_to_write,
+						crypto_auth_alg_type auth_alg,
+						bool first,
+						bool last)
+{
+	crypto_SHA256_ctx *sha256_ctx = (crypto_SHA256_ctx *) ctx_ptr;
+
+	sha256_ctx->flags = 0;
+
+	if (first)
+		sha256_ctx->flags |= CRYPTO_FIRST_CHUNK;
+
+	if (last)
+		sha256_ctx->flags |= CRYPTO_LAST_CHUNK;
+
+	sha256_ctx->bytes_to_write = bytes_to_write;
+
+	crypto5_set_ctx(&dev, ctx_ptr, auth_alg);
+
+	/* Clear the flags. */
+	sha256_ctx->flags = 0;
+}
+
+void crypto_send_data(void *ctx_ptr,
+					  unsigned char *data_ptr,
+					  unsigned int buff_size,
+					  unsigned int bytes_to_write,
+					  unsigned int *ret_status)
+{
+	*ret_status = crypto5_send_data(&dev, ctx_ptr, data_ptr);
+}
+
+void crypto_get_digest(unsigned char *digest_ptr,
+					   unsigned int *ret_status,
+					   crypto_auth_alg_type auth_alg,
+					   bool last)
+{
+	*ret_status = crypto5_get_digest(&dev, digest_ptr, auth_alg);
+}
+
+void crypto_get_ctx(void *ctx_ptr)
+{
+	crypto5_get_ctx(&dev, ctx_ptr);
+}
+
+uint32_t crypto_get_max_auth_blk_size()
+{
+	return crypto5_get_max_auth_blk_size(&dev);
+}
\ No newline at end of file