mirror of
https://github.com/hierynomus/sshj.git
synced 2025-12-06 15:20:54 +03:00
keyexchange refactoring and cleanups
This commit is contained in:
@@ -50,6 +50,7 @@ import net.schmizz.sshj.transport.digest.SHA1;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
import java.security.PublicKey;
|
import java.security.PublicKey;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -72,7 +73,6 @@ public abstract class AbstractDHG
|
|||||||
private byte[] I_C;
|
private byte[] I_C;
|
||||||
|
|
||||||
private byte[] e;
|
private byte[] e;
|
||||||
private byte[] f;
|
|
||||||
private byte[] K;
|
private byte[] K;
|
||||||
private byte[] H;
|
private byte[] H;
|
||||||
private PublicKey hostKey;
|
private PublicKey hostKey;
|
||||||
@@ -111,26 +111,26 @@ public abstract class AbstractDHG
|
|||||||
public boolean next(Message msg, SSHPacket packet)
|
public boolean next(Message msg, SSHPacket packet)
|
||||||
throws TransportException {
|
throws TransportException {
|
||||||
if (msg != Message.KEXDH_31)
|
if (msg != Message.KEXDH_31)
|
||||||
throw new TransportException(DisconnectReason.KEY_EXCHANGE_FAILED, "Unxpected packet: " + msg);
|
throw new TransportException(DisconnectReason.KEY_EXCHANGE_FAILED, "Unexpected packet: " + msg);
|
||||||
|
|
||||||
log.info("Received SSH_MSG_KEXDH_REPLY");
|
log.info("Received SSH_MSG_KEXDH_REPLY");
|
||||||
final byte[] K_S = packet.readBytes();
|
final byte[] K_S = packet.readBytes();
|
||||||
f = packet.readMPIntAsBytes();
|
final byte[] f = packet.readMPIntAsBytes();
|
||||||
final byte[] sig = packet.readBytes(); // signature sent by server
|
final byte[] sig = packet.readBytes(); // signature sent by server
|
||||||
dh.setF(f);
|
dh.setF(new BigInteger(f));
|
||||||
K = dh.getK();
|
K = dh.getK();
|
||||||
|
|
||||||
hostKey = new Buffer.PlainBuffer(K_S).readPublicKey();
|
hostKey = new Buffer.PlainBuffer(K_S).readPublicKey();
|
||||||
|
|
||||||
final Buffer.PlainBuffer buf = new Buffer.PlainBuffer() // our hash
|
final Buffer.PlainBuffer buf = new Buffer.PlainBuffer()
|
||||||
.putString(V_C) //
|
.putString(V_C)
|
||||||
.putString(V_S) //
|
.putString(V_S)
|
||||||
.putString(I_C) //
|
.putString(I_C)
|
||||||
.putString(I_S) //
|
.putString(I_S)
|
||||||
.putString(K_S) //
|
.putString(K_S)
|
||||||
.putMPInt(e) //
|
.putMPInt(e)
|
||||||
.putMPInt(f) //
|
.putMPInt(f)
|
||||||
.putMPInt(K); //
|
.putMPInt(K);
|
||||||
sha.update(buf.array(), 0, buf.available());
|
sha.update(buf.array(), 0, buf.available());
|
||||||
H = sha.digest();
|
H = sha.digest();
|
||||||
|
|
||||||
|
|||||||
@@ -55,10 +55,8 @@ public class DH {
|
|||||||
private BigInteger p;
|
private BigInteger p;
|
||||||
private BigInteger g;
|
private BigInteger g;
|
||||||
private BigInteger e; // my public key
|
private BigInteger e; // my public key
|
||||||
private byte[] e_array;
|
|
||||||
private BigInteger f; // your public key
|
private BigInteger f; // your public key
|
||||||
private BigInteger K; // shared secret key
|
private BigInteger K; // shared secret key
|
||||||
private byte[] K_array;
|
|
||||||
private final KeyPairGenerator myKpairGen;
|
private final KeyPairGenerator myKpairGen;
|
||||||
private final KeyAgreement myKeyAgree;
|
private final KeyAgreement myKeyAgree;
|
||||||
|
|
||||||
@@ -72,6 +70,18 @@ public class DH {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setF(BigInteger f) {
|
||||||
|
this.f = f;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setG(BigInteger g) {
|
||||||
|
this.g = g;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setP(BigInteger p) {
|
||||||
|
this.p = p;
|
||||||
|
}
|
||||||
|
|
||||||
public byte[] getE() {
|
public byte[] getE() {
|
||||||
if (e == null) {
|
if (e == null) {
|
||||||
DHParameterSpec dhSkipParamSpec = new DHParameterSpec(p, g);
|
DHParameterSpec dhSkipParamSpec = new DHParameterSpec(p, g);
|
||||||
@@ -84,9 +94,8 @@ public class DH {
|
|||||||
throw new SSHRuntimeException(e);
|
throw new SSHRuntimeException(e);
|
||||||
}
|
}
|
||||||
e = ((javax.crypto.interfaces.DHPublicKey) myKpair.getPublic()).getY();
|
e = ((javax.crypto.interfaces.DHPublicKey) myKpair.getPublic()).getY();
|
||||||
e_array = e.toByteArray();
|
|
||||||
}
|
}
|
||||||
return ByteArrayUtils.copyOf(e_array);
|
return ByteArrayUtils.copyOf(e.toByteArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getK() {
|
public byte[] getK() {
|
||||||
@@ -99,35 +108,9 @@ public class DH {
|
|||||||
} catch (GeneralSecurityException e) {
|
} catch (GeneralSecurityException e) {
|
||||||
throw new SSHRuntimeException(e);
|
throw new SSHRuntimeException(e);
|
||||||
}
|
}
|
||||||
byte[] mySharedSecret = myKeyAgree.generateSecret();
|
K = new BigInteger(myKeyAgree.generateSecret());
|
||||||
K = new BigInteger(mySharedSecret);
|
|
||||||
K_array = mySharedSecret;
|
|
||||||
}
|
}
|
||||||
return ByteArrayUtils.copyOf(K_array);
|
return ByteArrayUtils.copyOf(K.toByteArray());
|
||||||
}
|
|
||||||
|
|
||||||
public void setF(byte[] f) {
|
|
||||||
setF(new BigInteger(f));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setG(byte[] g) {
|
|
||||||
setG(new BigInteger(g));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setP(byte[] p) {
|
|
||||||
setP(new BigInteger(p));
|
|
||||||
}
|
|
||||||
|
|
||||||
void setF(BigInteger f) {
|
|
||||||
this.f = f;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setG(BigInteger g) {
|
|
||||||
this.g = g;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setP(BigInteger p) {
|
|
||||||
this.p = p;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,70 +35,79 @@
|
|||||||
*/
|
*/
|
||||||
package net.schmizz.sshj.transport.kex;
|
package net.schmizz.sshj.transport.kex;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
/** Simple class holding the data for DH group key exchanges. */
|
/** Simple class holding the data for DH group key exchanges. */
|
||||||
public final class DHGroupData {
|
public final class DHGroupData {
|
||||||
|
|
||||||
public static byte[] getG() {
|
private static final BigInteger G = new BigInteger(new byte[]{2});
|
||||||
final byte[] G = {2};
|
|
||||||
|
private static final BigInteger P1 = new BigInteger(new byte[]{
|
||||||
|
(byte) 0x00, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
|
||||||
|
(byte) 0xFF, (byte) 0xC9, (byte) 0x0F, (byte) 0xDA, (byte) 0xA2, (byte) 0x21, (byte) 0x68, (byte) 0xC2,
|
||||||
|
(byte) 0x34, (byte) 0xC4, (byte) 0xC6, (byte) 0x62, (byte) 0x8B, (byte) 0x80, (byte) 0xDC, (byte) 0x1C,
|
||||||
|
(byte) 0xD1, (byte) 0x29, (byte) 0x02, (byte) 0x4E, (byte) 0x08, (byte) 0x8A, (byte) 0x67, (byte) 0xCC,
|
||||||
|
(byte) 0x74, (byte) 0x02, (byte) 0x0B, (byte) 0xBE, (byte) 0xA6, (byte) 0x3B, (byte) 0x13, (byte) 0x9B,
|
||||||
|
(byte) 0x22, (byte) 0x51, (byte) 0x4A, (byte) 0x08, (byte) 0x79, (byte) 0x8E, (byte) 0x34, (byte) 0x04,
|
||||||
|
(byte) 0xDD, (byte) 0xEF, (byte) 0x95, (byte) 0x19, (byte) 0xB3, (byte) 0xCD, (byte) 0x3A, (byte) 0x43,
|
||||||
|
(byte) 0x1B, (byte) 0x30, (byte) 0x2B, (byte) 0x0A, (byte) 0x6D, (byte) 0xF2, (byte) 0x5F, (byte) 0x14,
|
||||||
|
(byte) 0x37, (byte) 0x4F, (byte) 0xE1, (byte) 0x35, (byte) 0x6D, (byte) 0x6D, (byte) 0x51, (byte) 0xC2,
|
||||||
|
(byte) 0x45, (byte) 0xE4, (byte) 0x85, (byte) 0xB5, (byte) 0x76, (byte) 0x62, (byte) 0x5E, (byte) 0x7E,
|
||||||
|
(byte) 0xC6, (byte) 0xF4, (byte) 0x4C, (byte) 0x42, (byte) 0xE9, (byte) 0xA6, (byte) 0x37, (byte) 0xED,
|
||||||
|
(byte) 0x6B, (byte) 0x0B, (byte) 0xFF, (byte) 0x5C, (byte) 0xB6, (byte) 0xF4, (byte) 0x06, (byte) 0xB7,
|
||||||
|
(byte) 0xED, (byte) 0xEE, (byte) 0x38, (byte) 0x6B, (byte) 0xFB, (byte) 0x5A, (byte) 0x89, (byte) 0x9F,
|
||||||
|
(byte) 0xA5, (byte) 0xAE, (byte) 0x9F, (byte) 0x24, (byte) 0x11, (byte) 0x7C, (byte) 0x4B, (byte) 0x1F,
|
||||||
|
(byte) 0xE6, (byte) 0x49, (byte) 0x28, (byte) 0x66, (byte) 0x51, (byte) 0xEC, (byte) 0xE6, (byte) 0x53,
|
||||||
|
(byte) 0x81, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
|
||||||
|
(byte) 0xFF
|
||||||
|
});
|
||||||
|
|
||||||
|
private static final BigInteger P14 = new BigInteger(new byte[]{
|
||||||
|
(byte) 0x00, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
|
||||||
|
(byte) 0xFF, (byte) 0xC9, (byte) 0x0F, (byte) 0xDA, (byte) 0xA2, (byte) 0x21, (byte) 0x68, (byte) 0xC2,
|
||||||
|
(byte) 0x34, (byte) 0xC4, (byte) 0xC6, (byte) 0x62, (byte) 0x8B, (byte) 0x80, (byte) 0xDC, (byte) 0x1C,
|
||||||
|
(byte) 0xD1, (byte) 0x29, (byte) 0x02, (byte) 0x4E, (byte) 0x08, (byte) 0x8A, (byte) 0x67, (byte) 0xCC,
|
||||||
|
(byte) 0x74, (byte) 0x02, (byte) 0x0B, (byte) 0xBE, (byte) 0xA6, (byte) 0x3B, (byte) 0x13, (byte) 0x9B,
|
||||||
|
(byte) 0x22, (byte) 0x51, (byte) 0x4A, (byte) 0x08, (byte) 0x79, (byte) 0x8E, (byte) 0x34, (byte) 0x04,
|
||||||
|
(byte) 0xDD, (byte) 0xEF, (byte) 0x95, (byte) 0x19, (byte) 0xB3, (byte) 0xCD, (byte) 0x3A, (byte) 0x43,
|
||||||
|
(byte) 0x1B, (byte) 0x30, (byte) 0x2B, (byte) 0x0A, (byte) 0x6D, (byte) 0xF2, (byte) 0x5F, (byte) 0x14,
|
||||||
|
(byte) 0x37, (byte) 0x4F, (byte) 0xE1, (byte) 0x35, (byte) 0x6D, (byte) 0x6D, (byte) 0x51, (byte) 0xC2,
|
||||||
|
(byte) 0x45, (byte) 0xE4, (byte) 0x85, (byte) 0xB5, (byte) 0x76, (byte) 0x62, (byte) 0x5E, (byte) 0x7E,
|
||||||
|
(byte) 0xC6, (byte) 0xF4, (byte) 0x4C, (byte) 0x42, (byte) 0xE9, (byte) 0xA6, (byte) 0x37, (byte) 0xED,
|
||||||
|
(byte) 0x6B, (byte) 0x0B, (byte) 0xFF, (byte) 0x5C, (byte) 0xB6, (byte) 0xF4, (byte) 0x06, (byte) 0xB7,
|
||||||
|
(byte) 0xED, (byte) 0xEE, (byte) 0x38, (byte) 0x6B, (byte) 0xFB, (byte) 0x5A, (byte) 0x89, (byte) 0x9F,
|
||||||
|
(byte) 0xA5, (byte) 0xAE, (byte) 0x9F, (byte) 0x24, (byte) 0x11, (byte) 0x7C, (byte) 0x4B, (byte) 0x1F,
|
||||||
|
(byte) 0xE6, (byte) 0x49, (byte) 0x28, (byte) 0x66, (byte) 0x51, (byte) 0xEC, (byte) 0xE4, (byte) 0x5B,
|
||||||
|
(byte) 0x3D, (byte) 0xC2, (byte) 0x00, (byte) 0x7C, (byte) 0xB8, (byte) 0xA1, (byte) 0x63, (byte) 0xBF,
|
||||||
|
(byte) 0x05, (byte) 0x98, (byte) 0xDA, (byte) 0x48, (byte) 0x36, (byte) 0x1C, (byte) 0x55, (byte) 0xD3,
|
||||||
|
(byte) 0x9A, (byte) 0x69, (byte) 0x16, (byte) 0x3F, (byte) 0xA8, (byte) 0xFD, (byte) 0x24, (byte) 0xCF,
|
||||||
|
(byte) 0x5F, (byte) 0x83, (byte) 0x65, (byte) 0x5D, (byte) 0x23, (byte) 0xDC, (byte) 0xA3, (byte) 0xAD,
|
||||||
|
(byte) 0x96, (byte) 0x1C, (byte) 0x62, (byte) 0xF3, (byte) 0x56, (byte) 0x20, (byte) 0x85, (byte) 0x52,
|
||||||
|
(byte) 0xBB, (byte) 0x9E, (byte) 0xD5, (byte) 0x29, (byte) 0x07, (byte) 0x70, (byte) 0x96, (byte) 0x96,
|
||||||
|
(byte) 0x6D, (byte) 0x67, (byte) 0x0C, (byte) 0x35, (byte) 0x4E, (byte) 0x4A, (byte) 0xBC, (byte) 0x98,
|
||||||
|
(byte) 0x04, (byte) 0xF1, (byte) 0x74, (byte) 0x6C, (byte) 0x08, (byte) 0xCA, (byte) 0x18, (byte) 0x21,
|
||||||
|
(byte) 0x7C, (byte) 0x32, (byte) 0x90, (byte) 0x5E, (byte) 0x46, (byte) 0x2E, (byte) 0x36, (byte) 0xCE,
|
||||||
|
(byte) 0x3B, (byte) 0xE3, (byte) 0x9E, (byte) 0x77, (byte) 0x2C, (byte) 0x18, (byte) 0x0E, (byte) 0x86,
|
||||||
|
(byte) 0x03, (byte) 0x9B, (byte) 0x27, (byte) 0x83, (byte) 0xA2, (byte) 0xEC, (byte) 0x07, (byte) 0xA2,
|
||||||
|
(byte) 0x8F, (byte) 0xB5, (byte) 0xC5, (byte) 0x5D, (byte) 0xF0, (byte) 0x6F, (byte) 0x4C, (byte) 0x52,
|
||||||
|
(byte) 0xC9, (byte) 0xDE, (byte) 0x2B, (byte) 0xCB, (byte) 0xF6, (byte) 0x95, (byte) 0x58, (byte) 0x17,
|
||||||
|
(byte) 0x18, (byte) 0x39, (byte) 0x95, (byte) 0x49, (byte) 0x7C, (byte) 0xEA, (byte) 0x95, (byte) 0x6A,
|
||||||
|
(byte) 0xE5, (byte) 0x15, (byte) 0xD2, (byte) 0x26, (byte) 0x18, (byte) 0x98, (byte) 0xFA, (byte) 0x05,
|
||||||
|
(byte) 0x10, (byte) 0x15, (byte) 0x72, (byte) 0x8E, (byte) 0x5A, (byte) 0x8A, (byte) 0xAC, (byte) 0xAA,
|
||||||
|
(byte) 0x68, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
|
||||||
|
(byte) 0xFF
|
||||||
|
});
|
||||||
|
|
||||||
|
public static BigInteger getG() {
|
||||||
return G;
|
return G;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static byte[] getP1() {
|
public static BigInteger getP1() {
|
||||||
final byte[] P_1 = {(byte) 0x00, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
|
return P1;
|
||||||
(byte) 0xFF, (byte) 0xFF, (byte) 0xC9, (byte) 0x0F, (byte) 0xDA, (byte) 0xA2, (byte) 0x21, (byte) 0x68,
|
|
||||||
(byte) 0xC2, (byte) 0x34, (byte) 0xC4, (byte) 0xC6, (byte) 0x62, (byte) 0x8B, (byte) 0x80, (byte) 0xDC,
|
|
||||||
(byte) 0x1C, (byte) 0xD1, (byte) 0x29, (byte) 0x02, (byte) 0x4E, (byte) 0x08, (byte) 0x8A, (byte) 0x67,
|
|
||||||
(byte) 0xCC, (byte) 0x74, (byte) 0x02, (byte) 0x0B, (byte) 0xBE, (byte) 0xA6, (byte) 0x3B, (byte) 0x13,
|
|
||||||
(byte) 0x9B, (byte) 0x22, (byte) 0x51, (byte) 0x4A, (byte) 0x08, (byte) 0x79, (byte) 0x8E, (byte) 0x34,
|
|
||||||
(byte) 0x04, (byte) 0xDD, (byte) 0xEF, (byte) 0x95, (byte) 0x19, (byte) 0xB3, (byte) 0xCD, (byte) 0x3A,
|
|
||||||
(byte) 0x43, (byte) 0x1B, (byte) 0x30, (byte) 0x2B, (byte) 0x0A, (byte) 0x6D, (byte) 0xF2, (byte) 0x5F,
|
|
||||||
(byte) 0x14, (byte) 0x37, (byte) 0x4F, (byte) 0xE1, (byte) 0x35, (byte) 0x6D, (byte) 0x6D, (byte) 0x51,
|
|
||||||
(byte) 0xC2, (byte) 0x45, (byte) 0xE4, (byte) 0x85, (byte) 0xB5, (byte) 0x76, (byte) 0x62, (byte) 0x5E,
|
|
||||||
(byte) 0x7E, (byte) 0xC6, (byte) 0xF4, (byte) 0x4C, (byte) 0x42, (byte) 0xE9, (byte) 0xA6, (byte) 0x37,
|
|
||||||
(byte) 0xED, (byte) 0x6B, (byte) 0x0B, (byte) 0xFF, (byte) 0x5C, (byte) 0xB6, (byte) 0xF4, (byte) 0x06,
|
|
||||||
(byte) 0xB7, (byte) 0xED, (byte) 0xEE, (byte) 0x38, (byte) 0x6B, (byte) 0xFB, (byte) 0x5A, (byte) 0x89,
|
|
||||||
(byte) 0x9F, (byte) 0xA5, (byte) 0xAE, (byte) 0x9F, (byte) 0x24, (byte) 0x11, (byte) 0x7C, (byte) 0x4B,
|
|
||||||
(byte) 0x1F, (byte) 0xE6, (byte) 0x49, (byte) 0x28, (byte) 0x66, (byte) 0x51, (byte) 0xEC, (byte) 0xE6,
|
|
||||||
(byte) 0x53, (byte) 0x81, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
|
|
||||||
(byte) 0xFF, (byte) 0xFF};
|
|
||||||
return P_1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static byte[] getP14() {
|
public static BigInteger getP14() {
|
||||||
final byte[] P_14 = {(byte) 0x00, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
|
return P14;
|
||||||
(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xC9, (byte) 0x0F, (byte) 0xDA, (byte) 0xA2, (byte) 0x21,
|
|
||||||
(byte) 0x68, (byte) 0xC2, (byte) 0x34, (byte) 0xC4, (byte) 0xC6, (byte) 0x62, (byte) 0x8B, (byte) 0x80,
|
|
||||||
(byte) 0xDC, (byte) 0x1C, (byte) 0xD1, (byte) 0x29, (byte) 0x02, (byte) 0x4E, (byte) 0x08, (byte) 0x8A,
|
|
||||||
(byte) 0x67, (byte) 0xCC, (byte) 0x74, (byte) 0x02, (byte) 0x0B, (byte) 0xBE, (byte) 0xA6, (byte) 0x3B,
|
|
||||||
(byte) 0x13, (byte) 0x9B, (byte) 0x22, (byte) 0x51, (byte) 0x4A, (byte) 0x08, (byte) 0x79, (byte) 0x8E,
|
|
||||||
(byte) 0x34, (byte) 0x04, (byte) 0xDD, (byte) 0xEF, (byte) 0x95, (byte) 0x19, (byte) 0xB3, (byte) 0xCD,
|
|
||||||
(byte) 0x3A, (byte) 0x43, (byte) 0x1B, (byte) 0x30, (byte) 0x2B, (byte) 0x0A, (byte) 0x6D, (byte) 0xF2,
|
|
||||||
(byte) 0x5F, (byte) 0x14, (byte) 0x37, (byte) 0x4F, (byte) 0xE1, (byte) 0x35, (byte) 0x6D, (byte) 0x6D,
|
|
||||||
(byte) 0x51, (byte) 0xC2, (byte) 0x45, (byte) 0xE4, (byte) 0x85, (byte) 0xB5, (byte) 0x76, (byte) 0x62,
|
|
||||||
(byte) 0x5E, (byte) 0x7E, (byte) 0xC6, (byte) 0xF4, (byte) 0x4C, (byte) 0x42, (byte) 0xE9, (byte) 0xA6,
|
|
||||||
(byte) 0x37, (byte) 0xED, (byte) 0x6B, (byte) 0x0B, (byte) 0xFF, (byte) 0x5C, (byte) 0xB6, (byte) 0xF4,
|
|
||||||
(byte) 0x06, (byte) 0xB7, (byte) 0xED, (byte) 0xEE, (byte) 0x38, (byte) 0x6B, (byte) 0xFB, (byte) 0x5A,
|
|
||||||
(byte) 0x89, (byte) 0x9F, (byte) 0xA5, (byte) 0xAE, (byte) 0x9F, (byte) 0x24, (byte) 0x11, (byte) 0x7C,
|
|
||||||
(byte) 0x4B, (byte) 0x1F, (byte) 0xE6, (byte) 0x49, (byte) 0x28, (byte) 0x66, (byte) 0x51, (byte) 0xEC,
|
|
||||||
(byte) 0xE4, (byte) 0x5B, (byte) 0x3D, (byte) 0xC2, (byte) 0x00, (byte) 0x7C, (byte) 0xB8, (byte) 0xA1,
|
|
||||||
(byte) 0x63, (byte) 0xBF, (byte) 0x05, (byte) 0x98, (byte) 0xDA, (byte) 0x48, (byte) 0x36, (byte) 0x1C,
|
|
||||||
(byte) 0x55, (byte) 0xD3, (byte) 0x9A, (byte) 0x69, (byte) 0x16, (byte) 0x3F, (byte) 0xA8, (byte) 0xFD,
|
|
||||||
(byte) 0x24, (byte) 0xCF, (byte) 0x5F, (byte) 0x83, (byte) 0x65, (byte) 0x5D, (byte) 0x23, (byte) 0xDC,
|
|
||||||
(byte) 0xA3, (byte) 0xAD, (byte) 0x96, (byte) 0x1C, (byte) 0x62, (byte) 0xF3, (byte) 0x56, (byte) 0x20,
|
|
||||||
(byte) 0x85, (byte) 0x52, (byte) 0xBB, (byte) 0x9E, (byte) 0xD5, (byte) 0x29, (byte) 0x07, (byte) 0x70,
|
|
||||||
(byte) 0x96, (byte) 0x96, (byte) 0x6D, (byte) 0x67, (byte) 0x0C, (byte) 0x35, (byte) 0x4E, (byte) 0x4A,
|
|
||||||
(byte) 0xBC, (byte) 0x98, (byte) 0x04, (byte) 0xF1, (byte) 0x74, (byte) 0x6C, (byte) 0x08, (byte) 0xCA,
|
|
||||||
(byte) 0x18, (byte) 0x21, (byte) 0x7C, (byte) 0x32, (byte) 0x90, (byte) 0x5E, (byte) 0x46, (byte) 0x2E,
|
|
||||||
(byte) 0x36, (byte) 0xCE, (byte) 0x3B, (byte) 0xE3, (byte) 0x9E, (byte) 0x77, (byte) 0x2C, (byte) 0x18,
|
|
||||||
(byte) 0x0E, (byte) 0x86, (byte) 0x03, (byte) 0x9B, (byte) 0x27, (byte) 0x83, (byte) 0xA2, (byte) 0xEC,
|
|
||||||
(byte) 0x07, (byte) 0xA2, (byte) 0x8F, (byte) 0xB5, (byte) 0xC5, (byte) 0x5D, (byte) 0xF0, (byte) 0x6F,
|
|
||||||
(byte) 0x4C, (byte) 0x52, (byte) 0xC9, (byte) 0xDE, (byte) 0x2B, (byte) 0xCB, (byte) 0xF6, (byte) 0x95,
|
|
||||||
(byte) 0x58, (byte) 0x17, (byte) 0x18, (byte) 0x39, (byte) 0x95, (byte) 0x49, (byte) 0x7C, (byte) 0xEA,
|
|
||||||
(byte) 0x95, (byte) 0x6A, (byte) 0xE5, (byte) 0x15, (byte) 0xD2, (byte) 0x26, (byte) 0x18, (byte) 0x98,
|
|
||||||
(byte) 0xFA, (byte) 0x05, (byte) 0x10, (byte) 0x15, (byte) 0x72, (byte) 0x8E, (byte) 0x5A, (byte) 0x8A,
|
|
||||||
(byte) 0xAC, (byte) 0xAA, (byte) 0x68, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
|
|
||||||
(byte) 0xFF, (byte) 0xFF, (byte) 0xFF};
|
|
||||||
return P_14;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,20 @@ import java.security.PublicKey;
|
|||||||
/** Key exchange algorithm. */
|
/** Key exchange algorithm. */
|
||||||
public interface KeyExchange {
|
public interface KeyExchange {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the key exchange algorithm.
|
||||||
|
*
|
||||||
|
* @param trans the transport
|
||||||
|
* @param V_S the server identification string
|
||||||
|
* @param V_C the client identification string
|
||||||
|
* @param I_S the server key init packet
|
||||||
|
* @param I_C the client key init packet
|
||||||
|
*
|
||||||
|
* @throws TransportException if there is an error sending a packet
|
||||||
|
*/
|
||||||
|
void init(Transport trans, byte[] V_S, byte[] V_C, byte[] I_S, byte[] I_C)
|
||||||
|
throws TransportException;
|
||||||
|
|
||||||
/** @return the computed H parameter */
|
/** @return the computed H parameter */
|
||||||
byte[] getH();
|
byte[] getH();
|
||||||
|
|
||||||
@@ -62,20 +76,6 @@ public interface KeyExchange {
|
|||||||
/** @return the computed K parameter */
|
/** @return the computed K parameter */
|
||||||
byte[] getK();
|
byte[] getK();
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize the key exchange algorithm.
|
|
||||||
*
|
|
||||||
* @param trans the transport
|
|
||||||
* @param V_S the server identification string
|
|
||||||
* @param V_C the client identification string
|
|
||||||
* @param I_S the server key init packet
|
|
||||||
* @param I_C the client key init packet
|
|
||||||
*
|
|
||||||
* @throws TransportException if there is an error sending a packet
|
|
||||||
*/
|
|
||||||
void init(Transport trans, byte[] V_S, byte[] V_C, byte[] I_S, byte[] I_C)
|
|
||||||
throws TransportException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process the next packet
|
* Process the next packet
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user