comparison src/ch/ethz/ssh2/crypto/dh/EcDhExchange.java @ 313:1d400fd78e4a ganymed

add ecdsa key support everywhere
author Carl Byington <carl@five-ten-sg.com>
date Wed, 30 Jul 2014 16:19:33 -0700
parents cb179051f0f2
children
comparison
equal deleted inserted replaced
312:1442be38051b 313:1d400fd78e4a
25 /** 25 /**
26 * @author kenny 26 * @author kenny
27 * 27 *
28 */ 28 */
29 public class EcDhExchange extends GenericDhExchange { 29 public class EcDhExchange extends GenericDhExchange {
30
31 /* Client public and private */
32
30 private ECPrivateKey clientPrivate; 33 private ECPrivateKey clientPrivate;
31 private ECPublicKey clientPublic; 34 private ECPublicKey clientPublic;
35
36 /* Server public */
37
32 private ECPublicKey serverPublic; 38 private ECPublicKey serverPublic;
39 private byte[] f;
33 40
34 @Override 41 @Override
35 public void init(String name) throws IOException { 42 public void init(String name) throws IOException {
36 final ECParameterSpec spec; 43 final ECParameterSpec spec;
37 44
76 return ECDSASHA2Verify.encodeECPoint(serverPublic.getW(), serverPublic.getParams() 83 return ECDSASHA2Verify.encodeECPoint(serverPublic.getW(), serverPublic.getParams()
77 .getCurve()); 84 .getCurve());
78 } 85 }
79 86
80 @Override 87 @Override
88 public byte[] getF() {
89 return f;
90 }
91
92 @Override
81 public void setF(byte[] f) throws IOException { 93 public void setF(byte[] f) throws IOException {
82 if (clientPublic == null) 94 if (clientPublic == null)
83 throw new IllegalStateException("DhDsaExchange not initialized!"); 95 throw new IllegalStateException("DhDsaExchange not initialized!");
84 96
85 final KeyAgreement ka; 97 final KeyAgreement ka;
86 98
87 try { 99 try {
88 KeyFactory kf = KeyFactory.getInstance("EC"); 100 KeyFactory kf = KeyFactory.getInstance("EC");
89 ECParameterSpec params = clientPublic.getParams(); 101 ECParameterSpec params = clientPublic.getParams();
90 ECPoint serverPoint = ECDSASHA2Verify.decodeECPoint(f, params.getCurve()); 102 ECPoint serverPoint = ECDSASHA2Verify.decodeECPoint(f, params.getCurve());
103 this.f = f;
91 this.serverPublic = (ECPublicKey) kf.generatePublic(new ECPublicKeySpec(serverPoint, 104 this.serverPublic = (ECPublicKey) kf.generatePublic(new ECPublicKeySpec(serverPoint,
92 params)); 105 params));
93 ka = KeyAgreement.getInstance("ECDH"); 106 ka = KeyAgreement.getInstance("ECDH");
94 ka.init(clientPrivate); 107 ka.init(clientPrivate);
95 ka.doPhase(serverPublic, true); 108 ka.doPhase(serverPublic, true);