core/crypto/ecc_thread_safe_static.h (64 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. #ifndef ECC_THREAD_SAFE_STATIC_H_ #define ECC_THREAD_SAFE_STATIC_H_ #include "crypto/ecc_thread_safe.h" /* Internal functions declared to allow for static initialization. */ int ecc_thread_safe_init_key_pair (const struct ecc_engine *engine, const uint8_t *key, size_t key_length, struct ecc_private_key *priv_key, struct ecc_public_key *pub_key); int ecc_thread_safe_init_public_key (const struct ecc_engine *engine, const uint8_t *key, size_t key_length, struct ecc_public_key *pub_key); int ecc_thread_safe_generate_derived_key_pair (const struct ecc_engine *engine, const uint8_t *priv, size_t key_length, struct ecc_private_key *priv_key, struct ecc_public_key *pub_key); int ecc_thread_safe_generate_key_pair (const struct ecc_engine *engine, size_t key_length, struct ecc_private_key *priv_key, struct ecc_public_key *pub_key); void ecc_thread_safe_release_key_pair (const struct ecc_engine *engine, struct ecc_private_key *priv_key, struct ecc_public_key *pub_key); int ecc_thread_safe_get_signature_max_length (const struct ecc_engine *engine, const struct ecc_private_key *key); int ecc_thread_safe_get_private_key_der (const struct ecc_engine *engine, const struct ecc_private_key *key, uint8_t **der, size_t *length); int ecc_thread_safe_get_public_key_der (const struct ecc_engine *engine, const struct ecc_public_key *key, uint8_t **der, size_t *length); int ecc_thread_safe_sign (const struct ecc_engine *engine, const struct ecc_private_key *key, const uint8_t *digest, size_t length, const struct rng_engine *rng, uint8_t *signature, size_t sig_length); int ecc_thread_safe_verify (const struct ecc_engine *engine, const struct ecc_public_key *key, const uint8_t *digest, size_t length, const uint8_t *signature, size_t sig_length); int ecc_thread_safe_get_shared_secret_max_length (const struct ecc_engine *engine, const struct ecc_private_key *key); int ecc_thread_safe_compute_shared_secret (const struct ecc_engine *engine, const struct ecc_private_key *priv_key, const struct ecc_public_key *pub_key, uint8_t *secret, size_t length); /** * Constant initializer for key generation APIs. */ #ifdef ECC_ENABLE_GENERATE_KEY_PAIR #define ECC_THREAD_SAFE_GENERATE_API \ .generate_derived_key_pair = ecc_thread_safe_generate_derived_key_pair, \ .generate_key_pair = ecc_thread_safe_generate_key_pair, #define ECC_THREAD_SAFE_DER_API \ .get_private_key_der = ecc_thread_safe_get_private_key_der, \ .get_public_key_der = ecc_thread_safe_get_public_key_der, #else #define ECC_THREAD_SAFE_GENERATE_API #define ECC_THREAD_SAFE_DER_API #endif /** * Constant initializer for ECDH APIs. */ #ifdef ECC_ENABLE_ECDH #define ECC_THREAD_SAFE_ECDH_API \ .get_shared_secret_max_length = ecc_thread_safe_get_shared_secret_max_length, \ .compute_shared_secret = ecc_thread_safe_compute_shared_secret, #else #define ECC_THREAD_SAFE_ECDH_API #endif /** * Constant initializer for the ECC API. */ #define ECC_THREAD_SAFE_API_INIT { \ .init_key_pair = ecc_thread_safe_init_key_pair, \ .init_public_key = ecc_thread_safe_init_public_key, \ ECC_THREAD_SAFE_GENERATE_API \ .release_key_pair = ecc_thread_safe_release_key_pair, \ .get_signature_max_length = ecc_thread_safe_get_signature_max_length, \ ECC_THREAD_SAFE_DER_API \ .sign = ecc_thread_safe_sign, \ .verify = ecc_thread_safe_verify, \ ECC_THREAD_SAFE_ECDH_API \ } /** * Initialize a static thread-safe wrapper for an ECC engine. * * There is no validation done on the arguments. * * @param state_ptr Variable context for the thread-safe engine. * @param target_ptr The target engine that will be used to execute operations. */ #define ecc_thread_safe_static_init(state_ptr, target_ptr) { \ .base = ECC_THREAD_SAFE_API_INIT, \ .state = state_ptr, \ .engine = target_ptr, \ } #endif /* ECC_THREAD_SAFE_STATIC_H_ */