84 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * ECDH params to be used with kpp API4 *5 * Copyright (c) 2016, Intel Corporation6 * Authors: Salvatore Benedetto <salvatore.benedetto@intel.com>7 */8#ifndef _CRYPTO_ECDH_9#define _CRYPTO_ECDH_10 11/**12 * DOC: ECDH Helper Functions13 *14 * To use ECDH with the KPP cipher API, the following data structure and15 * functions should be used.16 *17 * The ECC curves known to the ECDH implementation are specified in this18 * header file.19 *20 * To use ECDH with KPP, the following functions should be used to operate on21 * an ECDH private key. The packet private key that can be set with22 * the KPP API function call of crypto_kpp_set_secret.23 */24 25/* Curves IDs */26#define ECC_CURVE_NIST_P192 0x000127#define ECC_CURVE_NIST_P256 0x000228#define ECC_CURVE_NIST_P384 0x000329#define ECC_CURVE_NIST_P521 0x000430 31/**32 * struct ecdh - define an ECDH private key33 *34 * @key: Private ECDH key35 * @key_size: Size of the private ECDH key36 */37struct ecdh {38 char *key;39 unsigned short key_size;40};41 42/**43 * crypto_ecdh_key_len() - Obtain the size of the private ECDH key44 * @params: private ECDH key45 *46 * This function returns the packet ECDH key size. A caller can use that47 * with the provided ECDH private key reference to obtain the required48 * memory size to hold a packet key.49 *50 * Return: size of the key in bytes51 */52unsigned int crypto_ecdh_key_len(const struct ecdh *params);53 54/**55 * crypto_ecdh_encode_key() - encode the private key56 * @buf: Buffer allocated by the caller to hold the packet ECDH57 * private key. The buffer should be at least crypto_ecdh_key_len58 * bytes in size.59 * @len: Length of the packet private key buffer60 * @p: Buffer with the caller-specified private key61 *62 * The ECDH implementations operate on a packet representation of the private63 * key.64 *65 * Return: -EINVAL if buffer has insufficient size, 0 on success66 */67int crypto_ecdh_encode_key(char *buf, unsigned int len, const struct ecdh *p);68 69/**70 * crypto_ecdh_decode_key() - decode a private key71 * @buf: Buffer holding a packet key that should be decoded72 * @len: Length of the packet private key buffer73 * @p: Buffer allocated by the caller that is filled with the74 * unpacked ECDH private key.75 *76 * The unpacking obtains the private key by pointing @p to the correct location77 * in @buf. Thus, both pointers refer to the same memory.78 *79 * Return: -EINVAL if buffer has insufficient size, 0 on success80 */81int crypto_ecdh_decode_key(const char *buf, unsigned int len, struct ecdh *p);82 83#endif84