|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--iaik.pkcs.pkcs8.PrivateKeyInfo | +--iaik.security.dh.DHPrivateKey
This class implements a Diffie Hellman private key and supports ASN.1 encoding.
This class extends iaik.pkcs.pkcs8.PrivateKeyInfo
for supporting the
PKCS#8 Private Key Information Standard for DH private keys. This class implements
the javax.crypto.interfaces.DHPrivateKey
interface for providing the
functionality of a private key used for the DH key-exchange algorithm.
The Diffie Hellman algorithm constitutes a key-exchange (or key-agreement) algorithm where some entities communicate according to a predescribed protocol for generating a shared secret only known by them.
The Diffie Hellman algorithm has been the first public-key algorithm. It only can be used for key-agreement, but not for data encrypting and decrypting.
PKCS#3 describes a
method for implementing the Diffie Hellman key agreement where two entities use
general Diffie Hellman parameters (an odd prime p
, an integer base
g
satisfying 0 < g < p
, and optionally
an integer l
prescribing the length of the private value), generated
from some central authority (which may be an entity itself), to perform two phases
of the key agreement protocol:
x
satisfying
0 < x < p-1
. If the central authority has prescribed
the length l
of the private value x
, it has to fulfill
2(l-1) <= x < 2l
. From the private value, the
public value y
is created by doing y = (gx)(mod p)
with 0 < y < p
. Subsequently each entity sends the public
value just created to the other entity involved in the key agreement.
y'
received from the other entity to
finally create the shared secret z
from the own private value x:
z = (y'x)(mod p) with 0 < z < p
.
There may be more than only two entities involved into a Diffie Hellman key agreement.
Any application wishing to be participated into a Diffie Hellman key agreement has to
instantiate the javax.crypto.KeyAgreement
class and initialize it with
its DHPrivateKey for bringing in the required private information. A DH
Hellman private key maybe generated using a proper key pair generator, e.g.:
KeyPairGnerator dh_key_gen = KeyPairGenerator.getInstance("DH"); dh_key_gen.initialize(1024); KeyPair dh_key_pair = dh_key_gen.generateKeyPair(); DHPrivateKey dh_priv_key = (DHPrivateKey)dh_key_pair.getPrivate(); KeyAgreement dh_key_agreement = KeyAgreement.getInstance("DH"); dh_key_agreement.init(dh_priv_key);
Each phase of a key agreement is performed by a call to the doPhase
method, supplied with some other entity´s public key or some intermediate key
resulting from the last phase. When calling doPhase
, it has to be
specified whether to perform already the last phase of the key agreement or not
by setting the lastPhase
parameter to true
or false
:
dh_key_agreement.doPhase(dhPubKey_from_other_entity, true);Actually generating the shared secret is done by calling the
generateSecret
method:
byte[] shared_secret = dh_key_agreemant.generateSecret();
PrivateKeyInfo
,
DHPrivateKey
,
KeyAgreement
,
DHGenParameterSpec
,
DHParameterSpec
,
DHPrivateKeySpec
,
DHPublicKeySpec
,
KeyPairGenerator
,
KeyPair
,
DHPublicKey
,
DHKeyPairGenerator
,
DHKeyFactory
,
DHParameters
,
DHParameterGenerator
,
DHKeyAgreement
, Serialized FormFields inherited from class iaik.pkcs.pkcs8.PrivateKeyInfo |
private_key_algorithm |
Fields inherited from interface java.security.PrivateKey |
serialVersionUID |
Constructor Summary | |
DHPrivateKey(ASN1Object obj)
Creates a new DHPrivateKey from the given ASN.1 object. |
|
DHPrivateKey(BigInteger x,
DHParameterSpec parameters)
Creates a new DHPrivateKey from given private key value x and DH parameter specification |
|
DHPrivateKey(byte[] pk)
Creates a new DHPrivateKey from the given DER encoded byte array. |
|
DHPrivateKey(DHPrivateKeySpec keySpec)
Creates a new DHPrivateKey from the given DHPrivateKeySpec representing the DH private key value x, and the public values p, g and l. |
|
DHPrivateKey(InputStream is)
Creates a new DHPrivateKey from an InputStream. |
Method Summary | |
protected void |
decode(byte[] privateKey)
Decodes a DER encoded DH private key. |
byte[] |
encode()
Returns this DH private key as DER encoded ASN.1 object. |
String |
getAlgorithm()
Returns the name of the appertaining algorithm. |
DHParameterSpec |
getParams()
Returns the key parameters. |
BigInteger |
getX()
Returns the private value x as BigInteger.
|
int |
hashCode()
Returns a hash code for this object. |
String |
toString()
Returns a string that represents the contents of this private key. |
Methods inherited from class iaik.pkcs.pkcs8.PrivateKeyInfo |
clone, createPrivateKeyInfo, decode, equals, getEncoded, getFormat, getPrivateKey, getPrivateKey, toASN1Object, writeTo |
Methods inherited from class java.lang.Object |
finalize, getClass, notify, notifyAll, wait, wait, wait |
Methods inherited from interface java.security.Key |
getEncoded, getFormat |
Constructor Detail |
public DHPrivateKey(BigInteger x, DHParameterSpec parameters)
x
- the BigInteger value representing the DH private key valueparameters
- the DH parameters p (prime modulus), g (base generator)
and l (length of the private value x) as DHParameterSpecDHParameterSpec
public DHPrivateKey(DHPrivateKeySpec keySpec)
keySpec
- the DHPrivateKeySpec representing the private key value x,
the prime modulus p
, the base generator g
,
and the length l
of the private valueDHPrivateKeySpec
public DHPrivateKey(byte[] pk) throws InvalidKeyException
This constructor may be used for parsing an already exisiting
DH private key, wrapped into a PKCS#8 PrivateKeyInfo
that is supplied as DER encoded byte array.
the
- byte array holding the DER encoded private key infoInvalidKeyException
- if something is wrong with the key encodingpublic DHPrivateKey(ASN1Object obj) throws InvalidKeyException
PrivateKeyInfo
holding the DH private key.obj
- the private key ASN.1 data structureInvalidKeyException
- if something is wrong with the key encodingpublic DHPrivateKey(InputStream is) throws IOException, InvalidKeyException
This constructor may be used for parsing an already exisiting
DH private key, wrapped into a PKCS#8 PrivateKeyInfo
that is supplied as DER encoded byte array.
is
- the input stream with the data to be read to initialize the private keyIOException
- if an I/O error occursInvalidKeyException
- if something is wrong with the key encodingMethod Detail |
protected void decode(byte[] privateKey) throws InvalidKeyException
From the given DER encoded byte array an ASN.1 object is created and parsed for
the private key value x
and the DH parameters prime p
and base g
, and - if included - the length l
of the private value x
.
This method is protected and typically will not be used by an application. Rather
it is used by the parent PKCS#8 PrivateKeyInfo
class for decoding the inherent DH private key.
decode
in class PrivateKeyInfo
privateKey
- the DH private key as DER encoded ASN.1 objectInvalidKeyException
- if the given key is not a DH private keypublic byte[] encode()
This method is protected and typically will not be used by an application. Rather
it is used by the parent PKCS#8 PrivateKeyInfo
class for encoding the inherent DH private key.
encode
in class PrivateKeyInfo
public BigInteger getX()
x
as BigInteger.
getX
in interface DHPrivateKey
x
as BigIntegerpublic DHParameterSpec getParams()
getParams
in interface DHKey
public String getAlgorithm()
getAlgorithm
in interface Key
getAlgorithm
in class PrivateKeyInfo
public int hashCode()
hashCode
in class PrivateKeyInfo
public String toString()
toString
in class PrivateKeyInfo
|
This Javadoc may contain text parts from Internet Standard specifications (RFC 2459, 3280, 3039, 2560, 1521, 821, 822, 2253, 1319, 1321, ,2630, 2631, 2268, 3058, 2984, 2104, 2144, 2040, 2311, 2279, see copyright note) and RSA Data Security Public-Key Cryptography Standards (PKCS#1,3,5,7,8,9,10,12, see copyright note). | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |