ECDH.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017, 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  */
309 #ifndef ti_drivers_ECDH__include
310 #define ti_drivers_ECDH__include
311 
312 #ifdef __cplusplus
313 extern "C" {
314 #endif
315 
316 #include <stdbool.h>
317 #include <stddef.h>
318 #include <stdint.h>
319 
322 
340 #define ECDH_CMD_RESERVED (32)
341 
354 #define ECDH_STATUS_RESERVED (-32)
355 
369 #define ECDH_STATUS_SUCCESS (0)
370 
377 #define ECDH_STATUS_ERROR (-1)
378 
386 #define ECDH_STATUS_UNDEFINEDCMD (-2)
387 
396 #define ECDH_STATUS_RESOURCE_UNAVAILABLE (-3)
397 
404 #define ECDH_STATUS_RESULT_POINT_AT_INFINITY (-4)
405 
412 #define ECDH_STATUS_RESULT_PRIVATE_KEY_LARGER_THAN_ORDER (-5)
413 
420 #define ECDH_STATUS_RESULT_PUBLIC_KEY_NOT_ON_CURVE (-6)
421 
434 /* Add ECDH_CMD_<commands> here */
435 
443 typedef struct ECDH_Config_ *ECDH_Handle;
444 
466 typedef enum ECDH_ReturnBehavior_ {
482 
483 
495 typedef struct ECDH_Config_ {
497  void *object;
498 
500  void const *hwAttrs;
501 } ECDH_Config;
502 
515 
533 
537 typedef union ECDH_Operation_ {
541 
545 typedef enum ECDH_OperationType_ {
549 
568 typedef void (*ECDH_CallbackFxn) (ECDH_Handle handle,
569  int_fast16_t returnStatus,
570  ECDH_Operation operation,
571  ECDH_OperationType operationType);
572 
581 typedef struct ECDH_Params_ {
584  uint32_t timeout;
585  void *custom;
588 } ECDH_Params;
589 
595 extern const ECDH_Params ECDH_defaultParams;
596 
605 void ECDH_init(void);
606 
619 void ECDH_Params_init(ECDH_Params *params);
620 
638 ECDH_Handle ECDH_open(uint_least8_t index, ECDH_Params *params);
639 
649 void ECDH_close(ECDH_Handle handle);
650 
688 int_fast16_t ECDH_control(ECDH_Handle handle, uint32_t cmd, void *args);
689 
699 
709 
725 int_fast16_t ECDH_generatePublicKey(ECDH_Handle handle, ECDH_OperationGeneratePublicKey *operation);
726 
739 int_fast16_t ECDH_computeSharedSecret(ECDH_Handle handle, ECDH_OperationComputeSharedSecret *operation);
740 
741 #ifdef __cplusplus
742 }
743 #endif
744 
745 #endif /* ti_drivers_ECDH__include */
const CryptoKey * myPrivateKey
Definition: ECDH.h:523
const CryptoKey * myPrivateKey
Definition: ECDH.h:508
ECDH_ReturnBehavior_
The way in which ECC function calls return after performing an encryption + authentication or decrypt...
Definition: ECDH.h:466
The CryptoKey type is an opaque representation of a cryptographic key.
union ECDH_Operation_ ECDH_Operation
Union containing pointers to all supported operation structs.
ECDH_Handle ECDH_open(uint_least8_t index, ECDH_Params *params)
This function opens a given ECC peripheral.
ECC Parameters.
Definition: ECDH.h:581
void * custom
Definition: ECDH.h:585
void ECDH_OperationGeneratePublicKey_init(ECDH_OperationGeneratePublicKey *operation)
Function to initialize a ECDH_OperationGeneratePublicKey struct to its defaults.
struct ECDH_Params_ ECDH_Params
ECC Parameters.
ECDH_ReturnBehavior returnBehavior
Definition: ECDH.h:582
int_fast16_t ECDH_control(ECDH_Handle handle, uint32_t cmd, void *args)
Function performs implementation specific features on a given ECDH_Handle.
ECDH_CallbackFxn callbackFxn
Definition: ECDH.h:583
CryptoKey datastructure.
Definition: CryptoKey.h:210
struct ECDH_OperationComputeSharedSecret_ ECDH_OperationComputeSharedSecret
Struct containing the parameters required to compute the shared secret.
Struct containing the parameters required to generate a public key.
Definition: ECDH.h:506
A structure containing the parameters of an elliptic curve in short Weierstrass form.
Definition: ECCParams.h:70
void * object
Definition: ECDH.h:497
struct ECDH_OperationGeneratePublicKey_ ECDH_OperationGeneratePublicKey
Struct containing the parameters required to generate a public key.
Definition: ECDH.h:477
Definition: ECDH.h:473
const ECDH_Params ECDH_defaultParams
Default ECDH_Params structure.
Definition: ECDH.h:467
void(* ECDH_CallbackFxn)(ECDH_Handle handle, int_fast16_t returnStatus, ECDH_Operation operation, ECDH_OperationType operationType)
The definition of a callback function used by the ECDH driver when used in ECDH_RETURN_BEHAVIOR_CALLB...
Definition: ECDH.h:568
const CryptoKey * theirPublicKey
Definition: ECDH.h:526
void ECDH_OperationComputeSharedSecret_init(ECDH_OperationComputeSharedSecret *operation)
Function to initialize a ECDH_OperationComputeSharedSecret struct to its defaults.
int_fast16_t ECDH_generatePublicKey(ECDH_Handle handle, ECDH_OperationGeneratePublicKey *operation)
Generates a public key for use in key agreement.
CryptoKey * sharedSecret
Definition: ECDH.h:529
void ECDH_init(void)
This function initializes the ECC module.
Union containing pointers to all supported operation structs.
Definition: ECDH.h:537
enum ECDH_OperationType_ ECDH_OperationType
Enum for the operation types supported by the driver.
void const * hwAttrs
Definition: ECDH.h:500
ECDH_OperationComputeSharedSecret * computeSharedSecret
Definition: ECDH.h:539
struct ECDH_Config_ ECDH_Config
ECC Global configuration.
int_fast16_t ECDH_computeSharedSecret(ECDH_Handle handle, ECDH_OperationComputeSharedSecret *operation)
Computes a shared secret.
ECC Global configuration.
Definition: ECDH.h:495
void ECDH_close(ECDH_Handle handle)
Function to close a ECC peripheral specified by the ECC handle.
struct ECDH_Config_ * ECDH_Handle
A handle that is returned from an ECDH_open() call.
Definition: ECDH.h:443
void ECDH_Params_init(ECDH_Params *params)
Function to initialize the ECDH_Params struct to its defaults.
uint32_t timeout
Definition: ECDH.h:584
ECDH_OperationGeneratePublicKey * generatePublicKey
Definition: ECDH.h:538
CryptoKey * myPublicKey
Definition: ECDH.h:511
ECDH_OperationType_
Enum for the operation types supported by the driver.
Definition: ECDH.h:545
const ECCParams_CurveParams * curve
Definition: ECDH.h:520
Struct containing the parameters required to compute the shared secret.
Definition: ECDH.h:519
const ECCParams_CurveParams * curve
Definition: ECDH.h:507
enum ECDH_ReturnBehavior_ ECDH_ReturnBehavior
The way in which ECC function calls return after performing an encryption + authentication or decrypt...
Copyright 2017, Texas Instruments Incorporated