48#ifndef DETERMINISTICESPASYNCWEBSERVER_SSH_ECDSA_H
49#define DETERMINISTICESPASYNCWEBSERVER_SSH_ECDSA_H
55static constexpr size_t SSH_ECDSA_P256_PRIV_LEN = 32;
57static constexpr size_t SSH_ECDSA_P256_COORD_LEN = 32;
59static constexpr size_t SSH_ECDSA_P256_PUB_LEN = 65;
61static constexpr size_t SSH_ECDSA_P256_SIG_LEN = 64;
70bool ssh_ecdsa_p256_pubkey(uint8_t pub[SSH_ECDSA_P256_PUB_LEN],
const uint8_t priv[SSH_ECDSA_P256_PRIV_LEN]);
84bool ssh_ecdsa_p256_sign(uint8_t sig[SSH_ECDSA_P256_SIG_LEN],
const uint8_t *msg,
size_t mlen,
85 const uint8_t priv[SSH_ECDSA_P256_PRIV_LEN]);
97 const uint8_t sig[SSH_ECDSA_P256_SIG_LEN]);
111bool ssh_ecdsa_p256_ecdh(uint8_t shared_x[SSH_ECDSA_P256_COORD_LEN],
const uint8_t peer_pub[SSH_ECDSA_P256_PUB_LEN],
112 const uint8_t priv[SSH_ECDSA_P256_PRIV_LEN]);
bool ssh_ecdsa_p256_verify(const uint8_t pub[SSH_ECDSA_P256_PUB_LEN], const uint8_t *msg, size_t mlen, const uint8_t sig[SSH_ECDSA_P256_SIG_LEN])
Verify a P-256 ECDSA signature (SHA-256) against an uncompressed public point.
bool ssh_ecdsa_p256_ecdh(uint8_t shared_x[SSH_ECDSA_P256_COORD_LEN], const uint8_t peer_pub[SSH_ECDSA_P256_PUB_LEN], const uint8_t priv[SSH_ECDSA_P256_PRIV_LEN])
P-256 ECDH: the shared-secret X coordinate of d * Q_peer (RFC 5656 §4 / RFC 5903).
bool ssh_ecdsa_p256_sign(uint8_t sig[SSH_ECDSA_P256_SIG_LEN], const uint8_t *msg, size_t mlen, const uint8_t priv[SSH_ECDSA_P256_PRIV_LEN])
Sign mlen bytes of msg with a P-256 private key (ECDSA, SHA-256).
bool ssh_ecdsa_p256_pubkey(uint8_t pub[SSH_ECDSA_P256_PUB_LEN], const uint8_t priv[SSH_ECDSA_P256_PRIV_LEN])
Derive the uncompressed public point Q = d*G from a P-256 private scalar.