19 #ifndef _PAL_CRYPTO_H_    20 #define _PAL_CRYPTO_H_    23     #error "Please do not include this file directly, use pal.h instead"    90 #define PAL_ASN1_CLASS_BITS 0xC0    91 #define PAL_ASN1_TAG_BITS 0x1F    92 #define PAL_CRYPT_BLOCK_SIZE 16    93 #define PAL_SHA256_SIZE 32    94 #define PAL_ECDSA_SECP256R1_SIGNATURE_RAW_SIZE 64    95 #define PAL_SECP256R1_MAX_PUB_KEY_RAW_SIZE 65    96 #define PAL_ECDSA_SECP256R1_SIGNATURE_DER_SIZE 74    97 #define PAL_EC_SECP256R1_MAX_PUB_KEY_DER_SIZE 91    98 #define PAL_SECP256R1_RAW_KEY_AGREEMENT_SIZE 32   155 #ifndef MBED_CONF_MBED_CLOUD_CLIENT_PSA_SUPPORT   161 #endif //MBED_CONF_MBED_CLOUD_CLIENT_PSA_SUPPORT   439                             unsigned char* iv, 
size_t ivLen, 
unsigned char* add,
   440                             size_t addLen, 
unsigned char* tag, 
size_t tagLen,
   441                             unsigned char* output);
   459                             size_t inLen, 
unsigned char* iv, 
size_t ivLen,
   460                             unsigned char* add, 
size_t addLen, 
unsigned char* output,
   461                             unsigned char* tag, 
size_t tagLen);
   515 palStatus_t pal_cipherCMAC(
const unsigned char *key, 
size_t keyLenInBits, 
const unsigned char *input, 
size_t inputLenInBytes, 
unsigned char *output);
   559 palStatus_t pal_mdHmacSha256(
const unsigned char *key, 
size_t keyLenInBytes, 
const unsigned char *input, 
size_t inputLenInBytes, 
unsigned char *output, 
size_t* outputLenInBytes);
   660         const unsigned char         *rawSignature,
   661         size_t                       rawSignatureSize,
   662         unsigned char               *derSignatureOut,
   663         size_t                       derSignatureMaxSize,
   664         size_t                      *derSignatureActSizeOut);
   698 #ifndef MBED_CONF_MBED_CLOUD_CLIENT_PSA_SUPPORT   843                                     const unsigned char* value, 
size_t valueLen);
   900     const uint8_t               *derPeerPublicKey,
   901     size_t                       derPeerPublicKeySize,
   903     unsigned char               *rawSharedSecretOut,
   904     size_t                       rawSharedSecretMaxSize,
   905     size_t                      *rawSharedSecretActSizeOut);
   920                                     uint32_t dgstLen, 
unsigned char *sig, 
size_t *sigLen);
   935                                     unsigned char* sig, 
size_t sigLen, 
bool* verified);
   953 #endif //_PAL_CRYPTO_H_ palStatus_t pal_ECKeyFree(palECKeyHandle_t *key)
Release a private or public key context from memory. 
 
Definition: pal_Crypto.h:126
 
Definition: pal_Crypto.h:112
 
palStatus_t pal_x509CertVerify(palX509Handle_t x509Cert, palX509Handle_t x509CertChain)
Verify one or more DER encoded X.509 certificates. 
 
enum palGroupIndex palGroupIndex_t
Supported curves. 
 
enum palMDType palMDType_t
Message digest algorithms supported by PAL. 
 
enum palKeyUsage palKeyUsage_t
Key usage options. 
 
Definition: pal_Crypto.h:82
 
palStatus_t pal_mdUpdate(palMDHandle_t md, const unsigned char *input, size_t inLen)
Apply an Message Digest (MD) process on a buffer. 
 
palStatus_t pal_ECDHComputeKey(const palCurveHandle_t grp, const palECKeyHandle_t peerPublicKey, const palECKeyHandle_t privateKey, palECKeyHandle_t outKey)
Compute the shared secret using elliptic curve Diffie–Hellman. 
 
palStatus_t pal_parseECPrivateKeyFromDER(const unsigned char *prvDERKey, size_t keyLen, palECKeyHandle_t key)
Parse a DER-encoded private key. 
 
palStatus_t pal_mdFree(palMDHandle_t *md)
Free and clear a Message Digest (MD) context. 
 
enum palAesKeyType palAesKeyType_t
Key types to be set to the AES engine. 
 
palAesMode
AES mode for ECB encryption and decryption. 
Definition: pal_Crypto.h:62
 
palStatus_t pal_x509CertParse(palX509Handle_t x509Cert, const unsigned char *input, size_t inLen)
Parse one or more certificates and add them to the chained list. 
 
palStatus_t pal_mdFinal(palMDHandle_t md, unsigned char *output)
Calculate the final Message Digest (MD). 
 
Definition: pal_Crypto.h:121
 
Definition: pal_Crypto.h:144
 
Definition: pal_Crypto.h:52
 
Definition: pal_Crypto.h:87
 
palKeyToCheck
Key check options. 
Definition: pal_Crypto.h:136
 
palStatus_t pal_mdInit(palMDHandle_t *md, palMDType_t mdType)
Initialize the Message Digest (MD) context and set it up according to the given algorithm. 
 
palStatus_t pal_CtrDRBGIsSeeded(palCtrDrbgCtxHandle_t ctx)
Check whether a Counter mode Deterministic Random Byte Generator (CTR-DRBG) context is seeded...
 
Definition: pal_Crypto.h:73
 
Definition: pal_Crypto.h:71
 
uint32_t size
Definition: pal_Crypto.h:159
 
uintptr_t palSignatureHandle_t
Definition: pal_Crypto.h:46
 
palStatus_t pal_aesCTRWithZeroOffset(palAesHandle_t aes, const unsigned char *input, unsigned char *output, size_t inLen, unsigned char iv[16])
Use AES-CTR encryption or decryption with zero offset on a buffer. 
 
Definition: pal_Crypto.h:79
 
#define PAL_CRYPT_BLOCK_SIZE
Definition: pal_Crypto.h:92
 
Definition: pal_Crypto.h:80
 
Definition: pal_Crypto.h:148
 
palStatus_t pal_ECKeyGenerateKey(palGroupIndex_t grpID, palECKeyHandle_t key)
Generate a key pair for a given Elliptic Curve. 
 
palStatus_t pal_ECGroupInitAndLoad(palCurveHandle_t *grp, palGroupIndex_t index)
Initialize and set an ECP group using well-known domain parameters. 
 
Definition: pal_Crypto.h:75
 
palStatus_t pal_CMACStart(palCMACHandle_t *ctx, const unsigned char *key, size_t keyLenBits, palCipherID_t cipherID)
Start an iterative CMAC cipher. 
 
Definition: pal_Crypto.h:127
 
palCipherID
Definition: pal_Crypto.h:105
 
palStatus_t pal_ASN1GetTag(unsigned char **position, const unsigned char *end, size_t *len, uint8_t tag)
Check for a tag in ASN.1 data. 
 
palStatus_t pal_asymmetricSign(const palECKeyHandle_t privateKeyHanlde, palMDType_t mdType, const unsigned char *hash, size_t hashSize, unsigned char *outSignature, size_t maxSignatureSize, size_t *actualOutSignatureSize)
Compute the Elliptic Curve Digital Signature Algorithm (ECDSA) raw signature of a previously hashed m...
 
enum palX509Attr palX509Attr_t
Attributes to be retrieved from the X.509 certificate. 
 
Definition: pal_Crypto.h:145
 
palStatus_t pal_freeKeyHandle(palKeyHandle_t *keyHandle)
frees a a key handle. 
 
palStatus_t pal_x509CSRSetExtendedKeyUsage(palx509CSRHandle_t x509CSR, uint32_t extKeyUsage)
Set the extended key usage flags. 
 
palStatus_t pal_x509CSRSetMD(palx509CSRHandle_t x509CSR, palMDType_t mdType)
 
palStatus_t pal_x509CSRSetSubject(palx509CSRHandle_t x509CSR, const char *subjectName)
Set the subject name for a certificate signing request (CSR). Subject names should contain a comma-se...
 
Definition: pal_Crypto.h:118
 
Definition: pal_Crypto.h:138
 
palStatus_t pal_x509CSRSetExtension(palx509CSRHandle_t x509CSR, const char *oid, size_t oidLen, const unsigned char *value, size_t valueLen)
Generic function to extend a CSR context. 
 
palStatus_t pal_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_x509CertGetHTBS(palX509Handle_t x509Cert, palMDType_t hash_type, unsigned char *output, size_t outLenBytes, size_t *actualOutLenBytes)
Calculate the hash of the part of an X.509 certificate that is to be signed. 
 
Crypto buffer structure. 
Definition: pal_Crypto.h:157
 
Definition: pal_Crypto.h:101
 
palAesKeyType
Key types to be set to the AES engine. 
Definition: pal_Crypto.h:51
 
palStatus_t pal_initAes(palAesHandle_t *aes)
Initialize an AES context. 
 
palStatus_t pal_ECKeyGetCurve(palECKeyHandle_t key, palGroupIndex_t *grpID)
Retrieve the curve ID if it exists in the given key. 
 
enum palASNTag palASNTag_t
The enum tags supported by PAL for ASN.1. 
 
palKeyUsage
Key usage options. 
Definition: pal_Crypto.h:117
 
palStatus_t pal_CCMInit(palCCMHandle_t *ctx)
 
uintptr_t palGroupIDHandle_t
Definition: pal_Crypto.h:44
 
palStatus_t pal_writePrivateKeyToDer(palECKeyHandle_t key, unsigned char *derBuffer, size_t bufferSize, size_t *actualSize)
DER encode a private key from a key handle. 
 
palStatus_t pal_parseECPublicKeyFromHandle(const palKeyHandle_t pubKeyHandle, palECKeyHandle_t ECKeyHandle)
Parse a public key. 
 
palX509Attr
Attributes to be retrieved from the X.509 certificate. 
Definition: pal_Crypto.h:143
 
palStatus_t pal_x509CertCheckExtendedKeyUsage(palX509Handle_t x509Cert, palExtKeyUsage_t usage)
 
Definition: pal_Crypto.h:151
 
uintptr_t palAesHandle_t
Definition: pal_Crypto.h:37
 
Definition: pal_Crypto.h:106
 
struct palCryptoBuffer palCryptoBuffer_t
Crypto buffer structure. 
 
palStatus_t pal_ECCheckKey(palCurveHandle_t grp, palECKeyHandle_t key, uint32_t type, bool *verified)
Check that the private key, public key, or both are valid and that the public key is on the curve...
 
Definition: pal_Crypto.h:131
 
palStatus_t pal_ECGroupFree(palCurveHandle_t *grp)
Free the ECP group context. 
 
Definition: pal_Crypto.h:81
 
Definition: pal_Crypto.h:86
 
Definition: pal_Crypto.h:113
 
Definition: pal_Crypto.h:85
 
palStatus_t pal_CtrDRBGFree(palCtrDrbgCtxHandle_t *ctx)
Destroy a Counter mode Deterministic Random Byte Generator (CTR-DRBG) context. 
 
palStatus_t pal_x509CSRInit(palx509CSRHandle_t *x509CSR)
Allocate and initialize X.509 certificate signing request (CSR) context. 
 
Definition: pal_Crypto.h:77
 
uintptr_t palMDHandle_t
Definition: pal_Crypto.h:39
 
Definition: pal_Crypto.h:139
 
enum palCipherID palCipherID_t
 
palASNTag
The enum tags supported by PAL for ASN.1. 
Definition: pal_Crypto.h:68
 
Definition: pal_Crypto.h:129
 
Definition: pal_Crypto.h:149
 
Definition: pal_Crypto.h:84
 
palStatus_t pal_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_ECDHKeyAgreement(const uint8_t *derPeerPublicKey, size_t derPeerPublicKeySize, const palECKeyHandle_t privateKeyHandle, unsigned char *rawSharedSecretOut, size_t rawSharedSecretMaxSize, size_t *rawSharedSecretActSizeOut)
Compute the raw shared secret using elliptic curve Diffie–Hellman. 
 
palStatus_t pal_x509CSRSetKey(palx509CSRHandle_t x509CSR, palECKeyHandle_t pubKey, palECKeyHandle_t prvKey)
Set the key for a CSR. 
 
Definition: pal_Crypto.h:137
 
enum palFormat palFormat_t
 
Definition: pal_Crypto.h:146
 
uintptr_t palX509Handle_t
Definition: pal_Crypto.h:38
 
palStatus_t pal_x509CertVerifyExtended(palX509Handle_t x509Cert, palX509Handle_t x509CertChain, int32_t *verifyResult)
Verify one or more DER-encoded X.509 certificates. 
 
Definition: pal_Crypto.h:70
 
palStatus_t pal_CtrDRBGInit(palCtrDrbgCtxHandle_t *ctx, const void *seed, size_t len)
Initialize a Counter mode Deterministic Random Byte Generator (CTR-DRBG) context with a given seed...
 
palStatus_t pal_newKeyHandle(palKeyHandle_t *keyHandle, size_t key_size)
Initializes a handle to key according to its size. 
 
palStatus_t pal_x509CSRWriteDER(palx509CSRHandle_t x509CSR, unsigned char *derBuf, size_t derBufLen, size_t *actualDerLen)
Write a CSR to a DER structure. 
 
Definition: pal_Crypto.h:58
 
palFormat
Definition: pal_Crypto.h:100
 
enum palKeyToCheck palKeyToCheck_t
Key check options. 
 
Definition: pal_Crypto.h:64
 
Definition: pal_Crypto.h:63
 
palStatus_t pal_cipherCMAC(const unsigned char *key, size_t keyLenInBits, const unsigned char *input, size_t inputLenInBytes, unsigned char *output)
Apply a one-shot CMAC cipher. 
 
uintptr_t palCMACHandle_t
Definition: pal_Crypto.h:41
 
palStatus_t pal_x509Free(palX509Handle_t *x509Cert)
Deallocate all certificate data. 
 
palStatus_t pal_x509CSRFromCertWriteDER(palX509Handle_t x509Cert, palx509CSRHandle_t x509CSR, unsigned char *derBuf, size_t derBufLen, size_t *actualDerBufLen)
Writes a CSR from a given X.509 Certificate. 
 
Definition: pal_Crypto.h:78
 
Definition: pal_Crypto.h:128
 
Definition: pal_Crypto.h:152
 
palStatus_t pal_writePublicKeyToDer(palECKeyHandle_t key, unsigned char *derBuffer, size_t bufferSize, size_t *actualSize)
DER encode a public key from a key handle. 
 
Definition: pal_Crypto.h:72
 
palStatus_t pal_mdGetOutputSize(palMDHandle_t md, size_t *bufferSize)
Get the length of the Message Digest (MD) output. 
 
Definition: pal_Crypto.h:74
 
palStatus_t pal_CMACUpdate(palCMACHandle_t ctx, const unsigned char *input, size_t inLen)
Update an iterative CMAC cipher. 
 
Definition: pal_Crypto.h:120
 
Definition: pal_Crypto.h:147
 
#define PAL_SHA256_SIZE
Definition: pal_Crypto.h:93
 
uintptr_t palCtrDrbgCtxHandle_t
Definition: pal_Crypto.h:42
 
palStatus_t pal_CCMFree(palCCMHandle_t *ctx)
Destroy a CCM context. 
 
palStatus_t pal_writePublicKeyWithHandle(const palKeyHandle_t pubKeyHandle, palECKeyHandle_t ECKeyHandle)
Write a public key from a key handle. 
 
palStatus_t pal_convertRawSignatureToDer(const unsigned char *rawSignature, size_t rawSignatureSize, unsigned char *derSignatureOut, size_t derSignatureMaxSize, size_t *derSignatureActSizeOut)
Convert ECDSA signature in RAW format to DER format. 
 
palStatus_t pal_sha256(const unsigned char *input, size_t inLen, unsigned char output[PAL_SHA256_SIZE])
Run a SHA-256 operation on the input data. 
 
palStatus_t pal_x509CSRFree(palx509CSRHandle_t *x509CSR)
Free the X.509 CSR context. 
 
palStatus_t pal_CtrDRBGGenerate(palCtrDrbgCtxHandle_t ctx, unsigned char *out, size_t len)
Generate a pseudo random number using the Counter mode Deterministic Random Byte Generator (CTR-DRBG)...
 
palStatus_t pal_CMACFinish(palCMACHandle_t *ctx, unsigned char *output, size_t *outLen)
Finish an iterative CMAC cipher. 
 
Definition: pal_Crypto.h:132
 
Definition: pal_Crypto.h:76
 
uintptr_t palCurveHandle_t
Definition: pal_Crypto.h:43
 
Definition: pal_Crypto.h:69
 
uintptr_t palx509CSRHandle_t
Definition: pal_Crypto.h:47
 
palStatus_t pal_ECDSASign(palCurveHandle_t grp, palMDType_t mdType, palECKeyHandle_t prvKey, unsigned char *dgst, uint32_t dgstLen, unsigned char *sig, size_t *sigLen)
Compute the Elliptic Curve Digital Signature Algorithm (ECDSA) signature of a previously hashed messa...
 
uintptr_t palCCMHandle_t
Definition: pal_Crypto.h:40
 
palStatus_t pal_writePrivateKeyWithHandle(const palKeyHandle_t prvKeyHandle, palECKeyHandle_t ECKeyHandle)
Write a private key from a key handle. 
 
palMDType
Message digest algorithms supported by PAL. 
Definition: pal_Crypto.h:57
 
palStatus_t pal_parseECPublicKeyFromDER(const unsigned char *pubDERKey, size_t keyLen, palECKeyHandle_t key)
Parse a DER-encoded public key. 
 
enum palExtKeyUsage palExtKeyUsage_t
Extended key usage options. 
 
palStatus_t pal_asymmetricVerify(const palECKeyHandle_t publicKeyHanlde, palMDType_t mdType, const unsigned char *hash, size_t hashSize, const unsigned char *signature, size_t signatureSize)
Verify the Elliptic Curve Digital Signature Algorithm (ECDSA) raw signature of a previously hashed me...
 
palStatus_t pal_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_ECKeyNew(palECKeyHandle_t *key)
Allocate a key context and initialize a key pair as an invalid pair. 
 
palStatus_t pal_x509CSRSetKeyUsage(palx509CSRHandle_t x509CSR, uint32_t keyUsage)
Set the key usage extension flags for a CSR context. 
 
palStatus_t pal_aesCTR(palAesHandle_t aes, const unsigned char *input, unsigned char *output, size_t inLen, unsigned char iv[16])
Use AES-CTR encryption or decryption on a buffer. 
 
palStatus_t pal_x509CertGetAttribute(palX509Handle_t x509Cert, palX509Attr_t attr, void *output, size_t outLenBytes, size_t *actualOutLenBytes)
Get an attribute from the parsed certificate. 
 
palStatus_t pal_CCMSetKey(palCCMHandle_t ctx, const unsigned char *key, uint32_t keybits, palCipherID_t id)
Encrypt a CCM context using a set key. 
 
palStatus_t pal_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)
Use authenticated decryption on a CCM buffer . 
 
palExtKeyUsage
Extended key usage options. 
Definition: pal_Crypto.h:125
 
palStatus_t pal_ECDSAVerify(palECKeyHandle_t pubKey, unsigned char *dgst, uint32_t dgstLen, unsigned char *sig, size_t sigLen, bool *verified)
Verify the Elliptic Curve Digital Signature Algorithm (ECDSA) signature of a previously hashed messag...
 
Definition: pal_Crypto.h:83
 
int32_t palStatus_t
Definition: pal_types.h:49
 
palStatus_t pal_freeAes(palAesHandle_t *aes)
Free an AES context. 
 
palStatus_t pal_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)
Encrypt a CCM buffer. 
 
Definition: pal_Crypto.h:119
 
palStatus_t pal_parseECPrivateKeyFromHandle(const palKeyHandle_t prvKeyHandle, palECKeyHandle_t ECKeyHandle)
Parse a private key. 
 
uintptr_t palKeyHandle_t
Definition: pal_Crypto.h:48
 
Definition: pal_Crypto.h:150
 
Definition: pal_Crypto.h:53
 
Definition: pal_Crypto.h:130
 
uint8_t * buffer
Definition: pal_Crypto.h:158
 
palGroupIndex
Supported curves. 
Definition: pal_Crypto.h:111
 
palStatus_t pal_x509Initiate(palX509Handle_t *x509Cert)
Initialize a certificate chain context. 
 
enum palAesMode palAesMode_t
AES mode for ECB encryption and decryption. 
 
palStatus_t pal_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. 
 
uintptr_t palECKeyHandle_t
Definition: pal_Crypto.h:45