AM243x MCU+ SDK  11.00.00
APIs for ASYMMETRIC CRYPTOGRAPHY

Introduction

This module contains APIs to program and use the ASYMMETRIC CRYPTOGRAPHY.

Files

file  asym_crypt.h
 This file contains the prototype of ASYMMETRIC CRYPTOGRAPHY driver APIs.
 

Data Structures

struct  AsymCrypt_RSAPubkey
 RSA public key. All values are in biginteger format (size followed by word value array, least significant word first) More...
 
struct  AsymCrypt_RSAPrivkey
 RSA private key. All values are in biginteger format (size followed by word value array, least significant word first) More...
 
struct  AsymCrypt_ECPoint
 EC Point, also the public key. More...
 
struct  AsymCrypt_ECPrimeCurveP
 EC prime curve parameters. More...
 
struct  AsymCrypt_ECDSASig
 ECDSA signature. More...
 
struct  AsymCrypt_EddsaPoint
 Point on Eddsa Elliptical Curve. More...
 
struct  AsymCrypt_EdCurveParam
 Structure to hold Edward Curve Eddsa parameters. More...
 
struct  AsymCrypt_EddsaSig
 Eddsa EDDSA signature. More...
 
struct  AsymCrypt_EddsaKey
 Eddsa EDDSA Private key - Public key pair in uint8 array form. More...
 

Functions

AsymCrypt_Handle AsymCrypt_open (uint32_t index)
 Function to Open AsymCrypt instance, enable AsymCrypt engine, Initialize clocks. More...
 
AsymCrypt_Return_t AsymCrypt_close (AsymCrypt_Handle handle)
 Function to close a AsymCrypt module specified by the AsymCrypt handle. More...
 
AsymCrypt_Return_t AsymCrypt_RSAPrivate (AsymCrypt_Handle handle, const uint32_t m[RSA_MAX_LENGTH], const struct AsymCrypt_RSAPrivkey *k, uint32_t result[RSA_MAX_LENGTH])
 This Function performs Decryption or Signing operations. More...
 
AsymCrypt_Return_t AsymCrypt_RSAPublic (AsymCrypt_Handle handle, const uint32_t m[RSA_MAX_LENGTH], const struct AsymCrypt_RSAPubkey *k, uint32_t result[RSA_MAX_LENGTH])
 This Function performs Encryption or Verification operations. More...
 
AsymCrypt_Return_t AsymCrypt_RSAKeyGenPrivate (AsymCrypt_Handle handle, struct AsymCrypt_RSAPrivkey *k, uint32_t keybitsize)
 This Function performs Encryption or Verification operations. More...
 
AsymCrypt_Return_t AsymCrypt_RSAKeyGenPublic (AsymCrypt_Handle handle, const struct AsymCrypt_RSAPrivkey *privKey, struct AsymCrypt_RSAPubkey *pubKey, uint32_t keybitsize)
 This Function performs Encryption or Verification operations. More...
 
AsymCrypt_Return_t AsymCrypt_ECDSASign (AsymCrypt_Handle handle, const struct AsymCrypt_ECPrimeCurveP *cp, const uint32_t priv[ECDSA_MAX_LENGTH], const uint32_t k[ECDSA_MAX_LENGTH], const uint32_t h[ECDSA_MAX_LENGTH], struct AsymCrypt_ECDSASig *sig)
 ECDSA sign primitive function. More...
 
AsymCrypt_Return_t AsymCrypt_ECDSAVerify (AsymCrypt_Handle handle, const struct AsymCrypt_ECPrimeCurveP *cp, const struct AsymCrypt_ECPoint *pub, const struct AsymCrypt_ECDSASig *sig, const uint32_t h[ECDSA_MAX_LENGTH])
 ECDSA verify primitive function. More...
 
AsymCrypt_Return_t AsymCrypt_ECDSAKeyGenPrivate (AsymCrypt_Handle handle, const struct AsymCrypt_ECPrimeCurveP *cp, uint32_t priv[ECDSA_MAX_LENGTH])
 ECDSA KeyGen Private Key function. More...
 
AsymCrypt_Return_t AsymCrypt_ECDSAKeyGenPublic (AsymCrypt_Handle handle, const struct AsymCrypt_ECPrimeCurveP *cp, struct AsymCrypt_ECPoint *pub, const uint32_t priv[ECDSA_MAX_LENGTH])
 ECDSA KeyGen Public Key function. More...
 
AsymCrypt_Return_t AsymCrypt_EddsaGetPubKey (AsymCrypt_Handle handle, AsymCrypt_ExecuteShaCallback shaCbFxn, uint8_t privKey[EDDSA_MAX_KEY_LEN], uint8_t pubKey[EDDSA_MAX_KEY_LEN], AsymCrypt_EdCurveType_t input_curve)
 ECDSA KeyGen Public Key function. More...
 
AsymCrypt_Return_t AsymCrypt_EddsaSign (AsymCrypt_Handle handle, AsymCrypt_ExecuteShaCallback shaCbFxn, const struct AsymCrypt_EddsaKey *key, const uint8_t *ptrData, const uint32_t dataSizeByte, struct AsymCrypt_EddsaSig *sig, AsymCrypt_EdCurveType_t input_curve)
 EDDSA Signing primitive function. More...
 
AsymCrypt_Return_t AsymCrypt_EddsaVerify (AsymCrypt_Handle handle, AsymCrypt_ExecuteShaCallback shaCbFxn, const uint8_t pubKey[EDDSA_MAX_KEY_LEN], const uint8_t *ptrData, const uint32_t dataSizeByte, const struct AsymCrypt_EddsaSig *sig, AsymCrypt_EdCurveType_t input_curve)
 ECDSA verify primitive function. More...
 
AsymCrypt_Return_t AsymCrypt_EcdhGenSharedSecret (AsymCrypt_Handle handle, const struct AsymCrypt_ECPrimeCurveP *cp, const uint32_t priv[ECDSA_MAX_LENGTH], const struct AsymCrypt_ECPoint *pubKey, struct AsymCrypt_ECPoint *ecShSecret)
 ECDSA verify primitive function. More...
 

Typedefs

typedef void * AsymCrypt_Handle
 Handle to the AsymCrypt driver. More...
 
typedef AsymCrypt_Return_t(* AsymCrypt_ExecuteShaCallback) (uint8_t *in_addr, uint32_t length, uint8_t *sha_addr)
 This callback implemented to configure a SHA for EDDSA algorithms. More...
 

Enumerations

enum  AsymCrypt_Return_t { ASYM_CRYPT_RETURN_SUCCESS = 0xCEF6A572U, ASYM_CRYPT_RETURN_FAILURE = 0xD20341DDU }
 ASYM CRYPTO Driver Error code. More...
 
enum  AsymCrypt_EdCurveType_t { ASYM_CRYPT_CURVE_TYPE_EDDSA_25519 = 0xBE2479A0U, ASYM_CRYPT_CURVE_TYPE_EDDSA_448 = 0x57138CAFU }
 ASYM EDDSA Curve Type. More...
 

Macros

#define RSA_MAX_LENGTH   (130U)
 
#define ECDSA_MAX_LENGTH   (18U)
 
#define EC_PARAM_MAXLEN   (68U)
 
#define ASYM_CRYPT_LEN(bytelen)   (((bytelen) / 4U) + 1U)
 
#define RSA_KEY_E_MAXLEN   (8U)
 
#define RSA_KEY_N_MAXLEN   (520U)
 
#define RSA_KEY_PQ_MAXLEN   ((RSA_KEY_N_MAXLEN / 2U) + 4U)
 
#define RSA_SIG_MAXLEN   RSA_KEY_N_MAXLEN
 
#define EDDSA_MAX_KEY_LEN   (57U)
 
#define EDDSA_ED25519_KEY_LEN   (32U)
 
#define EDDSA_ED448_KEY_LEN   (57U)
 
#define EDDSA_ED25519_HASH_LEN   (64U)
 
#define EDDSA_ED448_HASH_LEN   (114U)
 

Macro Definition Documentation

◆ RSA_MAX_LENGTH

#define RSA_MAX_LENGTH   (130U)

Max size of AsymCrypt Data in words - for RSA

◆ ECDSA_MAX_LENGTH

#define ECDSA_MAX_LENGTH   (18U)

Max size of AsymCrypt Data in words - for ECDSA

◆ EC_PARAM_MAXLEN

#define EC_PARAM_MAXLEN   (68U)

Maximum length of a AsymCrypt data used in EC crypto in bytes, enough to accommodate 521-bit prime curves

◆ ASYM_CRYPT_LEN

#define ASYM_CRYPT_LEN (   bytelen)    (((bytelen) / 4U) + 1U)

Length of a data array in words

◆ RSA_KEY_E_MAXLEN

#define RSA_KEY_E_MAXLEN   (8U)

RSA KEY E maximun length

◆ RSA_KEY_N_MAXLEN

#define RSA_KEY_N_MAXLEN   (520U)

RSA KEY N maximun length

◆ RSA_KEY_PQ_MAXLEN

#define RSA_KEY_PQ_MAXLEN   ((RSA_KEY_N_MAXLEN / 2U) + 4U)

RSA KEY PQ maximun length

◆ RSA_SIG_MAXLEN

#define RSA_SIG_MAXLEN   RSA_KEY_N_MAXLEN

RSA KEY SIG maximun length

◆ EDDSA_MAX_KEY_LEN

#define EDDSA_MAX_KEY_LEN   (57U)

Eddsa Key length in Bytes

◆ EDDSA_ED25519_KEY_LEN

#define EDDSA_ED25519_KEY_LEN   (32U)

Ed25519 Key length in Bytes

◆ EDDSA_ED448_KEY_LEN

#define EDDSA_ED448_KEY_LEN   (57U)

Ed448 Key length in Bytes

◆ EDDSA_ED25519_HASH_LEN

#define EDDSA_ED25519_HASH_LEN   (64U)

Ed25519 Hash length in Bytes

◆ EDDSA_ED448_HASH_LEN

#define EDDSA_ED448_HASH_LEN   (114U)

Ed448 Hash length in Bytes

Typedef Documentation

◆ AsymCrypt_Handle

typedef void* AsymCrypt_Handle

Handle to the AsymCrypt driver.

◆ AsymCrypt_ExecuteShaCallback

typedef AsymCrypt_Return_t(* AsymCrypt_ExecuteShaCallback) (uint8_t *in_addr, uint32_t length, uint8_t *sha_addr)

This callback implemented to configure a SHA for EDDSA algorithms.

Parameters
in_addr[IN] Source address for Input SHA value
length[IN] Length of the input data.
sha_addr[IN] Address at which SHA value is available.
Returns
SystemP_SUCCESS on success or SystemP_FAILURE on Failure.

Enumeration Type Documentation

◆ AsymCrypt_Return_t

ASYM CRYPTO Driver Error code.

The enumeration describes all the possible return and error codes which the ASYM CRYPTO Driver can return

Enumerator
ASYM_CRYPT_RETURN_SUCCESS 

Success/pass return code

ASYM_CRYPT_RETURN_FAILURE 

General or unspecified failure/error

◆ AsymCrypt_EdCurveType_t

ASYM EDDSA Curve Type.

The enumeration describes the curves supported for EDDSA

Enumerator
ASYM_CRYPT_CURVE_TYPE_EDDSA_25519 

Success/pass return code

ASYM_CRYPT_CURVE_TYPE_EDDSA_448 

General or unspecified failure/error

Function Documentation

◆ AsymCrypt_open()

AsymCrypt_Handle AsymCrypt_open ( uint32_t  index)

Function to Open AsymCrypt instance, enable AsymCrypt engine, Initialize clocks.

Returns
A AsymCrypt_Handle on success or a NULL on an error or if it has been opened already

◆ AsymCrypt_close()

AsymCrypt_Return_t AsymCrypt_close ( AsymCrypt_Handle  handle)

Function to close a AsymCrypt module specified by the AsymCrypt handle.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()

◆ AsymCrypt_RSAPrivate()

AsymCrypt_Return_t AsymCrypt_RSAPrivate ( AsymCrypt_Handle  handle,
const uint32_t  m[RSA_MAX_LENGTH],
const struct AsymCrypt_RSAPrivkey k,
uint32_t  result[RSA_MAX_LENGTH] 
)

This Function performs Decryption or Signing operations.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()
mm value in bigint format.
kRSA private key
resultResult of the operation in bigint format. caller must allocate memory size of (2 * sizeof(p)) for the result.
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.

◆ AsymCrypt_RSAPublic()

AsymCrypt_Return_t AsymCrypt_RSAPublic ( AsymCrypt_Handle  handle,
const uint32_t  m[RSA_MAX_LENGTH],
const struct AsymCrypt_RSAPubkey k,
uint32_t  result[RSA_MAX_LENGTH] 
)

This Function performs Encryption or Verification operations.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()
mm value in bigint format.
kRSA public key
resultResult of the operation in bigint format. caller must allocate the same memory as s and n for this array.
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.

◆ AsymCrypt_RSAKeyGenPrivate()

AsymCrypt_Return_t AsymCrypt_RSAKeyGenPrivate ( AsymCrypt_Handle  handle,
struct AsymCrypt_RSAPrivkey k,
uint32_t  keybitsize 
)

This Function performs Encryption or Verification operations.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()
kRSA private key
keybitsizeResult of the operation in bigint format. caller must allocate the same memory as s and n for this array.
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.

◆ AsymCrypt_RSAKeyGenPublic()

AsymCrypt_Return_t AsymCrypt_RSAKeyGenPublic ( AsymCrypt_Handle  handle,
const struct AsymCrypt_RSAPrivkey privKey,
struct AsymCrypt_RSAPubkey pubKey,
uint32_t  keybitsize 
)

This Function performs Encryption or Verification operations.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()
privKeyRSA private key
pubKeyRSA public key
keybitsizeResult of the operation in bigint format. caller must allocate the same memory as s and n for this array.
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.

◆ AsymCrypt_ECDSASign()

AsymCrypt_Return_t AsymCrypt_ECDSASign ( AsymCrypt_Handle  handle,
const struct AsymCrypt_ECPrimeCurveP cp,
const uint32_t  priv[ECDSA_MAX_LENGTH],
const uint32_t  k[ECDSA_MAX_LENGTH],
const uint32_t  h[ECDSA_MAX_LENGTH],
struct AsymCrypt_ECDSASig sig 
)

ECDSA sign primitive function.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()
cpEC curve parameters
privEC private key
kRandom number for each signing
hHash value of message to sign in bigint format
sigECDSA Signature - 'r' and 's' values
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.

◆ AsymCrypt_ECDSAVerify()

AsymCrypt_Return_t AsymCrypt_ECDSAVerify ( AsymCrypt_Handle  handle,
const struct AsymCrypt_ECPrimeCurveP cp,
const struct AsymCrypt_ECPoint pub,
const struct AsymCrypt_ECDSASig sig,
const uint32_t  h[ECDSA_MAX_LENGTH] 
)

ECDSA verify primitive function.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()
cpEC curve parameters
pubEC Public key
sigECDSA Signature - 'r' & 's' value in bigint format
hHash value of message to verify in bigint format
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.

◆ AsymCrypt_ECDSAKeyGenPrivate()

AsymCrypt_Return_t AsymCrypt_ECDSAKeyGenPrivate ( AsymCrypt_Handle  handle,
const struct AsymCrypt_ECPrimeCurveP cp,
uint32_t  priv[ECDSA_MAX_LENGTH] 
)

ECDSA KeyGen Private Key function.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()
cpEC curve parameters
privEC Generated Private Key
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.

◆ AsymCrypt_ECDSAKeyGenPublic()

AsymCrypt_Return_t AsymCrypt_ECDSAKeyGenPublic ( AsymCrypt_Handle  handle,
const struct AsymCrypt_ECPrimeCurveP cp,
struct AsymCrypt_ECPoint pub,
const uint32_t  priv[ECDSA_MAX_LENGTH] 
)

ECDSA KeyGen Public Key function.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()
cpEC curve parameters
privEC Private Key as input
pubEC Generated Private Key
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.

◆ AsymCrypt_EddsaGetPubKey()

AsymCrypt_Return_t AsymCrypt_EddsaGetPubKey ( AsymCrypt_Handle  handle,
AsymCrypt_ExecuteShaCallback  shaCbFxn,
uint8_t  privKey[EDDSA_MAX_KEY_LEN],
uint8_t  pubKey[EDDSA_MAX_KEY_LEN],
AsymCrypt_EdCurveType_t  input_curve 
)

ECDSA KeyGen Public Key function.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()
shaCbFxn[in] SHA Callback Function
privKey[in] Private Key Function
pubKey[out] Public Key Function
input_curve[in] input_curve
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.

◆ AsymCrypt_EddsaSign()

AsymCrypt_Return_t AsymCrypt_EddsaSign ( AsymCrypt_Handle  handle,
AsymCrypt_ExecuteShaCallback  shaCbFxn,
const struct AsymCrypt_EddsaKey key,
const uint8_t *  ptrData,
const uint32_t  dataSizeByte,
struct AsymCrypt_EddsaSig sig,
AsymCrypt_EdCurveType_t  input_curve 
)

EDDSA Signing primitive function.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()
shaCbFxnSHA Callback Function
keyEDDSA Private/Public key pair
ptrDataInput Pointer to Data
dataSizeByteData Size in Bytes
sigOutput Pointer to Signature
input_curveInput Curve
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.

◆ AsymCrypt_EddsaVerify()

AsymCrypt_Return_t AsymCrypt_EddsaVerify ( AsymCrypt_Handle  handle,
AsymCrypt_ExecuteShaCallback  shaCbFxn,
const uint8_t  pubKey[EDDSA_MAX_KEY_LEN],
const uint8_t *  ptrData,
const uint32_t  dataSizeByte,
const struct AsymCrypt_EddsaSig sig,
AsymCrypt_EdCurveType_t  input_curve 
)

ECDSA verify primitive function.

Parameters
handleAsymCrypt_Handle returned from AsymCrypt_open()
shaCbFxnSHA Callback Function
pubKeyEDDSA Public key
ptrDataInput Pointer to Data
dataSizeByteData Size in Bytes
sigInput Pointer to Signature
input_curveInput Curve
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.

◆ AsymCrypt_EcdhGenSharedSecret()

AsymCrypt_Return_t AsymCrypt_EcdhGenSharedSecret ( AsymCrypt_Handle  handle,
const struct AsymCrypt_ECPrimeCurveP cp,
const uint32_t  priv[ECDSA_MAX_LENGTH],
const struct AsymCrypt_ECPoint pubKey,
struct AsymCrypt_ECPoint ecShSecret 
)

ECDSA verify primitive function.

Parameters
handle[in] AsymCrypt_Handle returned from AsymCrypt_open()
cp[in] EC curve parameters
priv[in] EC Private key
pubKey[in] EC Public key
ecShSecret[out] EC Shared Secret key
Returns
ASYM_CRYPT_RETURN_SUCCESS if requested operation completed. ASYM_CRYPT_RETURN_FAILURE if requested operation not completed.