| /* Copyright 2017 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| // Ported from ChromeOS EC repository. |
| // https://chromium.googlesource.com/chromiumos/platform/ec/+/\ |
| // 136a80e1138633c2f2ac249c15078b587af9c7ec/include/curve25519.h |
| |
| #ifndef HAMMERD_CURVE25519_H_ |
| #define HAMMERD_CURVE25519_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include <stdint.h> |
| |
| /* Curve25519. |
| * |
| * Curve25519 is an elliptic curve. See https://tools.ietf.org/html/rfc7748. |
| */ |
| |
| /* X25519. |
| * |
| * X25519 is the Diffie-Hellman primitive built from curve25519. It is |
| * sometimes referred to as “curve25519”, but “X25519” is a more precise |
| * name. |
| * See http://cr.yp.to/ecdh.html and https://tools.ietf.org/html/rfc7748. |
| */ |
| |
| #define X25519_PRIVATE_KEY_LEN 32 |
| #define X25519_PUBLIC_VALUE_LEN 32 |
| |
| /** |
| * Generate a public/private key pair. |
| * @param out_public_value generated public key. |
| * @param out_private_value generated private key. |
| */ |
| void X25519_keypair(uint8_t out_public_value[32], uint8_t out_private_key[32]); |
| |
| /** |
| * Diffie-Hellman function. |
| * @param out_shared_key |
| * @param private_key |
| * @param out_public_value |
| * @return one on success and zero on error. |
| * |
| * X25519() writes a shared key to @out_shared_key that is calculated from the |
| * given private key and the peer's public value. |
| * |
| * Don't use the shared key directly, rather use a KDF and also include the two |
| * public values as inputs. |
| */ |
| int X25519(uint8_t out_shared_key[32], |
| const uint8_t private_key[32], |
| const uint8_t peers_public_value[32]); |
| |
| /** |
| * Compute the matching public key. |
| * @param out_public_value computed public key. |
| * @param private_key private key to use. |
| * |
| * X25519_public_from_private() calculates a Diffie-Hellman public value from |
| * the given private key and writes it to @out_public_value. |
| */ |
| void X25519_public_from_private(uint8_t out_public_value[32], |
| const uint8_t private_key[32]); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // HAMMERD_CURVE25519_H_ |