Platform Security Architecture — cryptography and keystore interface  Working draft
Classes | Macros | Typedefs | Functions
crypto.h File Reference

Platform Security Architecture cryptography module. More...

#include "crypto_platform.h"
#include <stddef.h>
#include "crypto_sizes.h"
#include "crypto_struct.h"
#include "crypto_extra.h"
Include dependency graph for crypto.h:

Go to the source code of this file.

Classes

struct  psa_generate_key_extra_rsa
 

Macros

#define PSA_SUCCESS   ((psa_status_t)0)
 
#define PSA_ERROR_UNKNOWN_ERROR   ((psa_status_t)1)
 
#define PSA_ERROR_NOT_SUPPORTED   ((psa_status_t)2)
 
#define PSA_ERROR_NOT_PERMITTED   ((psa_status_t)3)
 
#define PSA_ERROR_BUFFER_TOO_SMALL   ((psa_status_t)4)
 
#define PSA_ERROR_OCCUPIED_SLOT   ((psa_status_t)5)
 
#define PSA_ERROR_EMPTY_SLOT   ((psa_status_t)6)
 
#define PSA_ERROR_BAD_STATE   ((psa_status_t)7)
 
#define PSA_ERROR_INVALID_ARGUMENT   ((psa_status_t)8)
 
#define PSA_ERROR_INSUFFICIENT_MEMORY   ((psa_status_t)9)
 
#define PSA_ERROR_INSUFFICIENT_STORAGE   ((psa_status_t)10)
 
#define PSA_ERROR_COMMUNICATION_FAILURE   ((psa_status_t)11)
 
#define PSA_ERROR_STORAGE_FAILURE   ((psa_status_t)12)
 
#define PSA_ERROR_HARDWARE_FAILURE   ((psa_status_t)13)
 
#define PSA_ERROR_TAMPERING_DETECTED   ((psa_status_t)14)
 
#define PSA_ERROR_INSUFFICIENT_ENTROPY   ((psa_status_t)15)
 
#define PSA_ERROR_INVALID_SIGNATURE   ((psa_status_t)16)
 
#define PSA_ERROR_INVALID_PADDING   ((psa_status_t)17)
 
#define PSA_ERROR_INSUFFICIENT_CAPACITY   ((psa_status_t)18)
 
#define PSA_BITS_TO_BYTES(bits)   (((bits) + 7) / 8)
 
#define PSA_BYTES_TO_BITS(bytes)   ((bytes) * 8)
 
#define PSA_KEY_TYPE_NONE   ((psa_key_type_t)0x00000000)
 
#define PSA_KEY_TYPE_VENDOR_FLAG   ((psa_key_type_t)0x80000000)
 
#define PSA_KEY_TYPE_CATEGORY_MASK   ((psa_key_type_t)0x7e000000)
 
#define PSA_KEY_TYPE_RAW_DATA   ((psa_key_type_t)0x02000000)
 
#define PSA_KEY_TYPE_CATEGORY_SYMMETRIC   ((psa_key_type_t)0x04000000)
 
#define PSA_KEY_TYPE_CATEGORY_ASYMMETRIC   ((psa_key_type_t)0x06000000)
 
#define PSA_KEY_TYPE_PAIR_FLAG   ((psa_key_type_t)0x01000000)
 
#define PSA_KEY_TYPE_HMAC   ((psa_key_type_t)0x02000001)
 
#define PSA_KEY_TYPE_DERIVE   ((psa_key_type_t)0x02000101)
 
#define PSA_KEY_TYPE_AES   ((psa_key_type_t)0x04000001)
 
#define PSA_KEY_TYPE_DES   ((psa_key_type_t)0x04000002)
 
#define PSA_KEY_TYPE_CAMELLIA   ((psa_key_type_t)0x04000003)
 
#define PSA_KEY_TYPE_ARC4   ((psa_key_type_t)0x04000004)
 
#define PSA_KEY_TYPE_RSA_PUBLIC_KEY   ((psa_key_type_t)0x06010000)
 
#define PSA_KEY_TYPE_RSA_KEYPAIR   ((psa_key_type_t)0x07010000)
 
#define PSA_KEY_TYPE_DSA_PUBLIC_KEY   ((psa_key_type_t)0x06020000)
 
#define PSA_KEY_TYPE_DSA_KEYPAIR   ((psa_key_type_t)0x07020000)
 
#define PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE   ((psa_key_type_t)0x06030000)
 
#define PSA_KEY_TYPE_ECC_KEYPAIR_BASE   ((psa_key_type_t)0x07030000)
 
#define PSA_KEY_TYPE_ECC_CURVE_MASK   ((psa_key_type_t)0x0000ffff)
 
#define PSA_KEY_TYPE_ECC_KEYPAIR(curve)   (PSA_KEY_TYPE_ECC_KEYPAIR_BASE | (curve))
 
#define PSA_KEY_TYPE_ECC_PUBLIC_KEY(curve)   (PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE | (curve))
 
#define PSA_KEY_TYPE_IS_VENDOR_DEFINED(type)   (((type) & PSA_KEY_TYPE_VENDOR_FLAG) != 0)
 
#define PSA_KEY_TYPE_IS_ASYMMETRIC(type)   (((type) & PSA_KEY_TYPE_CATEGORY_MASK) == PSA_KEY_TYPE_CATEGORY_ASYMMETRIC)
 
#define PSA_KEY_TYPE_IS_PUBLIC_KEY(type)
 
#define PSA_KEY_TYPE_IS_KEYPAIR(type)
 
#define PSA_KEY_TYPE_KEYPAIR_OF_PUBLIC_KEY(type)   ((type) | PSA_KEY_TYPE_PAIR_FLAG)
 
#define PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type)   ((type) & ~PSA_KEY_TYPE_PAIR_FLAG)
 
#define PSA_KEY_TYPE_IS_RSA(type)   (PSA_KEY_TYPE_PUBLIC_KEY_OF_KEYPAIR(type) == PSA_KEY_TYPE_RSA_PUBLIC_KEY)
 
#define PSA_KEY_TYPE_IS_ECC(type)
 
#define PSA_KEY_TYPE_IS_ECC_KEYPAIR(type)
 
#define PSA_KEY_TYPE_IS_ECC_PUBLIC_KEY(type)
 
#define PSA_KEY_TYPE_GET_CURVE(type)
 
#define PSA_ECC_CURVE_SECT163K1   ((psa_ecc_curve_t) 0x0001)
 
#define PSA_ECC_CURVE_SECT163R1   ((psa_ecc_curve_t) 0x0002)
 
#define PSA_ECC_CURVE_SECT163R2   ((psa_ecc_curve_t) 0x0003)
 
#define PSA_ECC_CURVE_SECT193R1   ((psa_ecc_curve_t) 0x0004)
 
#define PSA_ECC_CURVE_SECT193R2   ((psa_ecc_curve_t) 0x0005)
 
#define PSA_ECC_CURVE_SECT233K1   ((psa_ecc_curve_t) 0x0006)
 
#define PSA_ECC_CURVE_SECT233R1   ((psa_ecc_curve_t) 0x0007)
 
#define PSA_ECC_CURVE_SECT239K1   ((psa_ecc_curve_t) 0x0008)
 
#define PSA_ECC_CURVE_SECT283K1   ((psa_ecc_curve_t) 0x0009)
 
#define PSA_ECC_CURVE_SECT283R1   ((psa_ecc_curve_t) 0x000a)
 
#define PSA_ECC_CURVE_SECT409K1   ((psa_ecc_curve_t) 0x000b)
 
#define PSA_ECC_CURVE_SECT409R1   ((psa_ecc_curve_t) 0x000c)
 
#define PSA_ECC_CURVE_SECT571K1   ((psa_ecc_curve_t) 0x000d)
 
#define PSA_ECC_CURVE_SECT571R1   ((psa_ecc_curve_t) 0x000e)
 
#define PSA_ECC_CURVE_SECP160K1   ((psa_ecc_curve_t) 0x000f)
 
#define PSA_ECC_CURVE_SECP160R1   ((psa_ecc_curve_t) 0x0010)
 
#define PSA_ECC_CURVE_SECP160R2   ((psa_ecc_curve_t) 0x0011)
 
#define PSA_ECC_CURVE_SECP192K1   ((psa_ecc_curve_t) 0x0012)
 
#define PSA_ECC_CURVE_SECP192R1   ((psa_ecc_curve_t) 0x0013)
 
#define PSA_ECC_CURVE_SECP224K1   ((psa_ecc_curve_t) 0x0014)
 
#define PSA_ECC_CURVE_SECP224R1   ((psa_ecc_curve_t) 0x0015)
 
#define PSA_ECC_CURVE_SECP256K1   ((psa_ecc_curve_t) 0x0016)
 
#define PSA_ECC_CURVE_SECP256R1   ((psa_ecc_curve_t) 0x0017)
 
#define PSA_ECC_CURVE_SECP384R1   ((psa_ecc_curve_t) 0x0018)
 
#define PSA_ECC_CURVE_SECP521R1   ((psa_ecc_curve_t) 0x0019)
 
#define PSA_ECC_CURVE_BRAINPOOL_P256R1   ((psa_ecc_curve_t) 0x001a)
 
#define PSA_ECC_CURVE_BRAINPOOL_P384R1   ((psa_ecc_curve_t) 0x001b)
 
#define PSA_ECC_CURVE_BRAINPOOL_P512R1   ((psa_ecc_curve_t) 0x001c)
 
#define PSA_ECC_CURVE_CURVE25519   ((psa_ecc_curve_t) 0x001d)
 
#define PSA_ECC_CURVE_CURVE448   ((psa_ecc_curve_t) 0x001e)
 
#define PSA_ECC_CURVE_FFDHE_2048   ((psa_ecc_curve_t) 0x0100)
 
#define PSA_ECC_CURVE_FFDHE_3072   ((psa_ecc_curve_t) 0x0101)
 
#define PSA_ECC_CURVE_FFDHE_4096   ((psa_ecc_curve_t) 0x0102)
 
#define PSA_ECC_CURVE_FFDHE_6144   ((psa_ecc_curve_t) 0x0103)
 
#define PSA_ECC_CURVE_FFDHE_8192   ((psa_ecc_curve_t) 0x0104)
 
#define PSA_BLOCK_CIPHER_BLOCK_SIZE(type)
 
#define PSA_ALG_VENDOR_FLAG   ((psa_algorithm_t)0x80000000)
 
#define PSA_ALG_CATEGORY_MASK   ((psa_algorithm_t)0x7f000000)
 
#define PSA_ALG_CATEGORY_HASH   ((psa_algorithm_t)0x01000000)
 
#define PSA_ALG_CATEGORY_MAC   ((psa_algorithm_t)0x02000000)
 
#define PSA_ALG_CATEGORY_CIPHER   ((psa_algorithm_t)0x04000000)
 
#define PSA_ALG_CATEGORY_AEAD   ((psa_algorithm_t)0x06000000)
 
#define PSA_ALG_CATEGORY_SIGN   ((psa_algorithm_t)0x10000000)
 
#define PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION   ((psa_algorithm_t)0x12000000)
 
#define PSA_ALG_CATEGORY_KEY_AGREEMENT   ((psa_algorithm_t)0x22000000)
 
#define PSA_ALG_CATEGORY_KEY_DERIVATION   ((psa_algorithm_t)0x30000000)
 
#define PSA_ALG_IS_VENDOR_DEFINED(alg)   (((alg) & PSA_ALG_VENDOR_FLAG) != 0)
 
#define PSA_ALG_IS_HASH(alg)   (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_HASH)
 
#define PSA_ALG_IS_MAC(alg)   (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_MAC)
 
#define PSA_ALG_IS_CIPHER(alg)   (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_CIPHER)
 
#define PSA_ALG_IS_AEAD(alg)   (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_AEAD)
 
#define PSA_ALG_IS_SIGN(alg)   (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_SIGN)
 
#define PSA_ALG_IS_ASYMMETRIC_ENCRYPTION(alg)   (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION)
 
#define PSA_ALG_IS_KEY_AGREEMENT(alg)   (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_AGREEMENT)
 
#define PSA_ALG_IS_KEY_DERIVATION(alg)   (((alg) & PSA_ALG_CATEGORY_MASK) == PSA_ALG_CATEGORY_KEY_DERIVATION)
 
#define PSA_ALG_HASH_MASK   ((psa_algorithm_t)0x000000ff)
 
#define PSA_ALG_MD2   ((psa_algorithm_t)0x01000001)
 
#define PSA_ALG_MD4   ((psa_algorithm_t)0x01000002)
 
#define PSA_ALG_MD5   ((psa_algorithm_t)0x01000003)
 
#define PSA_ALG_RIPEMD160   ((psa_algorithm_t)0x01000004)
 
#define PSA_ALG_SHA_1   ((psa_algorithm_t)0x01000005)
 
#define PSA_ALG_SHA_224   ((psa_algorithm_t)0x01000008)
 
#define PSA_ALG_SHA_256   ((psa_algorithm_t)0x01000009)
 
#define PSA_ALG_SHA_384   ((psa_algorithm_t)0x0100000a)
 
#define PSA_ALG_SHA_512   ((psa_algorithm_t)0x0100000b)
 
#define PSA_ALG_SHA_512_224   ((psa_algorithm_t)0x0100000c)
 
#define PSA_ALG_SHA_512_256   ((psa_algorithm_t)0x0100000d)
 
#define PSA_ALG_SHA3_224   ((psa_algorithm_t)0x01000010)
 
#define PSA_ALG_SHA3_256   ((psa_algorithm_t)0x01000011)
 
#define PSA_ALG_SHA3_384   ((psa_algorithm_t)0x01000012)
 
#define PSA_ALG_SHA3_512   ((psa_algorithm_t)0x01000013)
 
#define PSA_ALG_MAC_SUBCATEGORY_MASK   ((psa_algorithm_t)0x00c00000)
 
#define PSA_ALG_HMAC_BASE   ((psa_algorithm_t)0x02800000)
 
#define PSA_ALG_HMAC(hash_alg)   (PSA_ALG_HMAC_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
 
#define PSA_ALG_HMAC_HASH(hmac_alg)   (PSA_ALG_CATEGORY_HASH | ((hmac_alg) & PSA_ALG_HASH_MASK))
 
#define PSA_ALG_IS_HMAC(alg)
 
#define PSA_ALG_CIPHER_MAC_BASE   ((psa_algorithm_t)0x02c00000)
 
#define PSA_ALG_CBC_MAC   ((psa_algorithm_t)0x02c00001)
 
#define PSA_ALG_CMAC   ((psa_algorithm_t)0x02c00002)
 
#define PSA_ALG_GMAC   ((psa_algorithm_t)0x02c00003)
 
#define PSA_ALG_IS_CIPHER_MAC(alg)
 
#define PSA_ALG_CIPHER_SUBCATEGORY_MASK   ((psa_algorithm_t)0x00c00000)
 
#define PSA_ALG_BLOCK_CIPHER_BASE   ((psa_algorithm_t)0x04000000)
 
#define PSA_ALG_BLOCK_CIPHER_MODE_MASK   ((psa_algorithm_t)0x000000ff)
 
#define PSA_ALG_BLOCK_CIPHER_PADDING_MASK   ((psa_algorithm_t)0x003f0000)
 
#define PSA_ALG_BLOCK_CIPHER_PAD_NONE   ((psa_algorithm_t)0x00000000)
 
#define PSA_ALG_BLOCK_CIPHER_PAD_PKCS7   ((psa_algorithm_t)0x00010000)
 
#define PSA_ALG_IS_BLOCK_CIPHER(alg)
 
#define PSA_ALG_CBC_BASE   ((psa_algorithm_t)0x04000001)
 
#define PSA_ALG_CFB_BASE   ((psa_algorithm_t)0x04000002)
 
#define PSA_ALG_OFB_BASE   ((psa_algorithm_t)0x04000003)
 
#define PSA_ALG_XTS_BASE   ((psa_algorithm_t)0x04000004)
 
#define PSA_ALG_STREAM_CIPHER_BASE   ((psa_algorithm_t)0x04800000)
 
#define PSA_ALG_CTR   ((psa_algorithm_t)0x04800001)
 
#define PSA_ALG_ARC4   ((psa_algorithm_t)0x04800002)
 
#define PSA_ALG_IS_STREAM_CIPHER(alg)
 
#define PSA_ALG_CCM   ((psa_algorithm_t)0x06000001)
 
#define PSA_ALG_GCM   ((psa_algorithm_t)0x06000002)
 
#define PSA_ALG_RSA_PKCS1V15_SIGN_BASE   ((psa_algorithm_t)0x10020000)
 
#define PSA_ALG_RSA_PKCS1V15_SIGN(hash_alg)   (PSA_ALG_RSA_PKCS1V15_SIGN_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
 
#define PSA_ALG_RSA_PKCS1V15_SIGN_RAW   PSA_ALG_RSA_PKCS1V15_SIGN_BASE
 
#define PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg)   (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PKCS1V15_SIGN_BASE)
 
#define PSA_ALG_RSA_PSS_BASE   ((psa_algorithm_t)0x10030000)
 
#define PSA_ALG_RSA_PSS(hash_alg)   (PSA_ALG_RSA_PSS_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
 
#define PSA_ALG_IS_RSA_PSS(alg)   (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_PSS_BASE)
 
#define PSA_ALG_DSA_BASE   ((psa_algorithm_t)0x10040000)
 
#define PSA_ALG_DSA(hash_alg)   (PSA_ALG_DSA_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
 
#define PSA_ALG_DETERMINISTIC_DSA_BASE   ((psa_algorithm_t)0x10050000)
 
#define PSA_ALG_DSA_DETERMINISTIC_FLAG   ((psa_algorithm_t)0x00010000)
 
#define PSA_ALG_DETERMINISTIC_DSA(hash_alg)   (PSA_ALG_DETERMINISTIC_DSA_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
 
#define PSA_ALG_IS_DSA(alg)
 
#define PSA_ALG_DSA_IS_DETERMINISTIC(alg)   (((alg) & PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)
 
#define PSA_ALG_IS_DETERMINISTIC_DSA(alg)   (PSA_ALG_IS_DSA(alg) && PSA_ALG_DSA_IS_DETERMINISTIC(alg))
 
#define PSA_ALG_IS_RANDOMIZED_DSA(alg)   (PSA_ALG_IS_DSA(alg) && !PSA_ALG_DSA_IS_DETERMINISTIC(alg))
 
#define PSA_ALG_ECDSA_BASE   ((psa_algorithm_t)0x10060000)
 
#define PSA_ALG_ECDSA(hash_alg)   (PSA_ALG_ECDSA_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
 
#define PSA_ALG_ECDSA_ANY   PSA_ALG_ECDSA_BASE
 
#define PSA_ALG_DETERMINISTIC_ECDSA_BASE   ((psa_algorithm_t)0x10070000)
 
#define PSA_ALG_DETERMINISTIC_ECDSA(hash_alg)   (PSA_ALG_DETERMINISTIC_ECDSA_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
 
#define PSA_ALG_IS_ECDSA(alg)
 
#define PSA_ALG_ECDSA_IS_DETERMINISTIC(alg)   (((alg) & PSA_ALG_DSA_DETERMINISTIC_FLAG) != 0)
 
#define PSA_ALG_IS_DETERMINISTIC_ECDSA(alg)   (PSA_ALG_IS_ECDSA(alg) && PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))
 
#define PSA_ALG_IS_RANDOMIZED_ECDSA(alg)   (PSA_ALG_IS_ECDSA(alg) && !PSA_ALG_ECDSA_IS_DETERMINISTIC(alg))
 
#define PSA_ALG_SIGN_GET_HASH(alg)
 
#define PSA_ALG_RSA_PKCS1V15_CRYPT   ((psa_algorithm_t)0x12020000)
 
#define PSA_ALG_RSA_OAEP_BASE   ((psa_algorithm_t)0x12030000)
 
#define PSA_ALG_RSA_OAEP(hash_alg)   (PSA_ALG_RSA_OAEP_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
 
#define PSA_ALG_IS_RSA_OAEP(alg)   (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_RSA_OAEP_BASE)
 
#define PSA_ALG_RSA_OAEP_GET_HASH(alg)
 
#define PSA_ALG_HKDF_BASE   ((psa_algorithm_t)0x30000100)
 
#define PSA_ALG_HKDF(hash_alg)   (PSA_ALG_HKDF_BASE | ((hash_alg) & PSA_ALG_HASH_MASK))
 
#define PSA_ALG_IS_HKDF(alg)   (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_HKDF_BASE)
 
#define PSA_ALG_HKDF_GET_HASH(hkdf_alg)   (PSA_ALG_CATEGORY_HASH | ((hkdf_alg) & PSA_ALG_HASH_MASK))
 
#define PSA_KEY_USAGE_EXPORT   ((psa_key_usage_t)0x00000001)
 
#define PSA_KEY_USAGE_ENCRYPT   ((psa_key_usage_t)0x00000100)
 
#define PSA_KEY_USAGE_DECRYPT   ((psa_key_usage_t)0x00000200)
 
#define PSA_KEY_USAGE_SIGN   ((psa_key_usage_t)0x00000400)
 
#define PSA_KEY_USAGE_VERIFY   ((psa_key_usage_t)0x00000800)
 
#define PSA_KEY_USAGE_DERIVE   ((psa_key_usage_t)0x00001000)
 
#define PSA_KEY_LIFETIME_VOLATILE   ((psa_key_lifetime_t)0x00000000)
 
#define PSA_KEY_LIFETIME_PERSISTENT   ((psa_key_lifetime_t)0x00000001)
 
#define PSA_KEY_LIFETIME_WRITE_ONCE   ((psa_key_lifetime_t)0x7fffffff)
 
#define PSA_HASH_SIZE(alg)
 
#define PSA_AEAD_TAG_SIZE(alg)
 
#define PSA_ECDSA_SIGNATURE_SIZE(curve_bits)   (PSA_BITS_TO_BYTES(curve_bits) * 2)
 ECDSA signature size for a given curve bit size. More...
 
#define PSA_RSA_MINIMUM_PADDING_SIZE(alg)
 
#define PSA_CRYPTO_GENERATOR_INIT   {0}
 

Typedefs

typedef _unsigned_integral_type_ psa_key_slot_t
 Key slot number. More...
 
typedef int32_t psa_status_t
 Function return status. More...
 
typedef uint32_t psa_key_type_t
 Encoding of a key type.
 
typedef uint16_t psa_ecc_curve_t
 
typedef uint32_t psa_algorithm_t
 Encoding of a cryptographic algorithm. More...
 
typedef uint32_t psa_key_usage_t
 Encoding of permitted usage on a key.
 
typedef struct psa_key_policy_s psa_key_policy_t
 
typedef uint32_t psa_key_lifetime_t
 
typedef struct psa_hash_operation_s psa_hash_operation_t
 
typedef struct psa_mac_operation_s psa_mac_operation_t
 
typedef struct psa_cipher_operation_s psa_cipher_operation_t
 
typedef struct psa_crypto_generator_s psa_crypto_generator_t
 

Functions

psa_status_t psa_crypto_init (void)
 Library initialization. More...
 
psa_status_t psa_import_key (psa_key_slot_t key, psa_key_type_t type, const uint8_t *data, size_t data_length)
 Import a key in binary format. More...
 
psa_status_t psa_destroy_key (psa_key_slot_t key)
 Destroy a key and restore the slot to its default state. More...
 
psa_status_t psa_get_key_information (psa_key_slot_t key, psa_key_type_t *type, size_t *bits)
 Get basic metadata about a key. More...
 
psa_status_t psa_export_key (psa_key_slot_t key, uint8_t *data, size_t data_size, size_t *data_length)
 Export a key in binary format. More...
 
psa_status_t psa_export_public_key (psa_key_slot_t key, uint8_t *data, size_t data_size, size_t *data_length)
 Export a public key or the public part of a key pair in binary format. More...
 
void psa_key_policy_init (psa_key_policy_t *policy)
 Initialize a key policy structure to a default that forbids all usage of the key. More...
 
void psa_key_policy_set_usage (psa_key_policy_t *policy, psa_key_usage_t usage, psa_algorithm_t alg)
 Set the standard fields of a policy structure. More...
 
psa_key_usage_t psa_key_policy_get_usage (const psa_key_policy_t *policy)
 Retrieve the usage field of a policy structure. More...
 
psa_algorithm_t psa_key_policy_get_algorithm (const psa_key_policy_t *policy)
 Retrieve the algorithm field of a policy structure. More...
 
psa_status_t psa_set_key_policy (psa_key_slot_t key, const psa_key_policy_t *policy)
 Set the usage policy on a key slot. More...
 
psa_status_t psa_get_key_policy (psa_key_slot_t key, psa_key_policy_t *policy)
 Get the usage policy for a key slot. More...
 
psa_status_t psa_get_key_lifetime (psa_key_slot_t key, psa_key_lifetime_t *lifetime)
 Retrieve the lifetime of a key slot. More...
 
psa_status_t psa_set_key_lifetime (psa_key_slot_t key, psa_key_lifetime_t lifetime)
 Change the lifetime of a key slot. More...
 
psa_status_t psa_hash_setup (psa_hash_operation_t *operation, psa_algorithm_t alg)
 
psa_status_t psa_hash_update (psa_hash_operation_t *operation, const uint8_t *input, size_t input_length)
 
psa_status_t psa_hash_finish (psa_hash_operation_t *operation, uint8_t *hash, size_t hash_size, size_t *hash_length)
 
psa_status_t psa_hash_verify (psa_hash_operation_t *operation, const uint8_t *hash, size_t hash_length)
 
psa_status_t psa_hash_abort (psa_hash_operation_t *operation)
 
psa_status_t psa_mac_sign_setup (psa_mac_operation_t *operation, psa_key_slot_t key, psa_algorithm_t alg)
 
psa_status_t psa_mac_verify_setup (psa_mac_operation_t *operation, psa_key_slot_t key, psa_algorithm_t alg)
 
psa_status_t psa_mac_update (psa_mac_operation_t *operation, const uint8_t *input, size_t input_length)
 
psa_status_t psa_mac_sign_finish (psa_mac_operation_t *operation, uint8_t *mac, size_t mac_size, size_t *mac_length)
 
psa_status_t psa_mac_verify_finish (psa_mac_operation_t *operation, const uint8_t *mac, size_t mac_length)
 
psa_status_t psa_mac_abort (psa_mac_operation_t *operation)
 
psa_status_t psa_cipher_encrypt_setup (psa_cipher_operation_t *operation, psa_key_slot_t key, psa_algorithm_t alg)
 
psa_status_t psa_cipher_decrypt_setup (psa_cipher_operation_t *operation, psa_key_slot_t key, psa_algorithm_t alg)
 
psa_status_t psa_cipher_generate_iv (psa_cipher_operation_t *operation, unsigned char *iv, size_t iv_size, size_t *iv_length)
 
psa_status_t psa_cipher_set_iv (psa_cipher_operation_t *operation, const unsigned char *iv, size_t iv_length)
 
psa_status_t psa_cipher_update (psa_cipher_operation_t *operation, const uint8_t *input, size_t input_length, unsigned char *output, size_t output_size, size_t *output_length)
 
psa_status_t psa_cipher_finish (psa_cipher_operation_t *operation, uint8_t *output, size_t output_size, size_t *output_length)
 
psa_status_t psa_cipher_abort (psa_cipher_operation_t *operation)
 
psa_status_t psa_aead_encrypt (psa_key_slot_t key, psa_algorithm_t alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *plaintext, size_t plaintext_length, uint8_t *ciphertext, size_t ciphertext_size, size_t *ciphertext_length)
 
psa_status_t psa_aead_decrypt (psa_key_slot_t key, psa_algorithm_t alg, const uint8_t *nonce, size_t nonce_length, const uint8_t *additional_data, size_t additional_data_length, const uint8_t *ciphertext, size_t ciphertext_length, uint8_t *plaintext, size_t plaintext_size, size_t *plaintext_length)
 
psa_status_t psa_asymmetric_sign (psa_key_slot_t key, psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, uint8_t *signature, size_t signature_size, size_t *signature_length)
 Sign a hash or short message with a private key. More...
 
psa_status_t psa_asymmetric_verify (psa_key_slot_t key, psa_algorithm_t alg, const uint8_t *hash, size_t hash_length, const uint8_t *signature, size_t signature_length)
 Verify the signature a hash or short message using a public key. More...
 
psa_status_t psa_asymmetric_encrypt (psa_key_slot_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)
 Encrypt a short message with a public key. More...
 
psa_status_t psa_asymmetric_decrypt (psa_key_slot_t key, psa_algorithm_t alg, const uint8_t *input, size_t input_length, const uint8_t *salt, size_t salt_length, uint8_t *output, size_t output_size, size_t *output_length)
 Decrypt a short message with a private key. More...
 
psa_status_t psa_get_generator_capacity (const psa_crypto_generator_t *generator, size_t *capacity)
 
psa_status_t psa_generator_read (psa_crypto_generator_t *generator, uint8_t *output, size_t output_length)
 
psa_status_t psa_generator_import_key (psa_key_slot_t key, psa_key_type_t type, size_t bits, psa_crypto_generator_t *generator)
 
psa_status_t psa_generator_abort (psa_crypto_generator_t *generator)
 
psa_status_t psa_key_derivation (psa_crypto_generator_t *generator, psa_key_slot_t key, psa_algorithm_t alg, const uint8_t *salt, size_t salt_length, const uint8_t *label, size_t label_length, size_t capacity)
 
psa_status_t psa_generate_random (uint8_t *output, size_t output_size)
 Generate random bytes. More...
 
psa_status_t psa_generate_key (psa_key_slot_t key, psa_key_type_t type, size_t bits, const void *extra, size_t extra_size)
 Generate a key or key pair. More...
 

Detailed Description

Platform Security Architecture cryptography module.