]> git.sur5r.net Git - freertos/blobdiff - FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/AtmelFiles/drivers/peripherals/sha.c
Add SAMA5D2 Xplained IAR demo.
[freertos] / FreeRTOS / Demo / CORTEX_A5_SAMA5D2x_Xplained_IAR / AtmelFiles / drivers / peripherals / sha.c
diff --git a/FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/AtmelFiles/drivers/peripherals/sha.c b/FreeRTOS/Demo/CORTEX_A5_SAMA5D2x_Xplained_IAR/AtmelFiles/drivers/peripherals/sha.c
new file mode 100644 (file)
index 0000000..b12bbf7
--- /dev/null
@@ -0,0 +1,135 @@
+/* ----------------------------------------------------------------------------\r
+ *         SAM Software Package License\r
+ * ----------------------------------------------------------------------------\r
+ * Copyright (c) 2015, Atmel Corporation\r
+ *\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * - Redistributions of source code must retain the above copyright notice,\r
+ * this list of conditions and the disclaimer below.\r
+ *\r
+ * Atmel's name may not be used to endorse or promote products derived from\r
+ * this software without specific prior written permission.\r
+ *\r
+ * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+ * ----------------------------------------------------------------------------\r
+ */\r
+\r
+/** \addtogroup sha_module Working with SHA\r
+ * \ingroup peripherals_module\r
+ * The SHA driver provides the interface to configure and use the SHA\r
+ * peripheral.\r
+ * \n\r
+ *\r
+ * The Secure Hash Algorithm (SHA) module requires a padded message\r
+ * according to FIPS180-2 specification. The first block of the\r
+ * message must be indicated to the module by a specific command. The\r
+ * SHA module produces a N-bit message digest each time a block is\r
+ * written and processing period ends. N is 160 for SHA1, 224 for\r
+ * SHA224, 256 for SHA256, 384 for SHA384, 512 for SHA512.\r
+ *\r
+ * To Enable a SHA encryption and decrypt,the user has to follow these\r
+ * few steps:\r
+ * <ul>\r
+ * <li> Configure SHA algorithm mode, key mode, start mode and\r
+ * operation mode by sha_configure(). </li>\r
+ * <li> Set sha_first_block() to indicates that the next block to\r
+ * process is the first one of a message.</li>\r
+ * <li> Input data for encryption by sha_set_input(). </li>\r
+ * <li> To start the encryption process with sha_start()</li>\r
+ * <li> To get the encryption reslut by sha_get_output() </li>\r
+ * </ul>\r
+ *\r
+ * For more accurate information, please look at the SHA section of the\r
+ * Datasheet.\r
+ *\r
+ * Related files :\n\r
+ * \ref sha.c\n\r
+ * \ref sha.h\n\r
+ */\r
+/*@{*/\r
+/*@}*/\r
+\r
+/**\r
+ * \file\r
+ *\r
+ * Implementation of Secure Hash Algorithm (SHA)\r
+ *\r
+ */\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Headers\r
+ *----------------------------------------------------------------------------*/\r
+\r
+#include "chip.h"\r
+#include "peripherals/sha.h"\r
+\r
+/*----------------------------------------------------------------------------\r
+ *        Exported functions\r
+ *----------------------------------------------------------------------------*/\r
+\r
+void sha_start(void)\r
+{\r
+       SHA->SHA_CR = SHA_CR_START;\r
+}\r
+\r
+void sha_soft_reset(void)\r
+{\r
+       SHA->SHA_CR = SHA_CR_SWRST;\r
+}\r
+\r
+void sha_first_block(void)\r
+{\r
+       SHA->SHA_CR = SHA_CR_FIRST;\r
+}\r
+\r
+void sha_configure(uint32_t mode)\r
+{\r
+       SHA->SHA_MR = mode;\r
+}\r
+\r
+void sha_enable_it(uint32_t sources)\r
+{\r
+       SHA->SHA_IER = sources;\r
+}\r
+\r
+void sha_disable_it(uint32_t sources)\r
+{\r
+       SHA->SHA_IDR = sources;\r
+}\r
+\r
+uint32_t sha_get_status(void)\r
+{\r
+       return SHA->SHA_ISR;\r
+}\r
+\r
+void sha_set_input(uint32_t * data, uint8_t len)\r
+{\r
+       uint8_t i;\r
+       uint8_t num;\r
+       num = len <= 16 ? len : 16;\r
+       for (i = 0; i < num; i++)\r
+               SHA->SHA_IDATAR[i] = (data[i]);\r
+       num = len > 16 ? len - 16 : 0;\r
+       for (i = 0; i < num; i++)\r
+               SHA->SHA_IODATAR[i] = (data[i + 16]);\r
+}\r
+\r
+void sha_get_output(uint32_t * data)\r
+{\r
+       uint8_t i;\r
+       for (i = 0; i < 16; i++)\r
+               data[i] = SHA->SHA_IODATAR[i];\r
+}\r