.TH DSA 3 .SH NAME asn1toDSApriv, dsagen, dsasign, dsaverify, dsapuballoc, dsapubfree, dsaprivalloc, dsaprivfree, dsasigalloc, dsasigfree, dsaprivtopub - digital signature algorithm .SH SYNOPSIS .B #include .br .B #include .br .B #include .br .B #include .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)