提交 cb7ceb93 编写于 作者: I igerasim

8185292: Stricter key generation

Reviewed-by: mullan
上级 3761204b
/* /*
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -28,11 +28,13 @@ package com.sun.crypto.provider; ...@@ -28,11 +28,13 @@ package com.sun.crypto.provider;
import java.util.*; import java.util.*;
import java.lang.*; import java.lang.*;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.AccessController;
import java.security.InvalidAlgorithmParameterException; import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException; import java.security.InvalidKeyException;
import java.security.Key; import java.security.Key;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.security.PrivilegedAction;
import java.security.ProviderException; import java.security.ProviderException;
import java.security.spec.AlgorithmParameterSpec; import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.InvalidKeySpecException; import java.security.spec.InvalidKeySpecException;
...@@ -60,6 +62,17 @@ extends KeyAgreementSpi { ...@@ -60,6 +62,17 @@ extends KeyAgreementSpi {
private BigInteger x = BigInteger.ZERO; // the private value private BigInteger x = BigInteger.ZERO; // the private value
private BigInteger y = BigInteger.ZERO; private BigInteger y = BigInteger.ZERO;
private static class AllowKDF {
private static final boolean VALUE = getValue();
private static boolean getValue() {
return AccessController.doPrivileged(
(PrivilegedAction<Boolean>)
() -> Boolean.getBoolean("jdk.crypto.KeyAgreement.legacyKDF"));
}
}
/** /**
* Empty constructor * Empty constructor
*/ */
...@@ -367,6 +380,14 @@ extends KeyAgreementSpi { ...@@ -367,6 +380,14 @@ extends KeyAgreementSpi {
if (algorithm == null) { if (algorithm == null) {
throw new NoSuchAlgorithmException("null algorithm"); throw new NoSuchAlgorithmException("null algorithm");
} }
if (!algorithm.equalsIgnoreCase("TlsPremasterSecret") &&
!AllowKDF.VALUE) {
throw new NoSuchAlgorithmException("Unsupported secret key "
+ "algorithm: " + algorithm);
}
byte[] secret = engineGenerateSecret(); byte[] secret = engineGenerateSecret();
if (algorithm.equalsIgnoreCase("DES")) { if (algorithm.equalsIgnoreCase("DES")) {
// DES // DES
......
/* /*
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -69,6 +69,17 @@ final class P11KeyAgreement extends KeyAgreementSpi { ...@@ -69,6 +69,17 @@ final class P11KeyAgreement extends KeyAgreementSpi {
// KeyAgreement from SunJCE as fallback for > 2 party agreement // KeyAgreement from SunJCE as fallback for > 2 party agreement
private KeyAgreement multiPartyAgreement; private KeyAgreement multiPartyAgreement;
private static class AllowKDF {
private static final boolean VALUE = getValue();
private static boolean getValue() {
return AccessController.doPrivileged(
(PrivilegedAction<Boolean>)
() -> Boolean.getBoolean("jdk.crypto.KeyAgreement.legacyKDF"));
}
}
P11KeyAgreement(Token token, String algorithm, long mechanism) { P11KeyAgreement(Token token, String algorithm, long mechanism) {
super(); super();
this.token = token; this.token = token;
...@@ -260,6 +271,7 @@ final class P11KeyAgreement extends KeyAgreementSpi { ...@@ -260,6 +271,7 @@ final class P11KeyAgreement extends KeyAgreementSpi {
if (algorithm == null) { if (algorithm == null) {
throw new NoSuchAlgorithmException("Algorithm must not be null"); throw new NoSuchAlgorithmException("Algorithm must not be null");
} }
if (algorithm.equals("TlsPremasterSecret")) { if (algorithm.equals("TlsPremasterSecret")) {
// For now, only perform native derivation for TlsPremasterSecret // For now, only perform native derivation for TlsPremasterSecret
// as that is required for FIPS compliance. // as that is required for FIPS compliance.
...@@ -268,6 +280,14 @@ final class P11KeyAgreement extends KeyAgreementSpi { ...@@ -268,6 +280,14 @@ final class P11KeyAgreement extends KeyAgreementSpi {
// (bug not yet filed). // (bug not yet filed).
return nativeGenerateSecret(algorithm); return nativeGenerateSecret(algorithm);
} }
if (!algorithm.equalsIgnoreCase("TlsPremasterSecret") &&
!AllowKDF.VALUE) {
throw new NoSuchAlgorithmException("Unsupported secret key "
+ "algorithm: " + algorithm);
}
byte[] secret = engineGenerateSecret(); byte[] secret = engineGenerateSecret();
// Maintain compatibility for SunJCE: // Maintain compatibility for SunJCE:
// verify secret length is sensible for algorithm / truncate // verify secret length is sensible for algorithm / truncate
......
/* /*
* Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
* @summary Verify that DHKeyAgreement can generate secret key * @summary Verify that DHKeyAgreement can generate secret key
* objects for AES algorithm * objects for AES algorithm
* @author Valerie Peng * @author Valerie Peng
* @run main/othervm -Djdk.crypto.KeyAgreement.legacyKDF=true DHGenSecretKey
*/ */
import java.security.*; import java.security.*;
import java.security.interfaces.*; import java.security.interfaces.*;
......
/* /*
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
* @bug 7146728 * @bug 7146728
* @summary DHKeyAgreement2 * @summary DHKeyAgreement2
* @author Jan Luehe * @author Jan Luehe
* @run main/othervm -Djdk.crypto.KeyAgreement.legacyKDF=true DHKeyAgreement2
*/ */
import java.io.*; import java.io.*;
......
/* /*
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
* @bug 8048819 * @bug 8048819
* @summary This test stressful verifies the assertion of "The secret keys generated * @summary This test stressful verifies the assertion of "The secret keys generated
* by all involved parties should be the same." for javax.crypto.KeyAgreement * by all involved parties should be the same." for javax.crypto.KeyAgreement
* @run main SameDHKeyStressTest * @run main/othervm -Djdk.crypto.KeyAgreement.legacyKDF=true SameDHKeyStressTest
*/ */
import java.security.AlgorithmParameterGenerator; import java.security.AlgorithmParameterGenerator;
import java.security.InvalidAlgorithmParameterException; import java.security.InvalidAlgorithmParameterException;
......
/* /*
* Copyright (c) 2003, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
* @summary Verify that DH works properly * @summary Verify that DH works properly
* @author Andreas Sterbenz * @author Andreas Sterbenz
* @library .. * @library ..
* @run main/othervm -Djdk.crypto.KeyAgreement.legacyKDF=true TestDH
* @run main/othervm -Djdk.crypto.KeyAgreement.legacyKDF=true TestDH sm
*/ */
import java.io.*; import java.io.*;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册