efm32gg11_crypto.c
Go to the documentation of this file.
1 /**
2  * @file efm32gg11_crypto.c
3  * @brief EFM32 Giant Gecko 11 hardware cryptographic accelerator
4  *
5  * @section License
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  *
9  * Copyright (C) 2010-2024 Oryx Embedded SARL. All rights reserved.
10  *
11  * This file is part of CycloneCRYPTO Open.
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26  *
27  * @author Oryx Embedded SARL (www.oryx-embedded.com)
28  * @version 2.4.0
29  **/
30 
31 //Switch to the appropriate trace level
32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
33 
34 //Dependencies
35 #include "em_device.h"
36 #include "em_cmu.h"
37 #include "core/crypto.h"
43 #include "debug.h"
44 
45 //Global variables
47 
48 
49 /**
50  * @brief Initialize hardware cryptographic accelerator
51  * @return Error code
52  **/
53 
55 {
56  error_t error;
57 
58  //Initialize status code
59  error = NO_ERROR;
60 
61  //Create a mutex to prevent simultaneous access to the hardware
62  //cryptographic accelerator
64  {
65  //Failed to create mutex
66  error = ERROR_OUT_OF_RESOURCES;
67  }
68 
69 #if (EFM32GG11_CRYPTO_TRNG_SUPPORT == ENABLED)
70  //Check status code
71  if(!error)
72  {
73  //Initialize TRNG module
74  error = trngInit();
75  }
76 #endif
77 
78 #if (EFM32GG11_CRYPTO_HASH_SUPPORT == ENABLED || \
79  EFM32GG11_CRYPTO_CIPHER_SUPPORT == ENABLED || \
80  EFM32GG11_CRYPTO_PKC_SUPPORT == ENABLED)
81  //Check status code
82  if(!error)
83  {
84  //Enable CRYPTO clock
85  CMU_ClockEnable(cmuClock_CRYPTO0, true);
86  }
87 #endif
88 
89  //Return status code
90  return error;
91 }
error_t trngInit(void)
TRNG module initialization.
General definitions for cryptographic algorithms.
Debugging facilities.
OsMutex efm32gg11CryptoMutex
error_t efm32gg11CryptoInit(void)
Initialize hardware cryptographic accelerator.
EFM32 Giant Gecko 11 hardware cryptographic accelerator.
EFM32 Giant Gecko 11 cipher hardware accelerator.
EFM32 Giant Gecko 11 hash hardware accelerator.
EFM32 Giant Gecko 11 public-key hardware accelerator.
EFM32 Giant Gecko 11 true random number generator.
error_t
Error codes.
Definition: error.h:43
@ ERROR_OUT_OF_RESOURCES
Definition: error.h:64
@ NO_ERROR
Success.
Definition: error.h:44
bool_t osCreateMutex(OsMutex *mutex)
Create a mutex object.
Mutex object.