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