| DSA(3) | DSA(3)
| NAME
| asn1toDSApriv, dsagen, dsasign, dsaverify, dsapuballoc, dsapubfree, dsaprivalloc, dsaprivfree, dsasigalloc, dsasigfree, dsaprivtopub - digital signature algorithm
SYNOPSIS
| `#include <u.h> #include <libc.h> #include <mp.h> #include <libsec.h>
` `DSApriv* dsagen(DSApub *opub)
` `DSAsig* dsasign(DSApriv *k, mpint *m)
` `int dsaverify(DSApub *k, DSAsig *sig, mpint *m)
` `DSApub* dsapuballoc(void)
` `void dsapubfree(DSApub*)
` `DSApriv* dsaprivalloc(void)
` `void dsaprivfree(DSApriv*)
` `DSAsig* dsasigalloc(void)
` `void dsasigfree(DSAsig*)
` `DSApub* dsaprivtopub(DSApriv*)
` `DSApriv* asn1toDSApriv(uchar *priv, int npriv)`
DESCRIPTION
| DSA is the NIST approved digital signature algorithm. The owner of a key publishes the public part of the key:
| `struct DSApub {
| mpint *p; // modulus mpint *q; // group order, q divides p−1 mpint *alpha; // group generator mpint *key; // alpha**secret mod p
};`
This part can be used for verifying signatures (with dsaverify) created by the owner. The owner signs (with dsasign) using his private key:
| `struct DSApriv {
| DSApub pub; mpint *secret; // (decryption key)
};
`
Keys are generated using dsagen. If dsagen’s argument opub is `nil`, a key is created using a new `p` and `q` generated by DSAprimes (see prime(3)). Otherwise, `p` and `q` are copied from the old key.
Dsaprivtopub returns a newly allocated copy of the public key corresponding to the private key.
The routines dsapuballoc, dsapubfree, dsaprivalloc, and dsaprivfree are provided to manage key storage.
Dsasign signs message m using a private key k yielding a
| `struct DSAsig {
| mpint *r, *s;
};`
Dsaverify returns 0 if the signature is valid and –1 if not.
The routines dsasigalloc and dsasigfree are provided to manage signature storage.
Asn1toDSApriv converts an ASN1 formatted DSA private key into the corresponding `DSApriv` structure; see rsa(3) for other ASN1 routines.
SOURCE
| `/build/plan9port/pkg/plan9port/usr/local/plan9port/src/libsec`
SEE ALSO
| mp(3), aes(3), blowfish(3), des(3), rc4(3), rsa(3), sechash(3), prime(3), rand(3)