equal
deleted
inserted
replaced
85 DHParameterSpec params = (DHParameterSpec)ng.getParameterSpec(); |
85 DHParameterSpec params = (DHParameterSpec)ng.getParameterSpec(); |
86 if (params == null) { |
86 if (params == null) { |
87 return null; |
87 return null; |
88 } |
88 } |
89 |
89 |
90 KeyFactory kf = JsseJce.getKeyFactory("DiffieHellman"); |
90 KeyFactory kf = KeyFactory.getInstance("DiffieHellman"); |
91 DHPublicKeySpec spec = new DHPublicKeySpec( |
91 DHPublicKeySpec spec = new DHPublicKeySpec( |
92 new BigInteger(1, encodedPublic), |
92 new BigInteger(1, encodedPublic), |
93 params.getP(), params.getG()); |
93 params.getP(), params.getG()); |
94 DHPublicKey publicKey = |
94 DHPublicKey publicKey = |
95 (DHPublicKey)kf.generatePublic(spec); |
95 (DHPublicKey)kf.generatePublic(spec); |
104 final NamedGroup namedGroup; |
104 final NamedGroup namedGroup; |
105 |
105 |
106 DHEPossession(NamedGroup namedGroup, SecureRandom random) { |
106 DHEPossession(NamedGroup namedGroup, SecureRandom random) { |
107 try { |
107 try { |
108 KeyPairGenerator kpg = |
108 KeyPairGenerator kpg = |
109 JsseJce.getKeyPairGenerator("DiffieHellman"); |
109 KeyPairGenerator.getInstance("DiffieHellman"); |
110 DHParameterSpec params = |
110 DHParameterSpec params = |
111 (DHParameterSpec)namedGroup.getParameterSpec(); |
111 (DHParameterSpec)namedGroup.getParameterSpec(); |
112 kpg.initialize(params, random); |
112 kpg.initialize(params, random); |
113 KeyPair kp = generateDHKeyPair(kpg); |
113 KeyPair kp = generateDHKeyPair(kpg); |
114 if (kp == null) { |
114 if (kp == null) { |
127 DHEPossession(int keyLength, SecureRandom random) { |
127 DHEPossession(int keyLength, SecureRandom random) { |
128 DHParameterSpec params = |
128 DHParameterSpec params = |
129 PredefinedDHParameterSpecs.definedParams.get(keyLength); |
129 PredefinedDHParameterSpecs.definedParams.get(keyLength); |
130 try { |
130 try { |
131 KeyPairGenerator kpg = |
131 KeyPairGenerator kpg = |
132 JsseJce.getKeyPairGenerator("DiffieHellman"); |
132 KeyPairGenerator.getInstance("DiffieHellman"); |
133 if (params != null) { |
133 if (params != null) { |
134 kpg.initialize(params, random); |
134 kpg.initialize(params, random); |
135 } else { |
135 } else { |
136 kpg.initialize(keyLength, random); |
136 kpg.initialize(keyLength, random); |
137 } |
137 } |
153 } |
153 } |
154 |
154 |
155 DHEPossession(DHECredentials credentials, SecureRandom random) { |
155 DHEPossession(DHECredentials credentials, SecureRandom random) { |
156 try { |
156 try { |
157 KeyPairGenerator kpg = |
157 KeyPairGenerator kpg = |
158 JsseJce.getKeyPairGenerator("DiffieHellman"); |
158 KeyPairGenerator.getInstance("DiffieHellman"); |
159 kpg.initialize(credentials.popPublicKey.getParams(), random); |
159 kpg.initialize(credentials.popPublicKey.getParams(), random); |
160 KeyPair kp = generateDHKeyPair(kpg); |
160 KeyPair kp = generateDHKeyPair(kpg); |
161 if (kp == null) { |
161 if (kp == null) { |
162 throw new RuntimeException("Could not generate DH keypair"); |
162 throw new RuntimeException("Could not generate DH keypair"); |
163 } |
163 } |
206 DHParameterSpec params = dhKey.getParams(); |
206 DHParameterSpec params = dhKey.getParams(); |
207 return new DHPublicKeySpec(dhKey.getY(), |
207 return new DHPublicKeySpec(dhKey.getY(), |
208 params.getP(), params.getG()); |
208 params.getP(), params.getG()); |
209 } |
209 } |
210 try { |
210 try { |
211 KeyFactory factory = JsseJce.getKeyFactory("DiffieHellman"); |
211 KeyFactory factory = KeyFactory.getInstance("DiffieHellman"); |
212 return factory.getKeySpec(key, DHPublicKeySpec.class); |
212 return factory.getKeySpec(key, DHPublicKeySpec.class); |
213 } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { |
213 } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { |
214 // unlikely |
214 // unlikely |
215 throw new RuntimeException("Unable to get DHPublicKeySpec", e); |
215 throw new RuntimeException("Unable to get DHPublicKeySpec", e); |
216 } |
216 } |
471 } |
471 } |
472 |
472 |
473 private SecretKey t12DeriveKey(String algorithm, |
473 private SecretKey t12DeriveKey(String algorithm, |
474 AlgorithmParameterSpec params) throws IOException { |
474 AlgorithmParameterSpec params) throws IOException { |
475 try { |
475 try { |
476 KeyAgreement ka = JsseJce.getKeyAgreement("DiffieHellman"); |
476 KeyAgreement ka = KeyAgreement.getInstance("DiffieHellman"); |
477 ka.init(localPrivateKey); |
477 ka.init(localPrivateKey); |
478 ka.doPhase(peerPublicKey, true); |
478 ka.doPhase(peerPublicKey, true); |
479 SecretKey preMasterSecret = |
479 SecretKey preMasterSecret = |
480 ka.generateSecret("TlsPremasterSecret"); |
480 ka.generateSecret("TlsPremasterSecret"); |
481 SSLMasterKeyDerivation mskd = |
481 SSLMasterKeyDerivation mskd = |
497 } |
497 } |
498 |
498 |
499 private SecretKey t13DeriveKey(String algorithm, |
499 private SecretKey t13DeriveKey(String algorithm, |
500 AlgorithmParameterSpec params) throws IOException { |
500 AlgorithmParameterSpec params) throws IOException { |
501 try { |
501 try { |
502 KeyAgreement ka = JsseJce.getKeyAgreement("DiffieHellman"); |
502 KeyAgreement ka = KeyAgreement.getInstance("DiffieHellman"); |
503 ka.init(localPrivateKey); |
503 ka.init(localPrivateKey); |
504 ka.doPhase(peerPublicKey, true); |
504 ka.doPhase(peerPublicKey, true); |
505 SecretKey sharedSecret = |
505 SecretKey sharedSecret = |
506 ka.generateSecret("TlsPremasterSecret"); |
506 ka.generateSecret("TlsPremasterSecret"); |
507 |
507 |