Mayank Gupta / Mbed OS pelion-example-frdm

Dependencies:   FXAS21002 FXOS8700Q

Embed: (wiki syntax)

« Back to documentation index

pal_plat_Crypto.h File Reference

pal_plat_Crypto.h File Reference

PAL cryptographic - platform. This file contains cryptographic APIs that need to be implemented in the platform layer. More...

Go to the source code of this file.

Functions

palStatus_t pal_plat_initCrypto (void)
 Initiate the Crypto library.
palStatus_t pal_plat_cleanupCrypto (void)
 Free resources for the Crypto library.
palStatus_t pal_plat_initAes (palAesHandle_t *aes)
 Initialize an AES context.
palStatus_t pal_plat_freeAes (palAesHandle_t *aes)
 Free an AES context.
palStatus_t pal_plat_setAesKey (palAesHandle_t aes, const unsigned char *key, uint32_t keybits, palAesKeyType_t keyTarget)
 Set an AES key context for encryption or decryption.
palStatus_t pal_plat_aesCTR (palAesHandle_t aes, const unsigned char *input, unsigned char *output, size_t inLen, unsigned char iv[16], bool zeroOffset)
 Use AES-CTR encryption or decryption on a buffer.
palStatus_t pal_plat_aesECB (palAesHandle_t aes, const unsigned char input[PAL_CRYPT_BLOCK_SIZE], unsigned char output[PAL_CRYPT_BLOCK_SIZE], palAesMode_t mode)
 Use AES-ECB encryption or decryption on a block.
palStatus_t pal_plat_sha256 (const unsigned char *input, size_t inLen, unsigned char *output)
 Process SHA-256 over the input buffer.
palStatus_t pal_plat_x509Initiate (palX509Handle_t *x509)
 Initialize a certificate chain context.
palStatus_t pal_plat_x509CertParse (palX509Handle_t x509, const unsigned char *input, size_t inLen)
 Parse one or more certificates and add them to the chained list.
palStatus_t pal_plat_x509CertGetAttribute (palX509Handle_t x509Cert, palX509Attr_t attr, void *output, size_t outLenBytes, size_t *actualOutLenBytes)
 Get attributes from the parsed certificate.
palStatus_t pal_plat_x509CertVerifyExtended (palX509Handle_t x509Cert, palX509Handle_t x509CertChain, int32_t *verifyResult)
 Verify one or more X.509 DER formatted certificates.
palStatus_t pal_plat_x509Free (palX509Handle_t *x509)
 Deallocate all certificate data.
palStatus_t pal_plat_mdInit (palMDHandle_t *md, palMDType_t mdType)
 Initialize an message digest (MD) context and set up the required data according to the given algorithm.
palStatus_t pal_plat_mdUpdate (palMDHandle_t md, const unsigned char *input, size_t inLen)
 Generic message digest (MD) process buffer.
palStatus_t pal_plat_mdGetOutputSize (palMDHandle_t md, size_t *bufferSize)
 Generic message digest (MD) output buffer size getter.
palStatus_t pal_plat_mdFinal (palMDHandle_t md, unsigned char *output)
 Generic message digest (MD) final digest.
palStatus_t pal_plat_mdFree (palMDHandle_t *md)
 Free and clear the message digest (MD) context.
palStatus_t pal_plat_verifySignature (palX509Handle_t x509, palMDType_t mdType, const unsigned char *hash, size_t hashLen, const unsigned char *sig, size_t sigLen)
 Verify the signature.
palStatus_t pal_plat_ASN1GetTag (unsigned char **position, const unsigned char *end, size_t *len, uint8_t tag)
 Check for a specific tag. Updates the pointer to immediately after the tag and length.
palStatus_t pal_plat_CCMInit (palCCMHandle_t *ctx)
 Initialize a CCM context.
palStatus_t pal_plat_CCMFree (palCCMHandle_t *ctx)
 Destroy a CCM context.
palStatus_t pal_plat_CCMSetKey (palCCMHandle_t ctx, palCipherID_t id, const unsigned char *key, unsigned int keybits)
 Set the CCM key.
palStatus_t pal_plat_CCMDecrypt (palCCMHandle_t ctx, unsigned char *input, size_t inLen, unsigned char *iv, size_t ivLen, unsigned char *add, size_t addLen, unsigned char *tag, size_t tagLen, unsigned char *output)
 Apply authenticated CCM decryption on a buffer.
palStatus_t pal_plat_CCMEncrypt (palCCMHandle_t ctx, unsigned char *input, size_t inLen, unsigned char *iv, size_t ivLen, unsigned char *add, size_t addLen, unsigned char *output, unsigned char *tag, size_t tagLen)
 Apply CCM encryption on a buffer.
palStatus_t pal_plat_CtrDRBGInit (palCtrDrbgCtxHandle_t *ctx)
 Initializes a Counter mode Deterministic Random Byte Generation (CTR-DRBG) context.
palStatus_t pal_plat_CtrDRBGFree (palCtrDrbgCtxHandle_t *ctx)
 Destroys a Counter mode Deterministic Random Byte Generation (CTR-DRBG) context.
palStatus_t pal_plat_CtrDRBGIsSeeded (palCtrDrbgCtxHandle_t ctx)
 Check whether a Counter mode Deterministic Random Byte Generator (CTR-DRBG) context is seeded.
palStatus_t pal_plat_CtrDRBGSeed (palCtrDrbgCtxHandle_t ctx, const void *seed, size_t len)
 Set the initial seed for a Counter mode Deterministic Random Byte Generation (CTR-DRBG) context.
palStatus_t pal_plat_CtrDRBGGenerate (palCtrDrbgCtxHandle_t ctx, unsigned char *out, size_t len)
 Generate a random value using a Counter mode Deterministic Random Byte Generation (CTR-DRBG) context.
palStatus_t pal_plat_CtrDRBGGenerateWithAdditional (palCtrDrbgCtxHandle_t ctx, unsigned char *out, size_t len, unsigned char *additional, size_t additionalLen)
 Generate a random value with additional input using a Counter mode Deterministic Random Byte Generation (CTR-DRBG) context.
palStatus_t pal_plat_cipherCMAC (const unsigned char *key, size_t keyLenInBits, const unsigned char *input, size_t inputLenInBytes, unsigned char *output)
 Initialize a Cipher-based Message Authentication Code (CMAC) context with a AES cipher.
palStatus_t pal_plat_CMACStart (palCMACHandle_t *ctx, const unsigned char *key, size_t keyLenBits, palCipherID_t cipherID)
 Start an iterative cipher CMAC context.
palStatus_t pal_plat_CMACUpdate (palCMACHandle_t ctx, const unsigned char *input, size_t inLen)
 Update an iterative cipher CMAC context.
palStatus_t pal_plat_CMACFinish (palCMACHandle_t *ctx, unsigned char *output, size_t *outLen)
 Finish an iterative cipher CMAC context.
palStatus_t pal_plat_mdHmacSha256 (const unsigned char *key, size_t keyLenInBytes, const unsigned char *input, size_t inputLenInBytes, unsigned char *output, size_t *outputLenInBytes)
 Apply a one-shot Message Digest HMAC cipher.
palStatus_t pal_plat_ECCheckKey (palCurveHandle_t grp, palECKeyHandle_t key, uint32_t type, bool *verified)
 Check that a private or public key is a valid key and the public key is on this curve.
palStatus_t pal_plat_ECKeyNew (palECKeyHandle_t *key)
 Allocate key context and initialize a key pair as an invalid pair.
palStatus_t pal_plat_ECKeyFree (palECKeyHandle_t *key)
 Free the components of a key pair.
palStatus_t pal_plat_parseECPrivateKeyFromDER (const unsigned char *prvDERKey, size_t keyLen, palECKeyHandle_t key)
 Parse a DER encoded private key.
palStatus_t pal_plat_parseECPublicKeyFromDER (const unsigned char *pubDERKey, size_t keyLen, palECKeyHandle_t key)
 Parse a DER encoded public key.
palStatus_t pal_plat_writePrivateKeyToDer (palECKeyHandle_t key, unsigned char *derBuffer, size_t bufferSize, size_t *actualSize)
 Encode the given private key from the key handle to the DER buffer.
palStatus_t pal_plat_writePublicKeyToDer (palECKeyHandle_t key, unsigned char *derBuffer, size_t bufferSize, size_t *actualSize)
 Encode the given public key from the key handle to the DER buffer.
palStatus_t pal_plat_ECKeyGenerateKey (palGroupIndex_t grpID, palECKeyHandle_t key)
 Generate a curve ID for a keypair.
palStatus_t pal_plat_ECKeyGetCurve (palECKeyHandle_t key, palGroupIndex_t *grpID)
 Retrieve the curve ID, if it exists, from the given key.
palStatus_t pal_plat_x509CSRInit (palx509CSRHandle_t *x509CSR)
 Allocate and initialize the X.509 certificate signing request (CSR) context.
palStatus_t pal_plat_x509CSRSetSubject (palx509CSRHandle_t x509CSR, const char *subjectName)
 Set the subject name for a certificate signing request (CSR). The subject name should contain a comma-separated list of OIDs and values.
palStatus_t pal_plat_x509CSRSetMD (palx509CSRHandle_t x509CSR, palMDType_t mdType)
 Set the message digest (MD) algorithm to use for the signature.
palStatus_t pal_plat_x509CSRSetKey (palx509CSRHandle_t x509CSR, palECKeyHandle_t pubKey, palECKeyHandle_t prvKey)
 Set the key for a CSR.
palStatus_t pal_plat_x509CSRSetKeyUsage (palx509CSRHandle_t x509CSR, uint32_t keyUsage)
 Set flags for key usage extension.
palStatus_t pal_plat_x509CSRSetExtendedKeyUsage (palx509CSRHandle_t x509CSR, uint32_t extKeyUsage)
 Set flags for extended key usage extension.
palStatus_t pal_plat_x509CSRSetExtension (palx509CSRHandle_t x509CSR, const char *oid, size_t oidLen, const unsigned char *value, size_t valueLen)
 Generic function to add to the CSR.
palStatus_t pal_plat_x509CSRWriteDER (palx509CSRHandle_t x509CSR, unsigned char *derBuf, size_t derBufLen, size_t *actualDerLen)
 Write a CSR to a DER structure.
palStatus_t pal_plat_x509CSRFromCertWriteDER (palX509Handle_t x509Cert, palx509CSRHandle_t x509CSR, unsigned char *derBuf, size_t derBufLen, size_t *actualDerBufLen)
 Write a CSR from a given X.509 Certificate.
palStatus_t pal_plat_x509CertGetHTBS (palX509Handle_t x509Cert, palMDType_t hash_type, unsigned char *output, size_t outLenBytes, size_t *actualOutLenBytes)
 Calculate the hash of the To Be Signed (TBS) part of an X.509 certificate.
palStatus_t pal_plat_x509CSRFree (palx509CSRHandle_t *x509CSR)
 Free the X.509 CSR context.
palStatus_t pal_plat_ECDHComputeKey (const palCurveHandle_t grp, const palECKeyHandle_t peerPublicKey, const palECKeyHandle_t privateKey, palECKeyHandle_t outKey)
 Compute a shared secret.
palStatus_t pal_plat_ECDSASign (palCurveHandle_t grp, palMDType_t mdType, palECKeyHandle_t prvKey, unsigned char *dgst, uint32_t dgstLen, unsigned char *sig, size_t *sigLen)
 Compute the ECDSA signature of a previously hashed message.
palStatus_t pal_plat_ECDSAVerify (palECKeyHandle_t pubKey, unsigned char *dgst, uint32_t dgstLen, unsigned char *sig, size_t sigLen, bool *verified)
 Verify the ECDSA signature of a previously hashed message.
palStatus_t pal_plat_ECGroupFree (palCurveHandle_t *grp)
 Free the components of an ECP group.
palStatus_t pal_plat_ECGroupInitAndLoad (palCurveHandle_t *grp, palGroupIndex_t index)
 Initialize an ECP group and set it using well-known domain parameters.

Detailed Description

PAL cryptographic - platform. This file contains cryptographic APIs that need to be implemented in the platform layer.

Definition in file pal_plat_Crypto.h.


Function Documentation

palStatus_t pal_plat_aesCTR ( palAesHandle_t  aes,
const unsigned char *  input,
unsigned char *  output,
size_t  inLen,
unsigned char  iv[16],
bool  zeroOffset 
)

Use AES-CTR encryption or decryption on a buffer.

Parameters:
[in]aes,:The AES context.
[in]input,:The input data buffer.
[out]output,:The output data buffer.
[in]inLen,:The length of the input data in bytes.
[in]iv,:The initialization vector for AES-CTR.
[in]zeroOffset,:Send offset value zero to platform function.
Note:
Due to the nature of CTR you should use the same key schedule for both encryption and decryption. So before calling this function you MUST call `pal_setAesKey()` with the key target PAL_KEY_TARGET_ENCRYPTION to set the key.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 163 of file pal_plat_Crypto.c.

palStatus_t pal_plat_aesECB ( palAesHandle_t  aes,
const unsigned char  input[PAL_CRYPT_BLOCK_SIZE],
unsigned char  output[PAL_CRYPT_BLOCK_SIZE],
palAesMode_t  mode 
)

Use AES-ECB encryption or decryption on a block.

Parameters:
[in]aes,:The AES context.
[in]input,:A 16-byte input block.
[out]output,:A 16-byte output block.
[in]mode,:Choose between encryption (PAL_AES_ENCRYPT) or decryption (PAL_AES_DECRYPT).
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 184 of file pal_plat_Crypto.c.

palStatus_t pal_plat_ASN1GetTag ( unsigned char **  position,
const unsigned char *  end,
size_t *  len,
uint8_t  tag 
)

Check for a specific tag. Updates the pointer to immediately after the tag and length.

Parameters:
[in,out]position,:The initial position in the ASN.1 data.
[in]end,:The end of data.
[out]len,:The tag length in bytes.
[in]tag,:The expected tag.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 766 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CCMDecrypt ( palCCMHandle_t  ctx,
unsigned char *  input,
size_t  inLen,
unsigned char *  iv,
size_t  ivLen,
unsigned char *  add,
size_t  addLen,
unsigned char *  tag,
size_t  tagLen,
unsigned char *  output 
)

Apply authenticated CCM decryption on a buffer.

Parameters:
[in]ctx,:The CCM context.
[in]inputA buffer holding the input data.
[in]inLen,:The length of the input data in bytes.
[in]iv,:The initialization vector.
[in]ivLen,:The length of the IV in bytes.
[in]add,:Additional data.
[in]addLen,:The length of the additional data in bytes.
[in]tag,:A buffer holding the tag.
[in]tagLen,:The length of the tag in bytes.
[out]output,:A buffer for holding the output data.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 917 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CCMEncrypt ( palCCMHandle_t  ctx,
unsigned char *  input,
size_t  inLen,
unsigned char *  iv,
size_t  ivLen,
unsigned char *  add,
size_t  addLen,
unsigned char *  output,
unsigned char *  tag,
size_t  tagLen 
)

Apply CCM encryption on a buffer.

Parameters:
[in]ctx,:The CCM context.
[in]inputA buffer holding the input data.
[in]inLen,:The length of the input data in bytes.
[in]iv,:The initialization vector.
[in]ivLen,:The length of the IV in bytes.
[in]add,:Additional data.
[in]addLen,:The length of additional data in bytes.
[out]output,:A buffer for holding the output data, must be at least 'inLen' bytes wide.
[out]tag,:A buffer for holding the tag.
[out]tagLen,:The length of the tag to generate in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 938 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CCMFree ( palCCMHandle_t *  ctx )

Destroy a CCM context.

Parameters:
[in]ctx,:The CCM context to destroy.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 874 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CCMInit ( palCCMHandle_t *  ctx )

Initialize a CCM context.

Parameters:
[in]ctx,:The CCM context to be initialized.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 855 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CCMSetKey ( palCCMHandle_t  ctx,
palCipherID_t  id,
const unsigned char *  key,
unsigned int  keybits 
)

Set the CCM key.

Parameters:
[in]ctx,:The CCM context.
[in]id,:The cipher to use (a 128-bit block cipher).
[in]key,:The encryption key.
[in]keybits,:The key size in bits. Must be acceptable by the cipher.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 885 of file pal_plat_Crypto.c.

palStatus_t pal_plat_cipherCMAC ( const unsigned char *  key,
size_t  keyLenInBits,
const unsigned char *  input,
size_t  inputLenInBytes,
unsigned char *  output 
)

Initialize a Cipher-based Message Authentication Code (CMAC) context with a AES cipher.

Parameters:
[in]ctx,:The CMAC context to initialize.
[in]key,:The encryption key.
[in]keyLenInBits,:The key size in bits.
[in]input,:A buffer for the input data.
[in]inputLenInBytes,:The input data length in bytes.
[out]output,:Generic CMAC result.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1118 of file pal_plat_Crypto.c.

palStatus_t pal_plat_cleanupCrypto ( void   )

Free resources for the Crypto library.

Note:
This function must be called in the general PAL cleanup function.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 101 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CMACFinish ( palCMACHandle_t *  ctx,
unsigned char *  output,
size_t *  outLen 
)

Finish an iterative cipher CMAC context.

Parameters:
[in]ctx,:The CMAC context to initialize.
[out]output,:A buffer for the output data.
[out]outLen,:The output data length in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1215 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CMACStart ( palCMACHandle_t *  ctx,
const unsigned char *  key,
size_t  keyLenBits,
palCipherID_t  cipherID 
)

Start an iterative cipher CMAC context.

Parameters:
[in]ctx,:The CMAC context to initialize.
[in]key,:The CMAC key.
[in]keyLenBits,:The key size in bits.
[in]cipherID,:A buffer for the input data.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1142 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CMACUpdate ( palCMACHandle_t  ctx,
const unsigned char *  input,
size_t  inLen 
)

Update an iterative cipher CMAC context.

Parameters:
[in]ctx,:The CMAC context to initialize.
[in]input,:A buffer for the input data.
[in]inputLen,:The input data length in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1200 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CtrDRBGFree ( palCtrDrbgCtxHandle_t *  ctx )

Destroys a Counter mode Deterministic Random Byte Generation (CTR-DRBG) context.

Parameters:
[in]ctx,:The CTR-DRBG context to destroy.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 979 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CtrDRBGGenerate ( palCtrDrbgCtxHandle_t  ctx,
unsigned char *  out,
size_t  len 
)

Generate a random value using a Counter mode Deterministic Random Byte Generation (CTR-DRBG) context.

Parameters:
[in]ctx,:The CTR-DRBG context.
[in]out,:The buffer to fill.
[in]len,:The length of the buffer in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1075 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CtrDRBGGenerateWithAdditional ( palCtrDrbgCtxHandle_t  ctx,
unsigned char *  out,
size_t  len,
unsigned char *  additional,
size_t  additionalLen 
)

Generate a random value with additional input using a Counter mode Deterministic Random Byte Generation (CTR-DRBG) context.

Parameters:
[in]ctx,:The CTR-DRBG context.
[in]out,:The buffer to fill.
[in]len,:The length of the buffer in bytes.
[in]additional,:Additional data to update with.
[in]additionalLen,:Length of additional data in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1081 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CtrDRBGInit ( palCtrDrbgCtxHandle_t *  ctx )

Initializes a Counter mode Deterministic Random Byte Generation (CTR-DRBG) context.

Parameters:
[in]ctx,:The CTR-DRBG context to be initialized.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 959 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CtrDRBGIsSeeded ( palCtrDrbgCtxHandle_t  ctx )

Check whether a Counter mode Deterministic Random Byte Generator (CTR-DRBG) context is seeded.

Calls to `pal_plat_CtrDRBGGenerate()` only succeed when the context is seeded.

Parameters:
[in]ctx,:The CTR-DRBG context to be checked.
Returns:
PAL_SUCCESS if the CTR-DRBG is seeded.
PAL_ERR_CTR_DRBG_NOT_SEEDED if the CTR-DRBG is not yet seeded, meaning calls to `pal_plat_CtrDRBGGenerate()` will fail.
Any other negative value indicating a specific error code in case of failure.

Definition at line 992 of file pal_plat_Crypto.c.

palStatus_t pal_plat_CtrDRBGSeed ( palCtrDrbgCtxHandle_t  ctx,
const void *  seed,
size_t  len 
)

Set the initial seed for a Counter mode Deterministic Random Byte Generation (CTR-DRBG) context.

Parameters:
[in]ctx,:The CTR-DRBG context to be seeded.
[in]seed,:The seed data.
[in]len,:The seed data length in bytes.
Returns:
PAL_SUCCESS on success, negative value indicating a specific error code in case of failure.

Definition at line 1070 of file pal_plat_Crypto.c.

palStatus_t pal_plat_ECCheckKey ( palCurveHandle_t  grp,
palECKeyHandle_t  key,
uint32_t  type,
bool *  verified 
)

Check that a private or public key is a valid key and the public key is on this curve.

Parameters:
[in]grp,:The curve the point should belong to.
[in]key,:A pointer to the struct that holds the keys to check.
[in]type,:Determines whether to check the private key (PAL_CHECK_PRIVATE_KEY), public key (PAL_CHECK_PUBLIC_KEY), or both (PAL_CHECK_BOTH_KEYS).
[out]verified,:The result of the verification.
Note:
The key can contain only private or public key or both.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1331 of file pal_plat_Crypto.c.

palStatus_t pal_plat_ECDHComputeKey ( const palCurveHandle_t  grp,
const palECKeyHandle_t  peerPublicKey,
const palECKeyHandle_t  privateKey,
palECKeyHandle_t  outKey 
)

Compute a shared secret.

Parameters:
[in]grp,:The ECP group.
[in]peerPublicKey,:The public key from a peer.
[in]privateKey,:The private key.
[out]outKey,:The shared secret.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1668 of file pal_plat_Crypto.c.

palStatus_t pal_plat_ECDSASign ( palCurveHandle_t  grp,
palMDType_t  mdType,
palECKeyHandle_t  prvKey,
unsigned char *  dgst,
uint32_t  dgstLen,
unsigned char *  sig,
size_t *  sigLen 
)

Compute the ECDSA signature of a previously hashed message.

Parameters:
[in]grp,:The ECP group.
[in]prvKey,:The private signing key-
[in]dgst,:The message hash.
[in]dgstLen,:The length of the message buffer in bytes.
[out]sig,:A buffer to hold the computed signature.
[out]sigLen,:The length of the computed signature in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1704 of file pal_plat_Crypto.c.

palStatus_t pal_plat_ECDSAVerify ( palECKeyHandle_t  pubKey,
unsigned char *  dgst,
uint32_t  dgstLen,
unsigned char *  sig,
size_t  sigLen,
bool *  verified 
)

Verify the ECDSA signature of a previously hashed message.

Parameters:
[in]pubKey,:The public key for verification.
[in]dgst,:The message hash.
[in]dgstLen,:The length of the message buffer in bytes.
[in]sign,:The signature.
[in]sig,:A buffer to hold the computed signature.
[in]sigLen,:The length of the computed signature in bytes.
[out]verified,:The boolean to hold the verification result.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1752 of file pal_plat_Crypto.c.

palStatus_t pal_plat_ECGroupFree ( palCurveHandle_t *  grp )

Free the components of an ECP group.

Parameters:
[in]grp,:The group to free.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1611 of file pal_plat_Crypto.c.

palStatus_t pal_plat_ECGroupInitAndLoad ( palCurveHandle_t *  grp,
palGroupIndex_t  index 
)

Initialize an ECP group and set it using well-known domain parameters.

Parameters:
[in]grp,:The destination group.
[in]index,:The index in the list of well-known domain parameters.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1623 of file pal_plat_Crypto.c.

palStatus_t pal_plat_ECKeyFree ( palECKeyHandle_t *  key )

Free the components of a key pair.

Parameters:
[in]key,:The key pair to free.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1371 of file pal_plat_Crypto.c.

palStatus_t pal_plat_ECKeyGenerateKey ( palGroupIndex_t  grpID,
palECKeyHandle_t  key 
)

Generate a curve ID for a keypair.

Parameters:
[in]grpID,:The generated curve ID.
[in]key,:A handle to the destination keypair.
Note:
The `key` parameter must be first allocated by `pal_ECKeyNew()`.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1550 of file pal_plat_Crypto.c.

palStatus_t pal_plat_ECKeyGetCurve ( palECKeyHandle_t  key,
palGroupIndex_t grpID 
)

Retrieve the curve ID, if it exists, from the given key.

Parameters:
[in]key,:The key from which to retrieve the curve ID.
[out]grpID,:The curve ID for the given key. In case of error, this pointer contains "PAL_ECP_DP_NONE".
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1587 of file pal_plat_Crypto.c.

palStatus_t pal_plat_ECKeyNew ( palECKeyHandle_t *  key )

Allocate key context and initialize a key pair as an invalid pair.

Parameters:
[in]key,:The key pair context to initialize
Returns:
PAL_SUCCESS on success, negative value indicating a specific error code in case of failure.

Definition at line 1352 of file pal_plat_Crypto.c.

palStatus_t pal_plat_freeAes ( palAesHandle_t *  aes )

Free an AES context.

Parameters:
[in,out]aes,:The AES context to be deallocated.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 127 of file pal_plat_Crypto.c.

palStatus_t pal_plat_initAes ( palAesHandle_t *  aes )

Initialize an AES context.

Parameters:
[in,out]aes,:The AES context to be initialized.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 106 of file pal_plat_Crypto.c.

palStatus_t pal_plat_initCrypto ( void   )

Initiate the Crypto library.

Initialization is not required for some crypto libraries. In such cases, the implementation may be empty.

Note:
This function must be called in the general PAL initializtion function.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 96 of file pal_plat_Crypto.c.

palStatus_t pal_plat_mdFinal ( palMDHandle_t  md,
unsigned char *  output 
)

Generic message digest (MD) final digest.

Parameters:
[in]md,:The MD context.
[in]output,:The generic message digest checksum result.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 696 of file pal_plat_Crypto.c.

palStatus_t pal_plat_mdFree ( palMDHandle_t *  md )

Free and clear the message digest (MD) context.

Parameters:
[in,out]md,:The MD context to be freed.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 719 of file pal_plat_Crypto.c.

palStatus_t pal_plat_mdGetOutputSize ( palMDHandle_t  md,
size_t *  bufferSize 
)

Generic message digest (MD) output buffer size getter.

Parameters:
[in]md,:The MD context.
[out]bufferSize,:A pointer to hold the output size of the `pal_mdFinal()` for the given handle.
Note:
You SHOULD call this function before calling `pal_mdFinal()`.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 678 of file pal_plat_Crypto.c.

palStatus_t pal_plat_mdHmacSha256 ( const unsigned char *  key,
size_t  keyLenInBytes,
const unsigned char *  input,
size_t  inputLenInBytes,
unsigned char *  output,
size_t *  outputLenInBytes 
)

Apply a one-shot Message Digest HMAC cipher.

Parameters:
[in]key,:The encryption key.
[in]keyLenInBytes,:The key size in bytes.
[in]input,:A buffer for the input data.
[in]inputLenInBytes,:The input data length in bytes.
[out]output,:The generic HMAC result.
[out]outputLenInBytes,:Size of the HMAC result in bytes. Optional.
Note:
Expects output to be 32 bytes long
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1239 of file pal_plat_Crypto.c.

palStatus_t pal_plat_mdInit ( palMDHandle_t *  md,
palMDType_t  mdType 
)

Initialize an message digest (MD) context and set up the required data according to the given algorithm.

Parameters:
[in,out]md,:The MD context to be initialized.
[in]mdType,:The MD algorithm.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 570 of file pal_plat_Crypto.c.

palStatus_t pal_plat_mdUpdate ( palMDHandle_t  md,
const unsigned char *  input,
size_t  inLen 
)

Generic message digest (MD) process buffer.

Parameters:
[in]md,:The MD context.
[in]input,:A buffer holding the input data.
[in]inLen,:The length of the input data in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 655 of file pal_plat_Crypto.c.

palStatus_t pal_plat_parseECPrivateKeyFromDER ( const unsigned char *  prvDERKey,
size_t  keyLen,
palECKeyHandle_t  key 
)

Parse a DER encoded private key.

Parameters:
[in]prvDERKey,:A buffer that holds the DER encoded private key.
[in]keyLen,:The key length in bytes.
[out]key,:A handle for the context that holds the parsed key.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1407 of file pal_plat_Crypto.c.

palStatus_t pal_plat_parseECPublicKeyFromDER ( const unsigned char *  pubDERKey,
size_t  keyLen,
palECKeyHandle_t  key 
)

Parse a DER encoded public key.

Parameters:
[in]pubDERKey,:A buffer that holds the DER encoded public key.
[in]keyLen,:The key length in bytes.
[out]key,:A handle for the context that holds the parsed key.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1442 of file pal_plat_Crypto.c.

palStatus_t pal_plat_setAesKey ( palAesHandle_t  aes,
const unsigned char *  key,
uint32_t  keybits,
palAesKeyType_t  keyTarget 
)

Set an AES key context for encryption or decryption.

Parameters:
[in]aes,:The AES context.
[in]key,:AES key.
[in]keybits,:The size of the key in bits.
[in]keyTarget,:The key target, either encryption or decryption.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 140 of file pal_plat_Crypto.c.

palStatus_t pal_plat_sha256 ( const unsigned char *  input,
size_t  inLen,
unsigned char *  output 
)

Process SHA-256 over the input buffer.

Parameters:
[in]input,:A buffer for the input data.
[in]inLen,:The length of the input data in bytes.
[out]output,:SHA-256 checksum result.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 199 of file pal_plat_Crypto.c.

palStatus_t pal_plat_verifySignature ( palX509Handle_t  x509,
palMDType_t  mdType,
const unsigned char *  hash,
size_t  hashLen,
const unsigned char *  sig,
size_t  sigLen 
)

Verify the signature.

Parameters:
[in]x509,:The certificate context that holds the PK data.
[in]mdType,:The MD algorithm used.
[in]hash,:The hash of the message to sign.
[in]hashLen,:The hash length in bytes.
[in]sig,:The signature to verify.
[in]sigLen,:The signature length in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 731 of file pal_plat_Crypto.c.

palStatus_t pal_plat_writePrivateKeyToDer ( palECKeyHandle_t  key,
unsigned char *  derBuffer,
size_t  bufferSize,
size_t *  actualSize 
)

Encode the given private key from the key handle to the DER buffer.

Parameters:
[in]key,:A handle to the private key.
[out]derBuffer,:A buffer to hold the result of the DER encoding.
[in]bufferSize,:The size of the allocated buffer in bytes.
[out]actualSize,:The actual size of the written data in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1498 of file pal_plat_Crypto.c.

palStatus_t pal_plat_writePublicKeyToDer ( palECKeyHandle_t  key,
unsigned char *  derBuffer,
size_t  bufferSize,
size_t *  actualSize 
)

Encode the given public key from the key handle to the DER buffer.

Parameters:
[in]key,:A handle to the public key.
[out]derBuffer,:A buffer to hold the result of the DER encoding.
[in]bufferSize,:The size of the allocated buffer in bytes.
[out]actualSize,:The actual size of the written data in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1524 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CertGetAttribute ( palX509Handle_t  x509Cert,
palX509Attr_t  attr,
void *  output,
size_t  outLenBytes,
size_t *  actualOutLenBytes 
)

Get attributes from the parsed certificate.

Parameters:
[in]x509Cert,:The parsed certificate.
[in]attr,:The required attribute.
[out]output,:A buffer to hold the attribute value.
[in]outLenBytes,:The size of the allocated buffer in bytes.
[out]actualOutLenBytes,:The actual size of the attribute in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 361 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CertGetHTBS ( palX509Handle_t  x509Cert,
palMDType_t  hash_type,
unsigned char *  output,
size_t  outLenBytes,
size_t *  actualOutLenBytes 
)

Calculate the hash of the To Be Signed (TBS) part of an X.509 certificate.

This function may be used to validate a certificate signature. To do so, use this function to retrieve the hash, then verify the signature using the hash, the public key and the signature of the X.509

Parameters:
[in]x509Cert,:Handle to the certificate to hash the TBS.
[in]hash_type,:The hash type. Currently only PAL_SHA256 supported
[out]output,:Pointer to a buffer that will contain the hash digest. This buffer must be at least the size of the digest. When `hash_type` is PAL_SHA256, then buffer pointed to by output must be at least 32 bytes.
[in]outLenBytes,:The size of the buffer pointed to by output in bytes. Must be at least the size of the digest.
[out]actualOutLenBytes,:Size of the digest copied to output in bytes. In case of success, will always be the length of the hash digest.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 2054 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CertParse ( palX509Handle_t  x509,
const unsigned char *  input,
size_t  inLen 
)

Parse one or more certificates and add them to the chained list.

Parameters:
[in]x509,:The start of the chain.
[in]input,:A buffer holding the certificate data in PEM or DER format.
[in]inLen,:The size of the input buffer in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 226 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CertVerifyExtended ( palX509Handle_t  x509Cert,
palX509Handle_t  x509CertChain,
int32_t *  verifyResult 
)

Verify one or more X.509 DER formatted certificates.

Parameters:
[in]x509Cert,:A handle holding the parsed certificate.
[in]x509CertChain,:The start of the chain to verify the X.509 DER certificate with. This is optional.
[out]verifyResult,:Bitmask of errors that cause the failure. This value is relevant ONLY in case that the return value of the function is `PAL_ERR_X509_CERT_VERIFY_FAILED`.
Note:
In case a platform doesn't support multiple errors for certificate verification, please return `PAL_ERR_X509_CERT_VERIFY_FAILED` and the reason should be specified in the `verifyResult`
Returns:
PAL_SUCCESS on success.
PAL_ERR_X509_CERT_VERIFY_FAILED in case of failure.

please DO NOT change errors order

Definition at line 499 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CSRFree ( palx509CSRHandle_t *  x509CSR )

Free the X.509 CSR context.

Parameters:
[in]x509CSR,:The CSR context to free.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 2043 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CSRFromCertWriteDER ( palX509Handle_t  x509Cert,
palx509CSRHandle_t  x509CSR,
unsigned char *  derBuf,
size_t  derBufLen,
size_t *  actualDerBufLen 
)

Write a CSR from a given X.509 Certificate.

Parameters:
[in]x509Cert,:The parsed X.509 certificate.
[in,out]x509CSR,:A valid handle to a CSR that has already been initialized with at least private key.
[out]derBuf,:A buffer to write to.
[out]derBufLen,:The buffer length in bytes.
[out]actualDerBufLen,:The actual length of the written data in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Note - we assume that the x509CSR object is already initialized and contain at list a private key.

Definition at line 2160 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CSRInit ( palx509CSRHandle_t *  x509CSR )

Allocate and initialize the X.509 certificate signing request (CSR) context.

Parameters:
[in]x509CSR,:The CSR context to allocate and initialize.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1785 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CSRSetExtendedKeyUsage ( palx509CSRHandle_t  x509CSR,
uint32_t  extKeyUsage 
)

Set flags for extended key usage extension.

Parameters:
[in]x509CSR,:The CSR context to use.
[in]extKeyUsage,:The extended key usage flags, should be taken from `palExtKeyUsage_t`.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1929 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CSRSetExtension ( palx509CSRHandle_t  x509CSR,
const char *  oid,
size_t  oidLen,
const unsigned char *  value,
size_t  valueLen 
)

Generic function to add to the CSR.

Parameters:
[in]x509CSR,:The CSR context to use.
[in]oid,:The OID of the extension.
[in]oidLen,:The OID length in bytes.
[in]value,:The value of the extension OCTET STRING.
[in]valueLen,:The value length in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 2005 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CSRSetKey ( palx509CSRHandle_t  x509CSR,
palECKeyHandle_t  pubKey,
palECKeyHandle_t  prvKey 
)

Set the key for a CSR.

Parameters:
[in]x509CSR,:The CSR context to use.
[in]pubKey,:The public key to include. To use a keypair handle, see the note.
[in]prvKey,:The public key to sign with.
Note:
To use a keypair, please send it as `pubKey` and NULL as `prvKey`.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1831 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CSRSetKeyUsage ( palx509CSRHandle_t  x509CSR,
uint32_t  keyUsage 
)

Set flags for key usage extension.

Parameters:
[in]x509CSR,:The CSR context to use.
[in]keyUsage,:The key usage flags. See `palKeyUsage_t` for options.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1891 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CSRSetMD ( palx509CSRHandle_t  x509CSR,
palMDType_t  mdType 
)

Set the message digest (MD) algorithm to use for the signature.

Parameters:
[in]x509CSR,:The CSR context to use.
[in]mdType,:The MD algorithm to use.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1869 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CSRSetSubject ( palx509CSRHandle_t  x509CSR,
const char *  subjectName 
)

Set the subject name for a certificate signing request (CSR). The subject name should contain a comma-separated list of OIDs and values.

Parameters:
[in]x509CSR,:The CSR context to use.
[in]subjectName,:The subject name to set.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 1803 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509CSRWriteDER ( palx509CSRHandle_t  x509CSR,
unsigned char *  derBuf,
size_t  derBufLen,
size_t *  actualDerLen 
)

Write a CSR to a DER structure.

Parameters:
[in]x509CSR,:The CSR context to use.
[in]derBuf,:A buffer to write to.
[in]derBufLen,:The buffer length in bytes.
[in]actualDerLen,:The actual length of the written data in bytes.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 2019 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509Free ( palX509Handle_t *  x509 )

Deallocate all certificate data.

Parameters:
[in,out]x509,:The certificate chain to free.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 556 of file pal_plat_Crypto.c.

palStatus_t pal_plat_x509Initiate ( palX509Handle_t *  x509 )

Initialize a certificate chain context.

Parameters:
[in,out]x509,:The certificate chain to initialize.
Returns:
PAL_SUCCESS on success. A negative value indicating a specific error code in case of failure.

Definition at line 206 of file pal_plat_Crypto.c.