For the latest news and information visit The GNU Crypto project

## gnu.crypto.sig.dss
Class DSSSignature

    java.lang.Object
      |
      +--gnu.crypto.sig.BaseSignature
            |
            +--gnu.crypto.sig.dss.DSSSignature

All Implemented Interfaces:
  java.lang.Cloneable, ISignature

public class DSSSignature
extends BaseSignature

The DSS (Digital Signature Standard) algorithm makes use of the following parameters:

1. p: A prime modulus, where `2L-1 < p < 2L` for `512 <= L <= 1024` and `L` a multiple of `64`.
2. q: A prime divisor of `p - 1`, where `2159 < q < 2160`.
3. g: Where `g = h(p-1)/q mod p`, where `h` is any integer with `1 < h < p - 1` such that `h (p-1)/q mod p > 1` (`g` has order `q mod p`).
4. x: A randomly or pseudorandomly generated integer with `0 < x < q`.
5. y: `y = gx mod p`.
6. k: A randomly or pseudorandomly generated integer with `0 < k < q`.

The integers `p`, `q`, and `g` can be public and can be common to a group of users. A user's private and public keys are `x` and `y`, respectively. They are normally fixed for a period of time. Parameters `x` and `k` are used for signature generation only, and must be kept secret. Parameter `k` must be regenerated for each signature.

The signature of a message `M` is the pair of numbers `r` and `s` computed according to the equations below:

- `r = (gk mod p) mod q` and
- `s = (k-1(SHA(M) + xr)) mod q`.

In the above, `k-1` is the multiplicative inverse of `k`, `mod q`; i.e., `(k-1 k) mod q = 1` and `0 < k-1 < q`. The value of `SHA(M)` is a 160-bit string output by the Secure Hash Algorithm specified in FIPS 180. For use in computing `s`, this string must be converted to an integer.

As an option, one may wish to check if `r == 0` or `s == 0` . If either `r == 0` or `s == 0`, a new value of `k` should be generated and the signature should be recalculated (it is extremely unlikely that `r == 0` or `s == 0` if signatures are generated properly).

The signature is transmitted along with the message to the verifier.

References:

1. Digital Signature Standard (DSS), Federal Information Processing Standards Publication 186. National Institute of Standards and Technology.

Field Summary

Fields inherited from class gnu.crypto.sig.BaseSignature
`md, privateKey, publicKey, schemeName`

Fields inherited from interface gnu.crypto.sig.ISignature
`SIGNER_KEY, SOURCE_OF_RANDOMNESS, VERIFIER_KEY`

Constructor Summary
`DSSSignature()` Trivial 0-arguments constructor.

Method Summary
`java.lang.Object` `clone()` Returns a clone copy of this instance.
`protected java.lang.Object` `generateSignature()`
`protected void` `setupForSigning(java.security.PrivateKey k)`
`protected void` `setupForVerification(java.security.PublicKey k)`
`static java.math.BigInteger[]` `sign(java.security.interfaces.DSAPrivateKey k, byte[] h)`
`static java.math.BigInteger[]` `sign(java.security.interfaces.DSAPrivateKey k, byte[] h, IRandom irnd)`
`static java.math.BigInteger[]` `sign(java.security.interfaces.DSAPrivateKey k, byte[] h, java.util.Random rnd)`
`static boolean` `verify(java.security.interfaces.DSAPublicKey k, byte[] h, java.math.BigInteger[] rs)`
`protected boolean` `verifySignature(java.lang.Object sig)`

Methods inherited from class gnu.crypto.sig.BaseSignature
`init, name, nextRandomBytes, setupSign, setupVerify, sign, update, update, verify`

Methods inherited from class java.lang.Object
`equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### DSSSignature

    public DSSSignature()

  Trivial 0-arguments constructor.

Method Detail

### sign

    public static final java.math.BigInteger[] sign(java.security.interfaces.DSAPrivateKey k,
                                                    byte[] h)

### sign

    public static final java.math.BigInteger[] sign(java.security.interfaces.DSAPrivateKey k,
                                                    byte[] h,
                                                    java.util.Random rnd)

### sign

    public static final java.math.BigInteger[] sign(java.security.interfaces.DSAPrivateKey k,
                                                    byte[] h,
                                                    IRandom irnd)

### verify

    public static final boolean verify(java.security.interfaces.DSAPublicKey k,
                                       byte[] h,
                                       java.math.BigInteger[] rs)

### clone

    public java.lang.Object clone()

  Description copied from interface: `ISignature`

  Returns a clone copy of this instance.

  Specified by:
    `clone` in interface `ISignature`
  Specified by:
    `clone` in class `BaseSignature`
  Returns:
    a clone copy of this instance.

### setupForVerification

    protected void setupForVerification(java.security.PublicKey k)
                                 throws java.lang.IllegalArgumentException

  Specified by:
    `setupForVerification` in class `BaseSignature`
    `java.lang.IllegalArgumentException`

### setupForSigning

    protected void setupForSigning(java.security.PrivateKey k)
                            throws java.lang.IllegalArgumentException

  Specified by:
    `setupForSigning` in class `BaseSignature`
    `java.lang.IllegalArgumentException`

### generateSignature

    protected java.lang.Object generateSignature()
                                          throws java.lang.IllegalStateException

  Specified by:
    `generateSignature` in class `BaseSignature`
    `java.lang.IllegalStateException`

### verifySignature

    protected boolean verifySignature(java.lang.Object sig)
                               throws java.lang.IllegalStateException

  Specified by:
    `verifySignature` in class `BaseSignature`
    `java.lang.IllegalStateException`

For the latest news and information visit The GNU Crypto project

Copyright © 2001, 2002, 2003, 2004 Free Software Foundation, Inc.