blob: 5d7b25d75add6f8c5ef7f5616b66aca6b9457242 [file]
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright (c) 2013, Kenneth MacKay
* All rights reserved.
*
*/
#include <stdbool.h>
#include <stdint.h>
/* Create a public key from a private key.
*
* Inputs:
* private_key - Your private key.
*
* Outputs:
* public_key - Will be filled in with the public key.
*
* Returns true if the public key was generated successfully, false
* if an error occurred. The keys are with the LSB first.
*/
bool ecc_make_public_key(const uint8_t private_key[32], uint8_t public_key[64]);
/* Create a public/private key pair.
*
* Outputs:
* public_key - Will be filled in with the public key.
* private_key - Will be filled in with the private key.
*
* Returns true if the key pair was generated successfully, false
* if an error occurred. The keys are with the LSB first.
*/
bool ecc_make_key(uint8_t public_key[64], uint8_t private_key[32]);
/* Check to see if a public key is valid.
*
* Inputs:
* public_key - The public key to check.
*
* Returns true if the public key is valid, false if it is invalid.
*/
bool ecc_valid_public_key(const uint8_t public_key[64]);
/* Compute a shared secret given your secret key and someone else's
* public key.
* Note: It is recommended that you hash the result of ecdh_shared_secret
* before using it for symmetric encryption or HMAC.
*
* Inputs:
* public_key - The public key of the remote party.
* private_key - Your private key.
*
* Outputs:
* secret - Will be filled in with the shared secret value.
*
* Returns true if the shared secret was generated successfully, false
* if an error occurred. Both input and output parameters are with the
* LSB first.
*/
bool ecdh_shared_secret(const uint8_t public_key[64],
const uint8_t private_key[32],
uint8_t secret[32]);