groff 1.23.0 added .MR to its -man macro package. The NEWS file states
that the inclusion of the macro "was prompted by its introduction to
Plan 9 from User Space's troff in August 2020." From d32deab it seems
that the name for Plan 9 from User Space's implementation was suggested
by groff maintainer G. Brandon Robinson.
Not sure if the intention was to make these definitions compatible, but
it would be nice if they were.
Currently, Plan 9 from User Space's .MR expects its second argument to
be parenthesized. groff's .MR does not. This results in extra
parentheses appearing in manual references when viewing Plan 9 from User
Space's manual pages on a system using groff.
145 lines
2.2 KiB
Groff
145 lines
2.2 KiB
Groff
.TH DSA 3
|
|
.SH NAME
|
|
asn1toDSApriv, dsagen, dsasign, dsaverify, dsapuballoc, dsapubfree, dsaprivalloc, dsaprivfree, dsasigalloc, dsasigfree, dsaprivtopub - digital signature algorithm
|
|
.SH SYNOPSIS
|
|
.B #include <u.h>
|
|
.br
|
|
.B #include <libc.h>
|
|
.br
|
|
.B #include <mp.h>
|
|
.br
|
|
.B #include <libsec.h>
|
|
.PP
|
|
.B
|
|
DSApriv* dsagen(DSApub *opub)
|
|
.PP
|
|
.B
|
|
DSAsig* dsasign(DSApriv *k, mpint *m)
|
|
.PP
|
|
.B
|
|
int dsaverify(DSApub *k, DSAsig *sig, mpint *m)
|
|
.PP
|
|
.B
|
|
DSApub* dsapuballoc(void)
|
|
.PP
|
|
.B
|
|
void dsapubfree(DSApub*)
|
|
.PP
|
|
.B
|
|
DSApriv* dsaprivalloc(void)
|
|
.PP
|
|
.B
|
|
void dsaprivfree(DSApriv*)
|
|
.PP
|
|
.B
|
|
DSAsig* dsasigalloc(void)
|
|
.PP
|
|
.B
|
|
void dsasigfree(DSAsig*)
|
|
.PP
|
|
.B
|
|
DSApub* dsaprivtopub(DSApriv*)
|
|
.PP
|
|
.B
|
|
DSApriv* asn1toDSApriv(uchar *priv, int npriv)
|
|
.SH DESCRIPTION
|
|
.PP
|
|
DSA is the NIST approved digital signature algorithm. The owner of a key publishes
|
|
the public part of the key:
|
|
.EX
|
|
struct DSApub
|
|
{
|
|
mpint *p; // modulus
|
|
mpint *q; // group order, q divides p-1
|
|
mpint *alpha; // group generator
|
|
mpint *key; // alpha**secret mod p
|
|
};
|
|
.EE
|
|
This part can be used for verifying signatures (with
|
|
.IR dsaverify )
|
|
created by the owner.
|
|
The owner signs (with
|
|
.IR dsasign )
|
|
using his private key:
|
|
.EX
|
|
struct DSApriv
|
|
{
|
|
DSApub pub;
|
|
mpint *secret; // (decryption key)
|
|
};
|
|
.EE
|
|
.PP
|
|
Keys are generated using
|
|
.IR dsagen .
|
|
If
|
|
.IR dsagen 's
|
|
argument
|
|
.I opub
|
|
is
|
|
.BR nil ,
|
|
a key is created using a new
|
|
.B p
|
|
and
|
|
.B q
|
|
generated by
|
|
.IR DSAprimes
|
|
(see
|
|
.MR prime 3 ).
|
|
Otherwise,
|
|
.B p
|
|
and
|
|
.B q
|
|
are copied from the old key.
|
|
.PP
|
|
.I Dsaprivtopub
|
|
returns a newly allocated copy of the public key
|
|
corresponding to the private key.
|
|
.PP
|
|
The routines
|
|
.IR dsapuballoc ,
|
|
.IR dsapubfree ,
|
|
.IR dsaprivalloc ,
|
|
and
|
|
.I dsaprivfree
|
|
are provided to manage key storage.
|
|
.PP
|
|
.I Dsasign
|
|
signs message
|
|
.I m
|
|
using a private key
|
|
.I k
|
|
yielding a
|
|
.EX
|
|
struct DSAsig
|
|
{
|
|
mpint *r, *s;
|
|
};
|
|
.EE
|
|
.I Dsaverify
|
|
returns 0 if the signature is valid and \-1 if not.
|
|
.PP
|
|
The routines
|
|
.I dsasigalloc
|
|
and
|
|
.I dsasigfree
|
|
are provided to manage signature storage.
|
|
.PP
|
|
.I Asn1toDSApriv
|
|
converts an ASN1 formatted DSA private key into the corresponding
|
|
.B DSApriv
|
|
structure; see
|
|
.MR rsa 3
|
|
for other ASN1 routines.
|
|
.SH SOURCE
|
|
.B \*9/src/libsec
|
|
.SH SEE ALSO
|
|
.MR mp 3 ,
|
|
.MR aes 3 ,
|
|
.MR blowfish 3 ,
|
|
.MR des 3 ,
|
|
.MR rc4 3 ,
|
|
.MR rsa 3 ,
|
|
.MR sechash 3 ,
|
|
.MR prime 3 ,
|
|
.MR rand 3
|