|  | =pod | 
|  |  | 
|  | =head1 NAME | 
|  |  | 
|  | d2i_DSAPublicKey, i2d_DSAPublicKey, d2i_DSAPrivateKey, i2d_DSAPrivateKey, | 
|  | d2i_DSA_PUBKEY, i2d_DSA_PUBKEY, d2i_DSA_SIG, i2d_DSA_SIG - DSA key encoding | 
|  | and parsing functions. | 
|  |  | 
|  | =head1 SYNOPSIS | 
|  |  | 
|  | #include <openssl/dsa.h> | 
|  | #include <openssl/x509.h> | 
|  |  | 
|  | DSA * d2i_DSAPublicKey(DSA **a, const unsigned char **pp, long length); | 
|  |  | 
|  | int i2d_DSAPublicKey(const DSA *a, unsigned char **pp); | 
|  |  | 
|  | DSA * d2i_DSA_PUBKEY(DSA **a, const unsigned char **pp, long length); | 
|  |  | 
|  | int i2d_DSA_PUBKEY(const DSA *a, unsigned char **pp); | 
|  |  | 
|  | DSA * d2i_DSAPrivateKey(DSA **a, const unsigned char **pp, long length); | 
|  |  | 
|  | int i2d_DSAPrivateKey(const DSA *a, unsigned char **pp); | 
|  |  | 
|  | DSA * d2i_DSAparams(DSA **a, const unsigned char **pp, long length); | 
|  |  | 
|  | int i2d_DSAparams(const DSA *a, unsigned char **pp); | 
|  |  | 
|  | DSA * d2i_DSA_SIG(DSA_SIG **a, const unsigned char **pp, long length); | 
|  |  | 
|  | int i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp); | 
|  |  | 
|  | =head1 DESCRIPTION | 
|  |  | 
|  | d2i_DSAPublicKey() and i2d_DSAPublicKey() decode and encode the DSA public key | 
|  | components structure. | 
|  |  | 
|  | d2i_DSA_PUBKEY() and i2d_DSA_PUBKEY() decode and encode an DSA public key using | 
|  | a SubjectPublicKeyInfo (certificate public key) structure. | 
|  |  | 
|  | d2i_DSAPrivateKey(), i2d_DSAPrivateKey() decode and encode the DSA private key | 
|  | components. | 
|  |  | 
|  | d2i_DSAparams(), i2d_DSAparams() decode and encode the DSA parameters using | 
|  | a B<Dss-Parms> structure as defined in RFC2459. | 
|  |  | 
|  | d2i_DSA_SIG(), i2d_DSA_SIG() decode and encode a DSA signature using a | 
|  | B<Dss-Sig-Value> structure as defined in RFC2459. | 
|  |  | 
|  | The usage of all of these functions is similar to the d2i_X509() and | 
|  | i2d_X509() described in the L<d2i_X509(3)|d2i_X509(3)> manual page. | 
|  |  | 
|  | =head1 NOTES | 
|  |  | 
|  | The B<DSA> structure passed to the private key encoding functions should have | 
|  | all the private key components present. | 
|  |  | 
|  | The data encoded by the private key functions is unencrypted and therefore | 
|  | offers no private key security. | 
|  |  | 
|  | The B<DSA_PUBKEY> functions should be used in preference to the B<DSAPublicKey> | 
|  | functions when encoding public keys because they use a standard format. | 
|  |  | 
|  | The B<DSAPublicKey> functions use an non standard format the actual data encoded | 
|  | depends on the value of the B<write_params> field of the B<a> key parameter. | 
|  | If B<write_params> is zero then only the B<pub_key> field is encoded as an | 
|  | B<INTEGER>. If B<write_params> is 1 then a B<SEQUENCE> consisting of the | 
|  | B<p>, B<q>, B<g> and B<pub_key> respectively fields are encoded. | 
|  |  | 
|  | The B<DSAPrivateKey> functions also use a non standard structure consiting | 
|  | consisting of a SEQUENCE containing the B<p>, B<q>, B<g> and B<pub_key> and | 
|  | B<priv_key> fields respectively. | 
|  |  | 
|  | =head1 SEE ALSO | 
|  |  | 
|  | L<d2i_X509(3)|d2i_X509(3)> | 
|  |  | 
|  | =head1 HISTORY | 
|  |  | 
|  | TBA | 
|  |  | 
|  | =cut |