Files
doylet 17026faf02 Update ed25519 session pro key naming convention to privkey
This is more accurate as we are returning just the 64 byte libsodium
style private key, not the public and private key std::pair (32, 64b)
respectively which is what other functions use the `keypair`
nomenclamenture to denote.
2025-10-28 16:36:51 +11:00

118 lines
4.2 KiB
C

#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include <stddef.h>
#include "export.h"
/// API: crypto/session_ed25519_key_pair
///
/// Generates a random ed25519 key pair.
///
/// Inputs:
/// - `ed25519_pk_out` -- [out] pointer to a buffer of 32 bytes where the public key will be
/// written.
/// - `ed25519_sk_out` -- [out] pointer to a buffer of 64 bytes where the private key will be
/// written.
///
/// Outputs:
/// - `bool` -- True if the seed was successfully retrieved, false if failed.
LIBSESSION_EXPORT bool session_ed25519_key_pair(
unsigned char* ed25519_pk_out, /* 32 byte output buffer */
unsigned char* ed25519_sk_out /* 64 byte output buffer */);
/// API: crypto/session_ed25519_key_pair_seed
///
/// Generates a ed25519 key pair for a 32 byte seed.
///
/// Inputs:
/// - `ed25519_seed` -- [in] the 32 byte seed.
/// - `ed25519_pk_out` -- [out] pointer to a buffer of 32 bytes where the public key will be
/// written.
/// - `ed25519_sk_out` -- [out] pointer to a buffer of 64 bytes where the private key will be
/// written.
///
/// Outputs:
/// - `bool` -- True if the seed was successfully retrieved, false if failed.
LIBSESSION_EXPORT bool session_ed25519_key_pair_seed(
const unsigned char* ed25519_seed, /* 32 bytes */
unsigned char* ed25519_pk_out, /* 32 byte output buffer */
unsigned char* ed25519_sk_out /* 64 byte output buffer */);
/// API: crypto/session_seed_for_ed_privkey
///
/// Returns the seed for an ed25519 key pair given either the libsodium-style secret key, 64
/// bytes.
///
/// Inputs:
/// - `ed25519_privkey` -- [in] the libsodium-style secret key of the sender, 64 bytes.
/// - `ed25519_seed_out` -- [out] pointer to a buffer of 32 bytes where the seed will be written.
///
/// Outputs:
/// - `bool` -- True if the seed was successfully retrieved, false if failed.
LIBSESSION_EXPORT bool session_seed_for_ed_privkey(
const unsigned char* ed25519_privkey, /* 64 bytes */
unsigned char* ed25519_seed_out /* 32 byte output buffer */);
/// API: crypto/session_ed25519_sign
///
/// Generates a signature for the message using the libsodium-style ed25519 secret key, 64 bytes.
///
/// Inputs:
/// - `ed25519_privkey` -- [in] the libsodium-style secret key of the sender, 64 bytes.
/// - `msg` -- [in] the data to generate a signature for.
/// - `msg_len` -- [in] the length of the `msg` data.
/// - `ed25519_sig_out` -- [out] pointer to a buffer of 64 bytes where the signature will be
/// written.
///
/// Outputs:
/// - `bool` -- True if the seed was successfully retrieved, false if failed.
LIBSESSION_EXPORT bool session_ed25519_sign(
const unsigned char* ed25519_privkey, /* 64 bytes */
const unsigned char* msg,
size_t msg_len,
unsigned char* ed25519_sig_out /* 64 byte output buffer */);
/// API: crypto/session_ed25519_verify
///
/// Verify a message and signature for a given pubkey.
///
/// Inputs:
/// - `sig` -- [in] the signature to verify, 64 bytes.
/// - `pubkey` -- [in] the pubkey for the secret key that was used to generate the signature, 32
/// bytes.
/// - `msg` -- [in] the data to verify the signature for.
/// - `msg_len` -- [in] the length of the `msg` data.
///
/// Outputs:
/// - A flag indicating whether the signature is valid
LIBSESSION_EXPORT bool session_ed25519_verify(
const unsigned char* sig, /* 64 bytes */
const unsigned char* pubkey,
const unsigned char* msg,
size_t msg_len);
/// API: crypto/session_ed25519_pro_privkey_for_ed25519_seed
///
/// Generate the deterministic Master Session Pro key for signing requests to interact with the
/// Session Pro features of the protocol.
///
/// Inputs:
/// - `ed25519_seed` -- [in] the seed to the long-term key for the Session account to derive the
/// deterministic key from.
/// - `ed25519_sk_out` -- [out] pointer to a buffer of 64 bytes where the private key will be
/// written.
///
/// Outputs:
/// - `bool` -- True if the key pair was successfully derived, false if failed.
LIBSESSION_EXPORT bool session_ed25519_pro_privkey_for_ed25519_seed(
const unsigned char* ed25519_seed, /* 32 bytes */
unsigned char* ed25519_sk_out /*64 byte output buffer*/);
#ifdef __cplusplus
}
#endif