ECDSA.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017-2019, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 /*!****************************************************************************
33  * @file ECDSA.h
34  *
35  * @brief TI Driver for Elliptic Curve Digital Signature Algorithm.
36  *
37  *
38  * @anchor ti_drivers_ECDSA_Overview
39  * # Overview #
40  *
41  * The Elliptic Curve Digital Signature Algorithm (ECDSA) is a message
42  * authentication scheme between two parties based on operation on elliptic
43  * curves over finite fields.
44  *
45  * Signing a message with ECDSA proves to the recipient that the sender of
46  * the message is in possession of the private key corresponding to the
47  * transmitted public key used during verification.
48  * For most practical systems, this ensures message authentication and
49  * integrity.
50  *
51  * # Steps involved #
52  * - The sender hashes the message they wish to authenticate and
53  * truncates it to the length of the curve parameters of the
54  * elliptic curve used by both parties.
55  * - The sender generates a per-message secret number (PMSN) where
56  * 0 < PMSN < N. This number must (!) be unique for each message and be
57  * kept secret. If a PMSN is reused to authenticate more than one message,
58  * the secret key of the sender can be derived from these two messages
59  * and signatures!
60  * - The sender generates r and s where 0 < r, s < N. These two integers
61  * constitute the actual signature of the message.
62  * - The sender transmits the message, r, s, and the public key to the
63  * recipient.
64  * - The recipient calculates the hash of the message using an agreed
65  * upon hash function and truncates it to the length of the curve
66  * parameters of the elliptic curve used by both parties
67  * - The recipient uses the hash, s, and the sender's public key to
68  * recalculate r.
69  * - The recipient accepts the signature if the received and calculated r
70  * match. Otherwise, they reject the signature.
71  *
72  * @anchor ti_drivers_ECDSA_Usage
73  * # Usage #
74  *
75  * ## Before starting an ECDSA operation #
76  *
77  * Before starting an ECDSA operation, the application must do the following:
78  * - Call ECDSA_init() to initialize the driver
79  * - Call ECDSA_Params_init() to initialize the ECDSA_Params to default values.
80  * - Modify the ECDSA_Params as desired
81  * - Call ECDSA_open() to open an instance of the driver
82  *
83  * ## Signing a message #
84  * To sign a message using an agreed upon hash function and elliptic curve, the
85  * application must do the following:
86  * - Initialize an ECDSA_OperationSign struct by calling ECDSA_OperationSign_init().
87  * - Generate the keying material for the private key. This keying material must
88  * be an integer in the interval [1, n - 1], where n is the order of the curve.
89  * It should be stored in an array with the least significant byte of the integer
90  * hex representation stored in the lowest address of the array (little-endian).
91  * The array should be the same length as the curve parameters of the curve used.
92  * The driver can be configured to validate public and private keys against the
93  * provided curve.
94  * - Initialize the private key CryptoKey. CryptoKeys are opaque datastructures and representations
95  * of keying material and its storage. Depending on how the keying material
96  * is stored (RAM or flash, key store, key blob), the CryptoKey must be
97  * initialized differently. The ECDSA API can handle all types of CryptoKey.
98  * However, not all device-specific implementions support all types of CryptoKey.
99  * Devices without a key store will not support CryptoKeys with keying material
100  * stored in a key store for example.
101  * All devices support plaintext CryptoKeys.
102  * - Initialize the pmsn CryptoKey. The PMSN itself should be a 0-padded integer of
103  * the same length as the curve parameters of the agreed upon curve and
104  * where 0 < PMSN < N. The driver will enforce this restriction and reject invalid
105  * PMSNs.
106  * - Hash the message using a previously agreed upon hash function and truncate
107  * the hash to the length of the curve parameters of the agreed upon curve.
108  * - Call ECDSA_sign(). The r and s vectors will be written to the buffers
109  * provided in the function call. Ensure the return value is
110  * ECDSA_STATUS_SUCCESS.
111  *
112  * ## Verifying a message #
113  * After receiving the message, public key, r, and s, the application should
114  * do the following to verify the signature:
115  * - Initialize an ECDSA_OperationVerify struct by calling ECDSA_OperationVerify_init().
116  * - Hash the message using a previously agreed upon hash function and truncate
117  * the hash to the length of the curve parameters of the agreed upon curve.
118  * - Initialize a CryptoKey as public key with the keying material received from the other
119  * party.
120  * - Call ECDSA_verify(). Ensure the return value is ECDSA_STATUS_SUCCESS. The
121  * driver will validate the received public key against the provided curve.
122  *
123  * ## General usage #
124  * The API expects elliptic curves as defined in ti/drivers/cryptoutils/ecc/ECCParams.h.
125  * Several commonly used curves are provided. Check the device-specific ECDSA documentation
126  * for curve type (short Weierstrass, Montgomery, Edwards) support for your device.
127  * ECDSA support for a curve type on a device does not imply curve-type support for
128  * other ECC schemes.
129  *
130  * Public keys and shared secrets are points on an elliptic curve. These points can
131  * be expressed in several ways. The most common one is in affine coordinates as an
132  * X,Y pair.
133  * This API uses points expressed in affine coordinates.
134  * The point is stored as a concatenated array of X followed by Y in a location
135  * described by its CryptoKey.
136  *
137  * This API accepts and returns the keying material of public keys according
138  * to the following table:
139  *
140  * | Curve Type | Keying Material Array | Array Length |
141  * |--------------------|-----------------------|---------------------------|
142  * | Short Weierstrass | [X, Y] | 2 * Curve Param Length |
143  * | Montgomery | [X, Y] | 2 * Curve Param Length |
144  * | Edwards | [X, Y] | 2 * Curve Param Length |
145  *
146  * @anchor ti_drivers_ECDSA_Synopsis
147  * ## Synopsis
148  * @anchor ti_drivers_ECDSA_Synopsis_Code
149  * @code
150  * // Import ECDSA Driver definitions
151  * #include <ti/drivers/ECDSA.h>
152  *
153  * // Since we are using default ECDSA_Params, we just pass in NULL for that parameter.
154  * ecdsaHandle = ECDSA_open(0, NULL);
155  *
156  * if (!ecdsaHandle) {
157  * // Handle error
158  * }
159  *
160  * // Initialize myPrivateKey
161  * CryptoKeyPlaintext_initKey(&myPrivateKey, myPrivateKeyingMaterial, sizeof(myPrivateKeyingMaterial));
162  * CryptoKeyPlaintext_initKey(&pmsnKey, pmsn, sizeof(pmsn));
163  *
164  * // Initialize the operation
165  * ECDSA_OperationSign_init(&operationSign);
166  * operationSign.curve = &ECCParams_NISTP256;
167  * operationSign.myPrivateKey = &myPrivateKey;
168  * operationSign.pmsn = &pmsnKey;
169  * operationSign.hash = messageHash;
170  * operationSign.r = r;
171  * operationSign.s = s;
172  *
173  * // Generate the signature
174  * operationResult = ECDSA_sign(ecdsaHandle, &operationSign);
175  *
176  * // Initialize theirPublicKey
177  * CryptoKeyPlaintext_initKey(&theirPublicKey, theirPublicKeyingMaterial, sizeof(theirPublicKeyingMaterial));
178  *
179  * ECDSA_OperationVerify_init(&operationVerify);
180  * operationVerify.curve = &ECCParams_NISTP256;
181  * operationVerify.theirPublicKey = &theirPublicKey;
182  * operationVerify.hash = messageHash;
183  * operationVerify.r = r;
184  * operationVerify.s = s;
185  *
186  * // Generate the keying material for myPublicKey and store it in myPublicKeyingMaterial
187  * operationResult = ECDSA_verify(ecdsaHandle, &operationVerify);
188  *
189  * // Close the driver
190  * ECDSA_close(ecdsaHandle);
191  *
192  * @anchor ti_drivers_ECDSA_Examples
193  *
194  * # Examples #
195  *
196  * ## ECDSA sign with plaintext CryotoKeys #
197  *
198  * @code
199  *
200  * #include <ti/drivers/cryptoutils/cryptokey/CryptoKeyPlaintext.h>
201  * #include <ti/drivers/ECDSA.h>
202  *
203  * ...
204  *
205  * // This vector is taken from the NIST ST toolkit examples from ECDSA_Prime.pdf
206  * uint8_t myPrivateKeyingMaterial[32] = {0x96, 0xBF, 0x85, 0x49, 0xC3, 0x79, 0xE4, 0x04,
207  * 0xED, 0xA1, 0x08, 0xA5, 0x51, 0xF8, 0x36, 0x23,
208  * 0x12, 0xD8, 0xD1, 0xB2, 0xA5, 0xFA, 0x57, 0x06,
209  * 0xE2, 0xCC, 0x22, 0x5C, 0xF6, 0xF9, 0x77, 0xC4};
210  * uint8_t messageHashSHA256[32] = {0xC4, 0xA8, 0xC8, 0x99, 0x28, 0xCF, 0x80, 0xB6,
211  * 0xE4, 0x42, 0xD5, 0xBD, 0x28, 0x4D, 0xE3, 0xFD,
212  * 0x3A, 0x13, 0xD8, 0x65, 0x0C, 0x41, 0x1C, 0x21,
213  * 0x48, 0x95, 0x79, 0x2A, 0xA1, 0x41, 0x1A, 0xA4};
214  * uint8_t pmsn[32] = {0xAE, 0x50, 0xEE, 0xFA, 0x27, 0xB4, 0xDB, 0x14,
215  * 0x9F, 0xE1, 0xFB, 0x04, 0xF2, 0x4B, 0x50, 0x58,
216  * 0x91, 0xE3, 0xAC, 0x4D, 0x2A, 0x5D, 0x43, 0xAA,
217  * 0xCA, 0xC8, 0x7F, 0x79, 0x52, 0x7E, 0x1A, 0x7A};
218  * uint8_t r[32] = {0};
219  * uint8_t s[32] = {0};
220  *
221  *
222  * CryptoKey myPrivateKey;
223  * CryptoKey pmsnKey;
224  *
225  * ECDSA_Handle ecdsaHandle;
226  *
227  * int_fast16_t operationResult;
228  *
229  * // Since we are using default ECDSA_Params, we just pass in NULL for that parameter.
230  * ecdsaHandle = ECDSA_open(0, NULL);
231  *
232  * if (!ecdsaHandle) {
233  * // Handle error
234  * }
235  *
236  * // Initialize myPrivateKey
237  * CryptoKeyPlaintext_initKey(&myPrivateKey, myPrivateKeyingMaterial, sizeof(myPrivateKeyingMaterial));
238  * CryptoKeyPlaintext_initKey(&pmsnKey, pmsn, sizeof(pmsn));
239  *
240  * // Initialize the operation
241  * ECDSA_OperationSign_init(&operationSign);
242  * operationSign.curve = &ECCParams_NISTP256;
243  * operationSign.myPrivateKey = &myPrivateKey;
244  * operationSign.pmsn = &pmsnKey;
245  * operationSign.hash = messageHash;
246  * operationSign.r = r;
247  * operationSign.s = s;
248  *
249  * // Generate the signature
250  * operationResult = ECDSA_sign(ecdsaHandle, &operationSign);
251  *
252  * if (operationResult != ECDSA_STATUS_SUCCESS) {
253  * // Handle error
254  * }
255  *
256  * // Send out signature
257  * // r should be 0x4F, 0x10, 0x46, 0xCA, 0x9A, 0xB6, 0x25, 0x73,
258  * // 0xF5, 0x3E, 0x0B, 0x1F, 0x6F, 0x31, 0x4C, 0xE4,
259  * // 0x81, 0x0F, 0x50, 0xB1, 0xF3, 0xD1, 0x65, 0xFF,
260  * // 0x65, 0x41, 0x7F, 0xD0, 0x76, 0xF5, 0x42, 0x2B
261  * //
262  * // s should be 0xF1, 0xFA, 0x63, 0x6B, 0xDB, 0x9B, 0x32, 0x4B,
263  * // 0x2C, 0x26, 0x9D, 0xE6, 0x6F, 0x88, 0xC1, 0x98,
264  * // 0x81, 0x2A, 0x50, 0x89, 0x3A, 0x99, 0x3A, 0x3E,
265  * // 0xCD, 0x92, 0x63, 0x2D, 0x12, 0xC2, 0x42, 0xDC
266  *
267  * @endcode
268  *
269  *
270  * ## ECDSA verify with plaintext CryotoKeys #
271  *
272  * @code
273  *
274  * #include <ti/drivers/cryptoutils/cryptokey/CryptoKeyPlaintext.h>
275  * #include <ti/drivers/ECDSA.h>
276  *
277  * ...
278  *
279  * // This vector is taken from the NIST ST toolkit examples from ECDSA_Prime.pdf
280  * uint8_t theirPublicKeyingMaterial[64] = {0x19, 0x7A, 0xBC, 0x89, 0x08, 0xCD, 0x01, 0x82,
281  * 0xA3, 0xA2, 0x9E, 0x1E, 0xAD, 0xA0, 0xB3, 0x62,
282  * 0x1C, 0xBA, 0x98, 0x47, 0x73, 0x8C, 0xDC, 0xF1,
283  * 0xD3, 0xBA, 0x94, 0xFE, 0xFD, 0x8A, 0xE0, 0xB7,
284  * 0x09, 0x5E, 0xCC, 0x06, 0xC6, 0xBB, 0x63, 0xB5,
285  * 0x61, 0x9E, 0x52, 0x43, 0xAE, 0xC7, 0xAD, 0x63,
286  * 0x90, 0x72, 0x28, 0x19, 0xE4, 0x26, 0xB2, 0x4B,
287  * 0x7A, 0xBF, 0x9D, 0x95, 0x47, 0xF7, 0x03, 0x36};
288  * uint8_t messageHashSHA256[32] = {0xC4, 0xA8, 0xC8, 0x99, 0x28, 0xCF, 0x80, 0xB6,
289  * 0xE4, 0x42, 0xD5, 0xBD, 0x28, 0x4D, 0xE3, 0xFD,
290  * 0x3A, 0x13, 0xD8, 0x65, 0x0C, 0x41, 0x1C, 0x21,
291  * 0x48, 0x95, 0x79, 0x2A, 0xA1, 0x41, 0x1A, 0xA4};
292  * uint8_t r[32] = {0x4F, 0x10, 0x46, 0xCA, 0x9A, 0xB6, 0x25, 0x73,
293  * 0xF5, 0x3E, 0x0B, 0x1F, 0x6F, 0x31, 0x4C, 0xE4,
294  * 0x81, 0x0F, 0x50, 0xB1, 0xF3, 0xD1, 0x65, 0xFF,
295  * 0x65, 0x41, 0x7F, 0xD0, 0x76, 0xF5, 0x42, 0x2B};
296  * uint8_t s[32] = {0xF1, 0xFA, 0x63, 0x6B, 0xDB, 0x9B, 0x32, 0x4B,
297  * 0x2C, 0x26, 0x9D, 0xE6, 0x6F, 0x88, 0xC1, 0x98,
298  * 0x81, 0x2A, 0x50, 0x89, 0x3A, 0x99, 0x3A, 0x3E,
299  * 0xCD, 0x92, 0x63, 0x2D, 0x12, 0xC2, 0x42, 0xDC};
300  *
301  *
302  * CryptoKey theirPublicKey;
303  *
304  * ECDSA_Handle ecdsaHandle;
305  *
306  * int_fast16_t operationResult;
307  *
308  * ECDSA_OperationVerify operationVerify;
309  *
310  * // Since we are using default ECDSA_Params, we just pass in NULL for that parameter.
311  * ecdsaHandle = ECDSA_open(0, NULL);
312  *
313  * if (!ecdsaHandle) {
314  * // Handle error
315  * }
316  *
317  * // Initialize theirPublicKey
318  * CryptoKeyPlaintext_initKey(&theirPublicKey, theirPublicKeyingMaterial, sizeof(theirPublicKeyingMaterial));
319  *
320  * ECDSA_OperationVerify_init(&operationVerify);
321  * operationVerify.curve = &ECCParams_NISTP256;
322  * operationVerify.theirPublicKey = &theirPublicKey;
323  * operationVerify.hash = messageHash;
324  * operationVerify.r = r;
325  * operationVerify.s = s;
326  *
327  * // Generate the keying material for myPublicKey and store it in myPublicKeyingMaterial
328  * operationResult = ECDSA_verify(ecdsaHandle, &operationVerify);
329  *
330  * if (operationResult != ECDSA_STATUS_SUCCESS) {
331  * // Handle error
332  * }
333  *
334  * @endcode
335  *
336  *
337  */
338 
339 
340 #ifndef ti_drivers_ECDSA__include
341 #define ti_drivers_ECDSA__include
342 
343 #ifdef __cplusplus
344 extern "C" {
345 #endif
346 
347 #include <stdbool.h>
348 #include <stddef.h>
349 #include <stdint.h>
350 
353 
366 #define ECDSA_STATUS_RESERVED (-32)
367 
374 #define ECDSA_STATUS_SUCCESS (0)
375 
382 #define ECDSA_STATUS_ERROR (-1)
383 
392 #define ECDSA_STATUS_RESOURCE_UNAVAILABLE (-2)
393 
400 #define ECDSA_STATUS_INVALID_PMSN (-3)
401 
408 #define ECDSA_STATUS_R_LARGER_THAN_ORDER (-4)
409 
416 #define ECDSA_STATUS_S_LARGER_THAN_ORDER (-5)
417 
424 #define ECDSA_STATUS_PUBLIC_KEY_NOT_ON_CURVE (-6)
425 
433 #define ECDSA_STATUS_PUBLIC_KEY_LARGER_THAN_PRIME (-7)
434 
440 #define ECDSA_STATUS_POINT_AT_INFINITY (-8)
441 
445 #define ECDSA_STATUS_CANCELED (-9)
446 
450 typedef struct ECDSA_Config *ECDSA_Handle;
451 
473 typedef enum {
489 
501 typedef struct ECDSA_Config {
503  void *object;
504 
506  void const *hwAttrs;
507 } ECDSA_Config;
508 
512 typedef struct {
517  const CryptoKey *pmsn;
523  const uint8_t *hash;
526  uint8_t *r;
531  uint8_t *s;
537 
541 typedef struct {
546  const uint8_t *hash;
549  const uint8_t *r;
553  const uint8_t *s;
558 
562 typedef union {
566 
570 typedef enum {
574 
593 typedef void (*ECDSA_CallbackFxn) (ECDSA_Handle handle,
594  int_fast16_t returnStatus,
595  ECDSA_Operation operation,
596  ECDSA_OperationType operationType);
597 
606 typedef struct {
609  uint32_t timeout;
612  void *custom;
615 } ECDSA_Params;
616 
625 void ECDSA_init(void);
626 
636 void ECDSA_close(ECDSA_Handle handle);
637 
655 ECDSA_Handle ECDSA_open(uint_least8_t index, ECDSA_Params *params);
656 
669 void ECDSA_Params_init(ECDSA_Params *params);
670 
680 
690 
711 int_fast16_t ECDSA_sign(ECDSA_Handle handle, ECDSA_OperationSign *operation);
712 
736 int_fast16_t ECDSA_verify(ECDSA_Handle handle, ECDSA_OperationVerify *operation);
737 
751 int_fast16_t ECDSA_cancelOperation(ECDSA_Handle handle);
752 
753 #ifdef __cplusplus
754 }
755 #endif
756 
757 #endif /* ti_drivers_ECDSA__include */
ECDSA_ReturnBehavior
The way in which ECDSA function calls return after performing an encryption + authentication or decry...
Definition: ECDSA.h:473
uint8_t * s
Definition: ECDSA.h:531
The CryptoKey type is an opaque representation of a cryptographic key.
const CryptoKey * myPrivateKey
Definition: ECDSA.h:514
Definition: ECDSA.h:572
const uint8_t * hash
Definition: ECDSA.h:523
void ECDSA_OperationSign_init(ECDSA_OperationSign *operation)
Function to initialize an ECDSA_OperationSign struct to its defaults.
void const * hwAttrs
Definition: ECDSA.h:506
const CryptoKey * theirPublicKey
Definition: ECDSA.h:543
void(* ECDSA_CallbackFxn)(ECDSA_Handle handle, int_fast16_t returnStatus, ECDSA_Operation operation, ECDSA_OperationType operationType)
The definition of a callback function used by the ECDSA driver when used in ECDSA_RETURN_BEHAVIOR_CAL...
Definition: ECDSA.h:593
ECDSA_ReturnBehavior returnBehavior
Definition: ECDSA.h:607
CryptoKey datastructure.
Definition: CryptoKey.h:210
const uint8_t * s
Definition: ECDSA.h:553
struct ECDSA_Config ECDSA_Config
ECDSA Global configuration.
ECDSA Global configuration.
Definition: ECDSA.h:501
ECDSA_Handle ECDSA_open(uint_least8_t index, ECDSA_Params *params)
This function opens a given ECDSA peripheral.
void ECDSA_close(ECDSA_Handle handle)
Function to close an ECDSA peripheral specified by the ECDSA handle.
A structure containing the parameters of an elliptic curve in short Weierstrass form.
Definition: ECCParams.h:111
void ECDSA_init(void)
This function initializes the ECDSA module.
Struct containing the parameters required for signing a message.
Definition: ECDSA.h:512
ECDSA Parameters.
Definition: ECDSA.h:606
const CryptoKey * pmsn
Definition: ECDSA.h:517
const ECCParams_CurveParams * curve
Definition: ECDSA.h:513
ECDSA_OperationType
Enum for the operation types supported by the driver.
Definition: ECDSA.h:570
void ECDSA_Params_init(ECDSA_Params *params)
Function to initialize the ECDSA_Params struct to its defaults.
const uint8_t * r
Definition: ECDSA.h:549
Union containing pointers to all supported operation structs.
Definition: ECDSA.h:562
Definition: ECDSA.h:484
int_fast16_t ECDSA_sign(ECDSA_Handle handle, ECDSA_OperationSign *operation)
Signs a hashed message.
void * custom
Definition: ECDSA.h:612
uint8_t * r
Definition: ECDSA.h:526
int_fast16_t ECDSA_verify(ECDSA_Handle handle, ECDSA_OperationVerify *operation)
Verifies a received signature matches a hash and public key.
Struct containing the parameters required for verifying a message.
Definition: ECDSA.h:541
void * object
Definition: ECDSA.h:503
ECDSA_CallbackFxn callbackFxn
Definition: ECDSA.h:608
struct ECDSA_Config * ECDSA_Handle
A handle that is returned from an ECDSA_open() call.
Definition: ECDSA.h:450
ECDSA_OperationVerify * verify
Definition: ECDSA.h:564
Definition: ECDSA.h:480
Definition: ECDSA.h:474
const uint8_t * hash
Definition: ECDSA.h:546
Definition: ECDSA.h:571
const ECCParams_CurveParams * curve
Definition: ECDSA.h:542
ECDSA_OperationSign * sign
Definition: ECDSA.h:563
uint32_t timeout
Definition: ECDSA.h:609
void ECDSA_OperationVerify_init(ECDSA_OperationVerify *operation)
Function to initialize an ECDSA_OperationSign struct to its defaults.
int_fast16_t ECDSA_cancelOperation(ECDSA_Handle handle)
Cancels an ongoing ECDSA operation.
© Copyright 1995-2019, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale