cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ecdh.h (2487B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * ECDH params to be used with kpp API
      4 *
      5 * Copyright (c) 2016, Intel Corporation
      6 * Authors: Salvatore Benedetto <salvatore.benedetto@intel.com>
      7 */
      8#ifndef _CRYPTO_ECDH_
      9#define _CRYPTO_ECDH_
     10
     11/**
     12 * DOC: ECDH Helper Functions
     13 *
     14 * To use ECDH with the KPP cipher API, the following data structure and
     15 * functions should be used.
     16 *
     17 * The ECC curves known to the ECDH implementation are specified in this
     18 * header file.
     19 *
     20 * To use ECDH with KPP, the following functions should be used to operate on
     21 * an ECDH private key. The packet private key that can be set with
     22 * the KPP API function call of crypto_kpp_set_secret.
     23 */
     24
     25/* Curves IDs */
     26#define ECC_CURVE_NIST_P192	0x0001
     27#define ECC_CURVE_NIST_P256	0x0002
     28#define ECC_CURVE_NIST_P384	0x0003
     29
     30/**
     31 * struct ecdh - define an ECDH private key
     32 *
     33 * @key:	Private ECDH key
     34 * @key_size:	Size of the private ECDH key
     35 */
     36struct ecdh {
     37	char *key;
     38	unsigned short key_size;
     39};
     40
     41/**
     42 * crypto_ecdh_key_len() - Obtain the size of the private ECDH key
     43 * @params:	private ECDH key
     44 *
     45 * This function returns the packet ECDH key size. A caller can use that
     46 * with the provided ECDH private key reference to obtain the required
     47 * memory size to hold a packet key.
     48 *
     49 * Return: size of the key in bytes
     50 */
     51unsigned int crypto_ecdh_key_len(const struct ecdh *params);
     52
     53/**
     54 * crypto_ecdh_encode_key() - encode the private key
     55 * @buf:	Buffer allocated by the caller to hold the packet ECDH
     56 *		private key. The buffer should be at least crypto_ecdh_key_len
     57 *		bytes in size.
     58 * @len:	Length of the packet private key buffer
     59 * @p:		Buffer with the caller-specified private key
     60 *
     61 * The ECDH implementations operate on a packet representation of the private
     62 * key.
     63 *
     64 * Return:	-EINVAL if buffer has insufficient size, 0 on success
     65 */
     66int crypto_ecdh_encode_key(char *buf, unsigned int len, const struct ecdh *p);
     67
     68/**
     69 * crypto_ecdh_decode_key() - decode a private key
     70 * @buf:	Buffer holding a packet key that should be decoded
     71 * @len:	Length of the packet private key buffer
     72 * @p:		Buffer allocated by the caller that is filled with the
     73 *		unpacked ECDH private key.
     74 *
     75 * The unpacking obtains the private key by pointing @p to the correct location
     76 * in @buf. Thus, both pointers refer to the same memory.
     77 *
     78 * Return:	-EINVAL if buffer has insufficient size, 0 on success
     79 */
     80int crypto_ecdh_decode_key(const char *buf, unsigned int len, struct ecdh *p);
     81
     82#endif