---
name: "libressl-DSA_generate_parameters_ex"
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_generate_parameters_ex"
---

# libressl-DSA\_generate\_parameters\_ex(3)

generate DSA parameters

## NAME

**DSA\_generate\_parameters\_ex** – generate DSA parameters

## SYNOPSIS

Crypto Library (libcrypto, -lcrypto)

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

*int*\

**DSA\_generate\_parameters\_ex**(*DSA \*dsa*, *int bits*, *const unsigned char \*seed*, *int seed\_len*, *int \*counter\_ret*, *unsigned long \*h\_ret*, *BN\_GENCB \*cb*);

## DESCRIPTION

**DSA\_generate\_parameters\_ex**() generates primes p and q and a generator g for use in the DSA and stores the result in *dsa*.

*bits* is the length of the prime to be generated; the DSS allows a maximum of 1024 bits.

If *seed* is NULL or *seed\_len* \< 20, the primes will be generated at random. Otherwise, the seed is used to generate them. If the given seed does not yield a prime q, a new random seed is chosen and placed at *seed*.

**DSA\_generate\_parameters\_ex**() places the iteration count in \**counter\_ret* and a counter used for finding a generator in \**h\_ret*, unless these are NULL.

A callback function may be used to provide feedback about the progress of the key generation. If *cb* is not NULL, it will be called as shown below. For information on the *BN\_GENCB* structure, refer to BN\_GENCB\_call(3).

- When a candidate for q is generated, **BN\_GENCB\_call**(*cb*, *0*, *m++*) is called (*m* is 0 for the first candidate).

- When a candidate for q has passed a test by trial division, **BN\_GENCB\_call**(*cb*, *1*, *-1*) is called. While a candidate for q is tested by Miller-Rabin primality tests, **BN\_GENCB\_call**(*cb*, *1*, *i*) is called in the outer loop (once for each witness that confirms that the candidate may be prime); *i* is the loop counter (starting at 0).

- When a prime q has been found, **BN\_GENCB\_call**(*cb*, *2*, *0*) and **BN\_GENCB\_call**(*cb*, *3*, *0*) are called.

- Before a candidate for p (other than the first) is generated and tested, **BN\_GENCB\_call**(*cb*, *0*, *counter*) is called.

- When a candidate for p has passed the test by trial division, **BN\_GENCB\_call**(*cb*, *1*, *-1*) is called. While it is tested by the Miller-Rabin primality test, **BN\_GENCB\_call**(*cb*, *1*, *i*) is called in the outer loop (once for each witness that confirms that the candidate may be prime). *i* is the loop counter (starting at 0).

- When p has been found, **BN\_GENCB\_call**(*cb*, *2*, *1*) is called.

- When the generator has been found, **BN\_GENCB\_call**(*cb*, *3*, *1*) is called.

## RETURN VALUES

**DSA\_generate\_parameters\_ex**() returns a 1 on success, or 0 otherwise.

The error codes can be obtained by ERR\_get\_error(3).

## SEE ALSO

BN\_generate\_prime(3), DSA\_get0\_pqg(3), DSA\_new(3)

## HISTORY

**DSA\_generate\_parameters\_ex**() first appeared in OpenSSL 0.9.8 and has been available since OpenBSD 4.5.

## BUGS

Seed lengths \> 20 are not supported.
