The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 171:3a7713b1edbc 1 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 2 /*!
AnnaBridge 171:3a7713b1edbc 3 * \file wsf_math.h
AnnaBridge 171:3a7713b1edbc 4 *
AnnaBridge 171:3a7713b1edbc 5 * \brief Common math utilities.
AnnaBridge 171:3a7713b1edbc 6 *
AnnaBridge 171:3a7713b1edbc 7 * $Date: 2016-04-05 14:14:53 -0700 (Tue, 05 Apr 2016) $
AnnaBridge 171:3a7713b1edbc 8 * $Revision: 6646 $
AnnaBridge 171:3a7713b1edbc 9 *
AnnaBridge 171:3a7713b1edbc 10 * Copyright (c) 2013 Wicentric, Inc., all rights reserved.
AnnaBridge 171:3a7713b1edbc 11 * Wicentric confidential and proprietary.
AnnaBridge 171:3a7713b1edbc 12 *
AnnaBridge 171:3a7713b1edbc 13 * IMPORTANT. Your use of this file is governed by a Software License Agreement
AnnaBridge 171:3a7713b1edbc 14 * ("Agreement") that must be accepted in order to download or otherwise receive a
AnnaBridge 171:3a7713b1edbc 15 * copy of this file. You may not use or copy this file for any purpose other than
AnnaBridge 171:3a7713b1edbc 16 * as described in the Agreement. If you do not agree to all of the terms of the
AnnaBridge 171:3a7713b1edbc 17 * Agreement do not use this file and delete all copies in your possession or control;
AnnaBridge 171:3a7713b1edbc 18 * if you do not have a copy of the Agreement, you must contact Wicentric, Inc. prior
AnnaBridge 171:3a7713b1edbc 19 * to any use, copying or further distribution of this software.
AnnaBridge 171:3a7713b1edbc 20 */
AnnaBridge 171:3a7713b1edbc 21 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 22 #ifndef WSF_MATH_H
AnnaBridge 171:3a7713b1edbc 23 #define WSF_MATH_H
AnnaBridge 171:3a7713b1edbc 24
AnnaBridge 171:3a7713b1edbc 25 #include "wsf_types.h"
AnnaBridge 171:3a7713b1edbc 26
AnnaBridge 171:3a7713b1edbc 27 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 28 extern "C" {
AnnaBridge 171:3a7713b1edbc 29 #endif
AnnaBridge 171:3a7713b1edbc 30
AnnaBridge 171:3a7713b1edbc 31 /**************************************************************************************************
AnnaBridge 171:3a7713b1edbc 32 Macros
AnnaBridge 171:3a7713b1edbc 33 **************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 34
AnnaBridge 171:3a7713b1edbc 35 /*! \brief Returns the minimum of two values. */
AnnaBridge 171:3a7713b1edbc 36 #define WSF_MIN(a,b) ((a) < (b) ? (a) : (b))
AnnaBridge 171:3a7713b1edbc 37
AnnaBridge 171:3a7713b1edbc 38 /*! \brief Returns the maximum of two values. */
AnnaBridge 171:3a7713b1edbc 39 #define WSF_MAX(a,b) ((a) > (b) ? (a) : (b))
AnnaBridge 171:3a7713b1edbc 40
AnnaBridge 171:3a7713b1edbc 41 /*! \brief ECC key length. */
AnnaBridge 171:3a7713b1edbc 42 #define WSF_MATH_ECC_KEY_LEN 32
AnnaBridge 171:3a7713b1edbc 43
AnnaBridge 171:3a7713b1edbc 44 /**************************************************************************************************
AnnaBridge 171:3a7713b1edbc 45 Data Types
AnnaBridge 171:3a7713b1edbc 46 **************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 47
AnnaBridge 171:3a7713b1edbc 48 /*! \brief ECC service callback. */
AnnaBridge 171:3a7713b1edbc 49 typedef void (*WsfMathEccServiceCback_t)(uint8_t op);
AnnaBridge 171:3a7713b1edbc 50
AnnaBridge 171:3a7713b1edbc 51 /*! \brief ECC operations. */
AnnaBridge 171:3a7713b1edbc 52 enum
AnnaBridge 171:3a7713b1edbc 53 {
AnnaBridge 171:3a7713b1edbc 54 WSF_MATH_ECC_OP_GENERATE_P256_KEY_PAIR, /*!< Generate P-256 key pair. */
AnnaBridge 171:3a7713b1edbc 55 WSF_MATH_ECC_OP_GENERATE_DH_KEY /*!< Generate Diffie-Hellman key. */
AnnaBridge 171:3a7713b1edbc 56 };
AnnaBridge 171:3a7713b1edbc 57
AnnaBridge 171:3a7713b1edbc 58
AnnaBridge 171:3a7713b1edbc 59 /**************************************************************************************************
AnnaBridge 171:3a7713b1edbc 60 Function Declarations
AnnaBridge 171:3a7713b1edbc 61 **************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 62
AnnaBridge 171:3a7713b1edbc 63 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 64 /*!
AnnaBridge 171:3a7713b1edbc 65 * \fn WsfMathInit
AnnaBridge 171:3a7713b1edbc 66 *
AnnaBridge 171:3a7713b1edbc 67 * \brief Initialize math routines.
AnnaBridge 171:3a7713b1edbc 68 *
AnnaBridge 171:3a7713b1edbc 69 * \return None.
AnnaBridge 171:3a7713b1edbc 70 */
AnnaBridge 171:3a7713b1edbc 71 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 72 void WsfMathInit(void);
AnnaBridge 171:3a7713b1edbc 73
AnnaBridge 171:3a7713b1edbc 74 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 75 /*!
AnnaBridge 171:3a7713b1edbc 76 * \fn WsfRandNum
AnnaBridge 171:3a7713b1edbc 77 *
AnnaBridge 171:3a7713b1edbc 78 * \brief Generate random number.
AnnaBridge 171:3a7713b1edbc 79 *
AnnaBridge 171:3a7713b1edbc 80 * \return 32-bit random number.
AnnaBridge 171:3a7713b1edbc 81 */
AnnaBridge 171:3a7713b1edbc 82 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 83 uint32_t WsfRandNum(void);
AnnaBridge 171:3a7713b1edbc 84
AnnaBridge 171:3a7713b1edbc 85 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 86 /*!
AnnaBridge 171:3a7713b1edbc 87 * \fn WsfAesEcb
AnnaBridge 171:3a7713b1edbc 88 *
AnnaBridge 171:3a7713b1edbc 89 * \brief Calculate AES ECB.
AnnaBridge 171:3a7713b1edbc 90 *
AnnaBridge 171:3a7713b1edbc 91 * \param pKey Encryption key.
AnnaBridge 171:3a7713b1edbc 92 * \param pOut Output data.
AnnaBridge 171:3a7713b1edbc 93 * \param pIn Input data.
AnnaBridge 171:3a7713b1edbc 94 *
AnnaBridge 171:3a7713b1edbc 95 * \return None.
AnnaBridge 171:3a7713b1edbc 96 */
AnnaBridge 171:3a7713b1edbc 97 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 98 void WsfAesEcb(const uint8_t *pKey, uint8_t *pOut, const uint8_t *pIn);
AnnaBridge 171:3a7713b1edbc 99
AnnaBridge 171:3a7713b1edbc 100 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 101 /*!
AnnaBridge 171:3a7713b1edbc 102 * \brief Set service callback for ECC generation.
AnnaBridge 171:3a7713b1edbc 103 *
AnnaBridge 171:3a7713b1edbc 104 * \param cback Callback to invoke when driver needs servicing.
AnnaBridge 171:3a7713b1edbc 105 *
AnnaBridge 171:3a7713b1edbc 106 * \return None.
AnnaBridge 171:3a7713b1edbc 107 */
AnnaBridge 171:3a7713b1edbc 108 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 109 void WsfMathEccSetServiceCback(WsfMathEccServiceCback_t cback);
AnnaBridge 171:3a7713b1edbc 110
AnnaBridge 171:3a7713b1edbc 111 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 112 /*!
AnnaBridge 171:3a7713b1edbc 113 * \brief Start generating P-256 key pair.
AnnaBridge 171:3a7713b1edbc 114 *
AnnaBridge 171:3a7713b1edbc 115 * \return None.
AnnaBridge 171:3a7713b1edbc 116 */
AnnaBridge 171:3a7713b1edbc 117 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 118 void WsfMathEccGenerateP256KeyPairStart(void);
AnnaBridge 171:3a7713b1edbc 119
AnnaBridge 171:3a7713b1edbc 120 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 121 /*!
AnnaBridge 171:3a7713b1edbc 122 * \brief Start generating P-256 public key with a specified private key.
AnnaBridge 171:3a7713b1edbc 123 *
AnnaBridge 171:3a7713b1edbc 124 * \param pPrivKey Private key.
AnnaBridge 171:3a7713b1edbc 125 *
AnnaBridge 171:3a7713b1edbc 126 * \return None.
AnnaBridge 171:3a7713b1edbc 127 */
AnnaBridge 171:3a7713b1edbc 128 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 129 void WsfMathEccGenerateP256PublicKeyStart(const uint8_t *pPrivKey);
AnnaBridge 171:3a7713b1edbc 130
AnnaBridge 171:3a7713b1edbc 131 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 132 /*!
AnnaBridge 171:3a7713b1edbc 133 * \brief Continue generating P-256 key pair.
AnnaBridge 171:3a7713b1edbc 134 *
AnnaBridge 171:3a7713b1edbc 135 * \return TRUE if key generation complete.
AnnaBridge 171:3a7713b1edbc 136 */
AnnaBridge 171:3a7713b1edbc 137 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 138 bool_t WsfMathEccGenerateP256KeyPairContinue(void);
AnnaBridge 171:3a7713b1edbc 139
AnnaBridge 171:3a7713b1edbc 140 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 141 /*!
AnnaBridge 171:3a7713b1edbc 142 * \brief Get results from generating P-256 key pair.
AnnaBridge 171:3a7713b1edbc 143 *
AnnaBridge 171:3a7713b1edbc 144 * \param pPubKey Storage for public key.
AnnaBridge 171:3a7713b1edbc 145 * \param pPrivKey Storage for private key.
AnnaBridge 171:3a7713b1edbc 146 *
AnnaBridge 171:3a7713b1edbc 147 * \return None.
AnnaBridge 171:3a7713b1edbc 148 */
AnnaBridge 171:3a7713b1edbc 149 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 150 void WsfMathEccGenerateP256KeyPairComplete(uint8_t *pPubKey, uint8_t *pPrivKey);
AnnaBridge 171:3a7713b1edbc 151
AnnaBridge 171:3a7713b1edbc 152 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 153 /*!
AnnaBridge 171:3a7713b1edbc 154 * \brief Start generating Diffie-Hellman key.
AnnaBridge 171:3a7713b1edbc 155 *
AnnaBridge 171:3a7713b1edbc 156 * \param pPublicKey Public key.
AnnaBridge 171:3a7713b1edbc 157 * \param pPrivateKey Private key.
AnnaBridge 171:3a7713b1edbc 158 *
AnnaBridge 171:3a7713b1edbc 159 * \return None.
AnnaBridge 171:3a7713b1edbc 160 */
AnnaBridge 171:3a7713b1edbc 161 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 162 void WsfMathEccGenerateDhKeyStart(const uint8_t *pPubKey, const uint8_t *pPrivKey);
AnnaBridge 171:3a7713b1edbc 163
AnnaBridge 171:3a7713b1edbc 164 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 165 /*!
AnnaBridge 171:3a7713b1edbc 166 * \brief Continue generating Diffie-Hellman key.
AnnaBridge 171:3a7713b1edbc 167 *
AnnaBridge 171:3a7713b1edbc 168 * \return TRUE if Diffie-Hellman key generation complete.
AnnaBridge 171:3a7713b1edbc 169 */
AnnaBridge 171:3a7713b1edbc 170 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 171 bool_t WsfMathEccGenerateDhKeyContinue(void);
AnnaBridge 171:3a7713b1edbc 172
AnnaBridge 171:3a7713b1edbc 173 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 174 /*!
AnnaBridge 171:3a7713b1edbc 175 * \brief Get results from generating Diffie-Hellman key.
AnnaBridge 171:3a7713b1edbc 176 *
AnnaBridge 171:3a7713b1edbc 177 * \param pDhKey Storage for Diffie-Hellman key.
AnnaBridge 171:3a7713b1edbc 178 *
AnnaBridge 171:3a7713b1edbc 179 * \return None.
AnnaBridge 171:3a7713b1edbc 180 */
AnnaBridge 171:3a7713b1edbc 181 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 182 void WsfMathEccGenerateDhKeyComplete(uint8_t *pDhKey);
AnnaBridge 171:3a7713b1edbc 183
AnnaBridge 171:3a7713b1edbc 184 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 185 };
AnnaBridge 171:3a7713b1edbc 186 #endif
AnnaBridge 171:3a7713b1edbc 187
AnnaBridge 171:3a7713b1edbc 188 #endif /* WSF_MATH_H */