aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/com/trilead/ssh2/crypto/dh/DhExchange.java
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2015-07-23 22:38:46 -0700
committerKenny Root <kenny@the-b.org>2015-07-24 15:35:39 -0700
commit147dae0102979a0217ac8a9eea82a4969a1ecf63 (patch)
tree40718fac7fc6a3afce07c910ffc243dd5d69d403 /app/src/main/java/com/trilead/ssh2/crypto/dh/DhExchange.java
parent739337624a5e69221a998cf10b1fd34fcc5ecd2d (diff)
downloadconnectbot-147dae0102979a0217ac8a9eea82a4969a1ecf63.tar.gz
connectbot-147dae0102979a0217ac8a9eea82a4969a1ecf63.tar.bz2
connectbot-147dae0102979a0217ac8a9eea82a4969a1ecf63.zip
Move to library-based build
Diffstat (limited to 'app/src/main/java/com/trilead/ssh2/crypto/dh/DhExchange.java')
-rw-r--r--app/src/main/java/com/trilead/ssh2/crypto/dh/DhExchange.java132
1 files changed, 0 insertions, 132 deletions
diff --git a/app/src/main/java/com/trilead/ssh2/crypto/dh/DhExchange.java b/app/src/main/java/com/trilead/ssh2/crypto/dh/DhExchange.java
deleted file mode 100644
index 3acde25..0000000
--- a/app/src/main/java/com/trilead/ssh2/crypto/dh/DhExchange.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- *
- */
-package com.trilead.ssh2.crypto.dh;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.KeyFactory;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.NoSuchAlgorithmException;
-import java.security.spec.InvalidKeySpecException;
-
-import javax.crypto.KeyAgreement;
-import javax.crypto.interfaces.DHPrivateKey;
-import javax.crypto.interfaces.DHPublicKey;
-import javax.crypto.spec.DHParameterSpec;
-import javax.crypto.spec.DHPublicKeySpec;
-
-/**
- * @author kenny
- *
- */
-public class DhExchange extends GenericDhExchange {
-
- /* Given by the standard */
-
- private static final BigInteger P1 = new BigInteger(
- "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
- + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
- + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
- + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
- + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381"
- + "FFFFFFFFFFFFFFFF", 16);
-
- private static final BigInteger P14 = new BigInteger(
- "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1"
- + "29024E088A67CC74020BBEA63B139B22514A08798E3404DD"
- + "EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245"
- + "E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED"
- + "EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D"
- + "C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F"
- + "83655D23DCA3AD961C62F356208552BB9ED529077096966D"
- + "670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B"
- + "E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9"
- + "DE2BCBF6955817183995497CEA956AE515D2261898FA0510"
- + "15728E5A8AACAA68FFFFFFFFFFFFFFFF", 16);
-
- private static final BigInteger G = BigInteger.valueOf(2);
-
- /* Client public and private */
-
- private DHPrivateKey clientPrivate;
- private DHPublicKey clientPublic;
-
- /* Server public */
-
- private DHPublicKey serverPublic;
-
- @Override
- public void init(String name) throws IOException {
- final DHParameterSpec spec;
- if ("diffie-hellman-group1-sha1".equals(name)) {
- spec = new DHParameterSpec(P1, G);
- } else if ("diffie-hellman-group14-sha1".equals(name)) {
- spec = new DHParameterSpec(P14, G);
- } else {
- throw new IllegalArgumentException("Unknown DH group " + name);
- }
-
- try {
- KeyPairGenerator kpg = KeyPairGenerator.getInstance("DH");
- kpg.initialize(spec);
- KeyPair pair = kpg.generateKeyPair();
- clientPrivate = (DHPrivateKey) pair.getPrivate();
- clientPublic = (DHPublicKey) pair.getPublic();
- } catch (NoSuchAlgorithmException e) {
- throw (IOException) new IOException("No DH keypair generator").initCause(e);
- } catch (InvalidAlgorithmParameterException e) {
- throw (IOException) new IOException("Invalid DH parameters").initCause(e);
- }
- }
-
- @Override
- public byte[] getE() {
- if (clientPublic == null)
- throw new IllegalStateException("DhExchange not initialized!");
-
- return clientPublic.getY().toByteArray();
- }
-
- @Override
- protected byte[] getServerE() {
- if (serverPublic == null)
- throw new IllegalStateException("DhExchange not initialized!");
-
- return serverPublic.getY().toByteArray();
- }
-
- @Override
- public void setF(byte[] f) throws IOException {
- if (clientPublic == null)
- throw new IllegalStateException("DhExchange not initialized!");
-
- final KeyAgreement ka;
- try {
- KeyFactory kf = KeyFactory.getInstance("DH");
- DHParameterSpec params = clientPublic.getParams();
- this.serverPublic = (DHPublicKey) kf.generatePublic(new DHPublicKeySpec(
- new BigInteger(f), params.getP(), params.getG()));
-
- ka = KeyAgreement.getInstance("DH");
- ka.init(clientPrivate);
- ka.doPhase(serverPublic, true);
- } catch (NoSuchAlgorithmException e) {
- throw (IOException) new IOException("No DH key agreement method").initCause(e);
- } catch (InvalidKeyException e) {
- throw (IOException) new IOException("Invalid DH key").initCause(e);
- } catch (InvalidKeySpecException e) {
- throw (IOException) new IOException("Invalid DH key").initCause(e);
- }
-
- sharedSecret = new BigInteger(ka.generateSecret());
- }
-
- @Override
- public String getHashAlgo() {
- return "SHA1";
- }
-}