.\" This file is dual-licensed.  Choose whichever you want.
.\"
.\" The first licence is a regular 2-clause BSD licence.  The second licence
.\" is the CC-0 from Creative Commons. It is intended to release Monocypher
.\" to the public domain.  The BSD licence serves as a fallback option.
.\"
.\" SPDX-License-Identifier: BSD-2-Clause OR CC0-1.0
.\"
.\" ----------------------------------------------------------------------------
.\"
.\" Copyright (c) 2019-2020 Fabio Scotoni
.\" All rights reserved.
.\"
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions are
.\" met:
.\"
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\"
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the
.\"    distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
.\" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
.\" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
.\" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
.\" HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
.\" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" ----------------------------------------------------------------------------
.\"
.\" Written in 2019-2020 by Fabio Scotoni
.\"
.\" To the extent possible under law, the author(s) have dedicated all copyright
.\" and related neighboring rights to this software to the public domain
.\" worldwide.  This software is distributed without any warranty.
.\"
.\" You should have received a copy of the CC0 Public Domain Dedication along
.\" with this software.  If not, see
.\" <https://creativecommons.org/publicdomain/zero/1.0/>
.\"
.Dd May 24, 2020
.Dt CRYPTO_ED25519_SIGN 3MONOCYPHER
.Os
.Sh NAME
.Nm crypto_ed25519_sign ,
.Nm crypto_ed25519_check ,
.Nm crypto_ed25519_public_key
.Nd public key signatures
.Sh SYNOPSIS
.In monocypher-ed25519.h
.Ft void
.Fo crypto_ed25519_public_key
.Fa "uint8_t public_key[32]"
.Fa "const uint8_t secret_key[32]"
.Fc
.Ft void
.Fo crypto_ed25519_sign
.Fa "uint8_t signature[64]"
.Fa "const uint8_t secret_key[32]"
.Fa "const uint8_t public_key[32]"
.Fa "const uint8_t *message"
.Fa "size_t message_size"
.Fc
.Ft int
.Fo crypto_ed25519_check
.Fa "const uint8_t signature[64]"
.Fa "const uint8_t public_key[32]"
.Fa "const uint8_t *message"
.Fa "size_t message_size"
.Fc
.Sh DESCRIPTION
The
.Fn crypto_ed25519_sign
and
.Fn crypto_ed25519_check
functions provide Ed25519 public key signatures and verification
with SHA-512 as the underlying hash function;
they are interoperable with other Ed25519 implementations.
If you have no interoperability requirements, prefer
.Xr crypto_sign 3monocypher .
.Pp
The arguments and security considerations are the same as those
described in
.Xr crypto_sign 3monocypher .
.Pp
An incremental interface is available; see
.Xr crypto_ed25519_sign_init_first_pass 3monocypher .
.Sh RETURN VALUES
.Fn crypto_ed25519_public_key
and
.Fn crypto_ed25519_sign
return nothing.
.Pp
.Fn crypto_ed25519_check
returns 0 for legitimate messages and -1 for forgeries.
.Sh SEE ALSO
.Xr crypto_check 3monocypher ,
.Xr crypto_key_exchange 3monocypher ,
.Xr crypto_lock 3monocypher ,
.Xr crypto_sha512 3monocypher ,
.Xr intro 3monocypher
.Sh STANDARDS
These functions implement Ed25519 as described in RFC 8032.
.Sh HISTORY
The
.Fn crypto_ed25519_sign ,
.Fn crypto_ed25519_check ,
and
.Fn crypto_ed25519_public_key
functions appeared in Monocypher 3.0.0.
They replace recompilation of Monocypher with the
.Dv ED25519_SHA512
preprocessor definition.
