---
name: "libressl-DSA_sign"
section: "3"
platform: "linux"
package: "libressl"
version: "4.4.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/libressl-DSA_sign"
---

# libressl-DSA\_sign(3)

DSA signatures

## NAME

**DSA\_sign**, **DSA\_sign\_setup**, **DSA\_verify** – DSA signatures

## SYNOPSIS

Crypto Library (libcrypto, -lcrypto)

**#include \<openssl/dsa.h\>**

*int*\

**DSA\_sign**(*int type*, *const unsigned char \*dgst*, *int len*, *unsigned char \*sigret*, *unsigned int \*siglen*, *DSA \*dsa*);

*int*\

**DSA\_sign\_setup**(*DSA \*dsa*, *BN\_CTX \*ctx*, *BIGNUM \*\*kinvp*, *BIGNUM \*\*rp*);

*int*\

**DSA\_verify**(*int type*, *const unsigned char \*dgst*, *int len*, *unsigned char \*sigbuf*, *int siglen*, *DSA \*dsa*);

## DESCRIPTION

**DSA\_sign**() computes a digital signature on the *len* byte message digest *dgst* using the private key *dsa* and places its ASN.1 DER encoding at *sigret*. The length of the signature is placed in \**siglen*. *sigret* must point to **DSA\_size**(*dsa*) bytes of memory.

**DSA\_sign\_setup**() may be used to precompute part of the signing operation in case signature generation is time-critical. It expects *dsa* to contain DSA parameters. It places the precomputed values in newly allocated *BIGNUM*s at \**kinvp* and \**rp*, after freeing the old ones unless *kinvp* and *rp* are NULL. These values may be passed to **DSA\_sign**() in *dsa-\>kinv* and **dsa-\>r**. *ctx* is a pre-allocated *BN\_CTX* or NULL.

**DSA\_verify**() verifies that the signature *sigbuf* of size *siglen* matches a given message digest *dgst* of size *len*. *dsa* is the signer's public key.

The *type* parameter is ignored.

## RETURN VALUES

**DSA\_sign**() and **DSA\_sign\_setup**() return 1 on success or 0 on error. **DSA\_verify**() returns 1 for a valid signature, 0 for an incorrect signature, and -1 on error. The error codes can be obtained by ERR\_get\_error(3).

## SEE ALSO

DSA\_do\_sign(3), DSA\_get0\_key(3), DSA\_new(3)

## STANDARDS

US Federal Information Processing Standard FIPS 186 (Digital Signature Standard, DSS), ANSI X9.30

## HISTORY

**DSA\_sign**() and **DSA\_verify**() first appeared in SSLeay 0.6.0. **DSA\_sign\_setup**() first appeared in SSLeay 0.8.0. All these functions have been available since OpenBSD 2.4.
