1*adf37648SKyle Evans /* SPDX-License-Identifier: GPL-2.0 OR MIT */ 2*adf37648SKyle Evans /* 3*adf37648SKyle Evans * Copyright (C) 2015-2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. 4*adf37648SKyle Evans */ 5*adf37648SKyle Evans 6*adf37648SKyle Evans #ifndef CURVE25519_H 7*adf37648SKyle Evans #define CURVE25519_H 8*adf37648SKyle Evans 9*adf37648SKyle Evans #include <stdint.h> 10*adf37648SKyle Evans #include <sys/types.h> 11*adf37648SKyle Evans 12*adf37648SKyle Evans enum curve25519_lengths { 13*adf37648SKyle Evans CURVE25519_KEY_SIZE = 32 14*adf37648SKyle Evans }; 15*adf37648SKyle Evans 16*adf37648SKyle Evans void curve25519(uint8_t mypublic[static CURVE25519_KEY_SIZE], const uint8_t secret[static CURVE25519_KEY_SIZE], const uint8_t basepoint[static CURVE25519_KEY_SIZE]); 17*adf37648SKyle Evans void curve25519_generate_public(uint8_t pub[static CURVE25519_KEY_SIZE], const uint8_t secret[static CURVE25519_KEY_SIZE]); curve25519_clamp_secret(uint8_t secret[static CURVE25519_KEY_SIZE])18*adf37648SKyle Evansstatic inline void curve25519_clamp_secret(uint8_t secret[static CURVE25519_KEY_SIZE]) 19*adf37648SKyle Evans { 20*adf37648SKyle Evans secret[0] &= 248; 21*adf37648SKyle Evans secret[31] = (secret[31] & 127) | 64; 22*adf37648SKyle Evans } 23*adf37648SKyle Evans 24*adf37648SKyle Evans #endif 25