# phpman > man > Crypt::DSA::KeyChain(3pm)

## NAME
    [Crypt::DSA::KeyChain](https://www.chedong.com/phpMan.php/perldoc/Crypt%3A%3ADSA%3A%3AKeyChain/markdown) - DSA key generation system

## SYNOPSIS
        use [Crypt::DSA::KeyChain](https://www.chedong.com/phpMan.php/perldoc/Crypt%3A%3ADSA%3A%3AKeyChain/markdown);
        my $keychain = [Crypt::DSA::KeyChain](https://www.chedong.com/phpMan.php/perldoc/Crypt%3A%3ADSA%3A%3AKeyChain/markdown)->new;

        my $key = $keychain->generate_params(
                        Size      => 512,
                        Seed      => $seed,
                        Verbosity => 1,
                  );

        $keychain->generate_keys($key);

## DESCRIPTION
    *[Crypt::DSA::KeyChain](https://www.chedong.com/phpMan.php/perldoc/Crypt%3A%3ADSA%3A%3AKeyChain/markdown)* is a lower-level interface to key generation than the interface in
    *[Crypt::DSA](https://www.chedong.com/phpMan.php/perldoc/Crypt%3A%3ADSA/markdown)* (the *keygen* method). It allows you to separately generate the *p*, *q*, and *g*
    key parameters, given an optional starting seed, and a mandatory bit size for *p* (*q* and *g*
    are 160 bits each).

    You can then call *generate_keys* to generate the public and private portions of the key.

## USAGE
  $keychain = [Crypt::DSA::KeyChain](https://www.chedong.com/phpMan.php/perldoc/Crypt%3A%3ADSA%3A%3AKeyChain/markdown)->new
    Constructs a new *[Crypt::DSA::KeyChain](https://www.chedong.com/phpMan.php/perldoc/Crypt%3A%3ADSA%3A%3AKeyChain/markdown)* object. At the moment this isn't particularly useful in
    itself, other than being the object you need in order to call the other methods.

    Returns the new object.

  $key = $keychain->generate_params(%arg)
    Generates a set of DSA parameters: the *p*, *q*, and *g* values of the key. This involves
    finding primes, and as such it can be a relatively long process.

    When invoked in scalar context, returns a new *[Crypt::DSA::Key](https://www.chedong.com/phpMan.php/perldoc/Crypt%3A%3ADSA%3A%3AKey/markdown)* object.

    In list context, returns the new *[Crypt::DSA::Key](https://www.chedong.com/phpMan.php/perldoc/Crypt%3A%3ADSA%3A%3AKey/markdown)* object, along with: the value of the internal
    counter when a suitable prime *p* was found; the value of *h* when *g* was derived; and the
    value of the seed (a 20-byte string) when *q* was found. These values aren't particularly useful
    in normal circumstances, but they could be useful.

    *%arg* can contain:

    *   Size

        The size in bits of the *p* value to generate. The *q* and *g* values are always 160 bits
        each.

        This argument is mandatory.

    *   Seed

        A seed with which *q* generation will begin. If this seed does not lead to a suitable prime,
        it will be discarded, and a new random seed chosen in its place, until a suitable prime can
        be found.

        This is entirely optional, and if not provided a random seed will be generated
        automatically.

    *   Verbosity

        Should be either 0 or 1. A value of 1 will give you a progress meter during *p* and *q*
        generation--this can be useful, since the process can be relatively long.

        The default is 0.

  $keychain->generate_keys($key)
    Generates the public and private portions of the key *$key*, a *[Crypt::DSA::Key](https://www.chedong.com/phpMan.php/perldoc/Crypt%3A%3ADSA%3A%3AKey/markdown)* object.

AUTHOR & COPYRIGHT
    Please see the [Crypt::DSA](https://www.chedong.com/phpMan.php/perldoc/Crypt%3A%3ADSA/markdown) manpage for author, copyright, and license information.

