linux/include/crypto/ecdh.h
<<
>>
Prefs
   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
  83