ecdh.h 2.4 KB

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