=pod

=head1 NAME

DSA_do_sign, DSA_do_verify - raw DSA signature operations

=head1 SYNOPSIS

 #include <openssl/dsa.h>

 DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa);

 int DSA_do_verify(const unsigned char *dgst, int dgst_len,
	     DSA_SIG *sig, DSA *dsa);

=head1 DESCRIPTION

DSA_do_sign() computes a digital signature on the B<len> byte message
digest B<dgst> using the private key B<dsa> and returns it in a
newly allocated B<DSA_SIG> structure.

L<DSA_sign_setup(3)|DSA_sign_setup(3)> may be used to precompute part
of the signing operation in case signature generation is
time-critical.

DSA_do_verify() verifies that the signature B<sig> matches a given
message digest B<dgst> of size B<len>.  B<dsa> is the signer's public
key.

=head1 RETURN VALUES

DSA_do_sign() returns the signature, NULL on error.  DSA_do_verify()
returns 1 for a valid signature, 0 for an incorrect signature and -1
on error. The error codes can be obtained by
L<ERR_get_error(3)|ERR_get_error(3)>.

=head1 SEE ALSO

L<dsa(3)|dsa(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>,
L<DSA_SIG_new(3)|DSA_SIG_new(3)>,
L<DSA_sign(3)|DSA_sign(3)>

=head1 HISTORY

DSA_do_sign() and DSA_do_verify() were added in OpenSSL 0.9.3.

=cut
