| .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 |
| .IR 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 |
| .IR rsa (3) |
| for other ASN1 routines. |
| .SH SOURCE |
| .B \*9/src/libsec |
| .SH SEE ALSO |
| .IR mp (3), |
| .IR aes (3), |
| .IR blowfish (3), |
| .IR des (3), |
| .IR rc4 (3), |
| .IR rsa (3), |
| .IR sechash (3), |
| .IR prime (3), |
| .IR rand (3) |