Hacl_Curve25519_64.h (2772B)
1 /* MIT License 2 * 3 * Copyright (c) 2016-2022 INRIA, CMU and Microsoft Corporation 4 * Copyright (c) 2022-2023 HACL* Contributors 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 * copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in all 14 * copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 * SOFTWARE. 23 */ 24 25 #ifndef __Hacl_Curve25519_64_H 26 #define __Hacl_Curve25519_64_H 27 28 #if defined(__cplusplus) 29 extern "C" { 30 #endif 31 32 #include <string.h> 33 #include "krml/internal/types.h" 34 #include "krml/lowstar_endianness.h" 35 #include "krml/internal/target.h" 36 37 #include "Hacl_Krmllib.h" 38 39 /** 40 Compute the scalar multiple of a point. 41 42 @param out Pointer to 32 bytes of memory, allocated by the caller, where the resulting point is written to. 43 @param priv Pointer to 32 bytes of memory where the secret/private key is read from. 44 @param pub Pointer to 32 bytes of memory where the public point is read from. 45 */ 46 void Hacl_Curve25519_64_scalarmult(uint8_t *out, uint8_t *priv, uint8_t *pub); 47 48 /** 49 Calculate a public point from a secret/private key. 50 51 This computes a scalar multiplication of the secret/private key with the curve's basepoint. 52 53 @param pub Pointer to 32 bytes of memory, allocated by the caller, where the resulting point is written to. 54 @param priv Pointer to 32 bytes of memory where the secret/private key is read from. 55 */ 56 void Hacl_Curve25519_64_secret_to_public(uint8_t *pub, uint8_t *priv); 57 58 /** 59 Execute the diffie-hellmann key exchange. 60 61 @param out Pointer to 32 bytes of memory, allocated by the caller, where the resulting point is written to. 62 @param priv Pointer to 32 bytes of memory where **our** secret/private key is read from. 63 @param pub Pointer to 32 bytes of memory where **their** public point is read from. 64 */ 65 bool Hacl_Curve25519_64_ecdh(uint8_t *out, uint8_t *priv, uint8_t *pub); 66 67 #if defined(__cplusplus) 68 } 69 #endif 70 71 #define __Hacl_Curve25519_64_H_DEFINED 72 #endif