shithub: riscv

ref: a291bbdeddfd41a2f0907ecbd7b819f0eedffdaf
dir: /sys/man/2/ec/

View raw version
.TH EC 2
.SH NAME
ecassign,
ecadd,
ecmul,
strtoec,
ecgen,
ecverify,
ecpubverify,
ecdsasign,
ecdsaverify \- elliptic curve cryptography
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.br
.B #include <mp.h>
.br
.B #include <libsec.h>
.PP
.B
void	ecdominit(ECdomain *dom, void (*init)(mpint *p, mpint *a, mpint *b, mpint *x, mpint *y, mpint *n, mpint *h));
.PP
.B
void	ecdomfree(ECdomain *dom);
.PP
.B
void	ecassign(ECdomain *dom, ECpoint *old, ECpoint *new);
.PP
.B
void	ecadd(ECdomain *dom, ECpoint *a, ECpoint *b, ECpoint *s);
.PP
.B
void	ecmul(ECdomain *dom, ECpoint *a, mpint *k, ECpoint *s);
.PP
.B
ECpoint*	strtoec(ECdomain *dom, char *s, char **rptr, ECpoint *p);
.PP
.B
ECpriv*	ecgen(ECdomain *dom, ECpriv *p);
.PP
.B
int	ecverify(ECdomain *dom, ECpoint *p);
.PP
.B
int	ecpubverify(ECdomain *dom, ECpub *p);
.PP
.B
void	ecdsasign(ECdomain *dom, ECpriv *priv, uchar *dig, int dlen, mpint *r, mpint *s);
.PP
.B
int	ecdsaverify(ECdomain *dom, ECpub *pub, uchar *dig, int dlen, mpint *r, mpint *s);
.DT
.SH DESCRIPTION
These functions implement elliptic curve cryptography.
An elliptic curve together with cryptographic parameters are specified using an
.B ECdomain
struct.
Points on the curve are represented by 
.B ECpoint
structs.
.PP
.B ecdominit
initializes a
.B ECdomain
struct and calls the
.B init
function such as
.B secp256r1
which fills in the parameters of the curve.
.PP
.B ecdomfree
frees the parameters of the curve and zeros the struct. It does
not free the memory of the struct itself.
.PP
.BR ecassign ", " ecadd " and " ecmul
are analogous to their counterparts in
.IR mp (2).
.PP
.B strtoec
converts a hex string representing an octet string as specified in
.I Standards for Efficient Cryptography (SEC) 1
to an
.B ECpoint
struct. Both uncompressed and compressed formats are supported.
If 
.B rptr
is not
.BR nil ,
it is used to return the position in the string where the parser stopped.
If
.BR p " is " nil
space is allocated automatically, else the given struct is used.
.PP
.B ecverify
and
.B ecpubverify
verify that the given point or public key, respectively, is valid.
.PP
.B ecgen
generates a keypair and returns a pointer to it.
If
.BR p " is " nil
space is allocated automatically, else the given struct is used.
.PP
.B ecdsasign
and
.B ecdsaverify
create or verify, respectively, a signature using the ECDSA scheme specified in
.I SEC 1.
It is absolutely vital that
.B dig
is a cryptographic hash to the message.
.B ecdsasign
writes the signature to
.BR r " and " s
which are assumed to be allocated properly.
.SH RETURN VALUE
.B *verify
functions return
.B 1
for a positive result.
Functions returning pointers may return
.B nil
in case of error
.I (e.g.
failing
.IR malloc (2)).
.SH SOURCE
.B /sys/src/libsec/port/ecc.c
.SH SEE ALSO
.I
Standards for Efficient Cryptography (SEC) 1: Elliptic Curve Cryptography
- Certicom Research, 2009
.SH HISTORY
This implementation of elliptic curve cryptography first appeared in 9front (June, 2012).