brintos

brintos / linux-shallow public Read only

0
0
Text · 2.5 KiB · 9784ecd Raw
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