src/java.base/share/classes/sun/security/ssl/DHKeyExchange.java
changeset 53734 cb1642ccc732
parent 53359 cb4212fda8e4
child 55353 946f7f2d321c
child 58678 9cf78a70fa4f
equal deleted inserted replaced
53733:b5d45c2fe8a0 53734:cb1642ccc732
    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