|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectnet.i2p.crypto.DHSessionKeyBuilder
public class DHSessionKeyBuilder
Generate a new session key through a diffie hellman exchange. This uses the constants defined in CryptoConstants, which causes the exchange to create a 256 bit session key. This class precalcs a set of values on its own thread, using those transparently when a new instance is created. By default, the minimum threshold for creating new values for the pool is 5, and the max pool size is 10. Whenever the pool has less than the minimum, it fills it up again to the max. There is a delay after each precalculation so that the CPU isn't hosed during startup (defaulting to 1 second). These three parameters are controlled by java environmental variables and can be adjusted via: -Dcrypto.dh.precalc.min=40 -Dcrypto.dh.precalc.max=100 -Dcrypto.dh.precalc.delay=60000 (delay is milliseconds) To disable precalculation, set min to 0
Nested Class Summary | |
---|---|
static class |
DHSessionKeyBuilder.InvalidPublicParameterException
|
Field Summary | |
---|---|
static java.lang.String |
DEFAULT_DH_PRECALC_DELAY
|
static java.lang.String |
DEFAULT_DH_PRECALC_MAX
|
static java.lang.String |
DEFAULT_DH_PRECALC_MIN
|
static java.lang.String |
PROP_DH_PRECALC_DELAY
|
static java.lang.String |
PROP_DH_PRECALC_MAX
|
static java.lang.String |
PROP_DH_PRECALC_MIN
|
Constructor Summary | |
---|---|
DHSessionKeyBuilder()
Construct a new DH key builder |
|
DHSessionKeyBuilder(boolean usePool)
|
Method Summary | |
---|---|
static DHSessionKeyBuilder |
exchangeKeys(java.io.InputStream in,
java.io.OutputStream out)
Conduct a DH exchange over the streams, returning the resulting data. |
java.math.BigInteger |
generateMyValue()
Create a new private value for the DH exchange, and return the number to be exchanged, leaving the actual private value accessible through getMyPrivateValue() |
ByteArray |
getExtraBytes()
Retrieve the extra bytes beyond the session key resulting from the DH exchange. |
java.math.BigInteger |
getMyPrivateValue()
Retrieve the private value used by the local participant in the DH exchange |
java.math.BigInteger |
getMyPublicValue()
Retrieve the public value used by the local participant in the DH exchange, generating it if necessary |
byte[] |
getMyPublicValueBytes()
Return a 256 byte representation of our public key, with leading 0s if necessary. |
java.math.BigInteger |
getPeerPublicValue()
|
byte[] |
getPeerPublicValueBytes()
|
SessionKey |
getSessionKey()
Retrieve the session key, calculating it if necessary (and if possible). |
static void |
main(java.lang.String[] args)
|
(package private) static java.math.BigInteger |
readBigI(java.io.InputStream in)
|
void |
setPeerPublicValue(java.math.BigInteger peerVal)
Specify the value given by the peer for use in the session key negotiation |
void |
setPeerPublicValue(byte[] val)
|
(package private) static void |
writeBigI(java.io.OutputStream out,
java.math.BigInteger val)
Write out the integer as a 256 byte value. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final java.lang.String PROP_DH_PRECALC_MIN
public static final java.lang.String PROP_DH_PRECALC_MAX
public static final java.lang.String PROP_DH_PRECALC_DELAY
public static final java.lang.String DEFAULT_DH_PRECALC_MIN
public static final java.lang.String DEFAULT_DH_PRECALC_MAX
public static final java.lang.String DEFAULT_DH_PRECALC_DELAY
Constructor Detail |
---|
public DHSessionKeyBuilder()
public DHSessionKeyBuilder(boolean usePool)
Method Detail |
---|
public static DHSessionKeyBuilder exchangeKeys(java.io.InputStream in, java.io.OutputStream out) throws java.io.IOException
java.io.IOException
- if there is an error (but does not close the streamsstatic java.math.BigInteger readBigI(java.io.InputStream in) throws java.io.IOException
java.io.IOException
static void writeBigI(java.io.OutputStream out, java.math.BigInteger val) throws java.io.IOException
java.io.IOException
public java.math.BigInteger generateMyValue()
public java.math.BigInteger getMyPrivateValue()
public java.math.BigInteger getMyPublicValue()
public byte[] getMyPublicValueBytes()
public void setPeerPublicValue(java.math.BigInteger peerVal) throws DHSessionKeyBuilder.InvalidPublicParameterException
DHSessionKeyBuilder.InvalidPublicParameterException
public void setPeerPublicValue(byte[] val) throws DHSessionKeyBuilder.InvalidPublicParameterException
DHSessionKeyBuilder.InvalidPublicParameterException
public java.math.BigInteger getPeerPublicValue()
public byte[] getPeerPublicValueBytes()
public SessionKey getSessionKey()
public ByteArray getExtraBytes()
public static void main(java.lang.String[] args)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |