is.logi.crypto.keys
Class DHKey

java.lang.Object
  |
  +--is.logi.crypto.Crypto
        |
        +--is.logi.crypto.keys.K
              |
              +--is.logi.crypto.keys.DHKey

public class DHKey
extends K
implements Key

This object holds one Diffie-Hellman key. It is not used for encryption or signatures, but only to initialize Difie-Hellman key-exchange objects.

CDS for a Diffie-Hellman key is DHKey(a,g,m,pub) for a public key or DHKey(a,g,m,pri) for a private key. In both cases a,g and m are hexadecimal numbers.

Author:
Logi Ragnarsson (logir@hi.is)
See Also:
DHKeyExNoninter

Fields inherited from class is.logi.crypto.Crypto
BIT, cdsPath, keySource, NIBBLE, primeCertainty, random
 
Constructor Summary
DHKey(java.math.BigInteger a, java.math.BigInteger g, java.math.BigInteger m, boolean pri)
          Create a new Diffie-Hellman key.
DHKey(int n)
          Create a random private DHKey with an n bit modulus.
 
Method Summary
static KeyPair createKeys(int n)
          Create a pair of public/private keys in a group with an n bit modulo.
 boolean equals(java.lang.Object o)
          Return true iff the two keys are equivalent.
 java.lang.String getAlgorithm()
          The name of the algorithm is "Diffie-Hellman".
 java.math.BigInteger getG()
          Return the generator for this key.
static java.math.BigInteger getGenerator(java.math.BigInteger m)
          Return a Generator for a modulus group.
 java.math.BigInteger getKey()
          Return the BigInteger representing this key.
 java.math.BigInteger getM()
          Return the modulus for this key.
static java.math.BigInteger getModulus(int n)
          Return a Diffie-Hellman modulus.
 DHKey getPublic()
          Return the public key from the pair.
 int getSize()
          Return the "size" of the key.
 boolean isPrivate()
          Returns true iff this is a private key.
 boolean matches(Key key)
          Check if a key mathces this.
static DHKey parseCDS(java.lang.String key)
          If "DHKey( key )" is a valid CDS for a DHKey, then DHKey.parseCDS(key) will return the described DHKey object.
 java.lang.String toString()
          Return a CDS for this key.
 
Methods inherited from class is.logi.crypto.keys.K
getFingerprint, hashCode, matchFingerprint
 
Methods inherited from class is.logi.crypto.Crypto
binString, binString, equal, equalRelaxed, equalSub, fromHexNibble, fromHexString, fromString, fromString, hexString, hexString, hexString, hexString, makeClass, makeInt, makeLong, makeSessionKey, pastSpace, pickBits, pickBits, readInt, writeBytes, writeBytes, writeInt
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

DHKey

public DHKey(java.math.BigInteger a,
             java.math.BigInteger g,
             java.math.BigInteger m,
             boolean pri)
Create a new Diffie-Hellman key. An object is created for a in the group modulo m with generator g. It is a private key iff pri is true.

DHKey

public DHKey(int n)
Create a random private DHKey with an n bit modulus.

Pre-calcualted modula exist for bit lengths 256, 512, 1024 and 2048. Using these values saves a lot of time and does not weaken the keys.

Method Detail

parseCDS

public static DHKey parseCDS(java.lang.String key)
                      throws InvalidCDSException
If "DHKey( key )" is a valid CDS for a DHKey, then DHKey.parseCDS(key) will return the described DHKey object.

A valid CDS can be created by calling the DHKey.toString() method.

Throws:
InvalidCDSException - if the CDS is malformed.
See Also:
Crypto.fromString(String)

getModulus

public static java.math.BigInteger getModulus(int n)
Return a Diffie-Hellman modulus.

Return the largest prime p < 2^n such that (p-1)/2 is prime. This takes a long time unless n is one of 256, 512, 1024 or 2048.

The reason for the second constraint on p is to make the Discrete-Logarithm problem harder in the group Zp. In particular it thwarts the Pholig-Hellman algorithm.


getGenerator

public static java.math.BigInteger getGenerator(java.math.BigInteger m)
Return a Generator for a modulus group.

Returns the smallest number g > 1 with gcd(g,m-1)=1.


createKeys

public static KeyPair createKeys(int n)
Create a pair of public/private keys in a group with an n bit modulo.

Pre-calcualted modula exist for bit lengths 256, 512, 1024 and 2048. Using these values saves a lot of time and does not weaken the keys.


getSize

public int getSize()
Return the "size" of the key. This is a (fairly inaccurate) measure of how difficult it is to break and is heavily dependant on the algorithm used.
Specified by:
getSize in interface Key
Overrides:
getSize in class K

getAlgorithm

public java.lang.String getAlgorithm()
The name of the algorithm is "Diffie-Hellman".
Specified by:
getAlgorithm in interface Key

isPrivate

public boolean isPrivate()
Returns true iff this is a private key.
Specified by:
isPrivate in interface Key

getPublic

public DHKey getPublic()
Return the public key from the pair.

getKey

public java.math.BigInteger getKey()
Return the BigInteger representing this key.

getM

public java.math.BigInteger getM()
Return the modulus for this key.

getG

public java.math.BigInteger getG()
Return the generator for this key.

equals

public final boolean equals(java.lang.Object o)
Return true iff the two keys are equivalent.
Overrides:
equals in class java.lang.Object

matches

public boolean matches(Key key)
Check if a key mathces this. This is true if this and key are a matched pair of public/private.
Specified by:
matches in interface Key

toString

public java.lang.String toString()
Return a CDS for this key.
Overrides:
toString in class java.lang.Object


Copyright 1997-1999 Logi Ragnarsson