--- a/src/java.base/share/classes/sun/security/rsa/RSAPrivateKeyImpl.java Fri May 11 14:55:56 2018 -0700
+++ b/src/java.base/share/classes/sun/security/rsa/RSAPrivateKeyImpl.java Fri May 11 15:53:12 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -29,15 +29,18 @@
import java.math.BigInteger;
import java.security.*;
+import java.security.spec.AlgorithmParameterSpec;
import java.security.interfaces.*;
import sun.security.util.*;
+import sun.security.x509.AlgorithmId;
import sun.security.pkcs.PKCS8Key;
/**
- * Key implementation for RSA private keys, non-CRT form (modulus, private
- * exponent only). For CRT private keys, see RSAPrivateCrtKeyImpl. We need
- * separate classes to ensure correct behavior in instanceof checks, etc.
+ * RSA private key implementation for "RSA", "RSASSA-PSS" algorithms in non-CRT
+ * form (modulus, private exponent only). For CRT private keys, see
+ * RSAPrivateCrtKeyImpl. We need separate classes to ensure correct behavior
+ * in instanceof checks, etc.
*
* Note: RSA keys must be at least 512 bits long
*
@@ -54,16 +57,25 @@
private final BigInteger n; // modulus
private final BigInteger d; // private exponent
+ // optional parameters associated with this RSA key
+ // specified in the encoding of its AlgorithmId.
+ // must be null for "RSA" keys.
+ private final AlgorithmParameterSpec keyParams;
+
/**
* Construct a key from its components. Used by the
* RSAKeyFactory and the RSAKeyPairGenerator.
*/
- RSAPrivateKeyImpl(BigInteger n, BigInteger d) throws InvalidKeyException {
+ RSAPrivateKeyImpl(AlgorithmId rsaId, BigInteger n, BigInteger d)
+ throws InvalidKeyException {
+ RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), null);
+
this.n = n;
this.d = d;
- RSAKeyFactory.checkRSAProviderKeyLengths(n.bitLength(), null);
+ this.keyParams = RSAUtil.getParamSpec(rsaId);
+
// generate the encoding
- algid = RSAPrivateCrtKeyImpl.rsaId;
+ algid = rsaId;
try {
DerOutputStream out = new DerOutputStream();
out.putInteger(0); // version must be 0
@@ -85,17 +97,34 @@
}
// see JCA doc
+ @Override
public String getAlgorithm() {
- return "RSA";
+ return algid.getName();
}
// see JCA doc
+ @Override
public BigInteger getModulus() {
return n;
}
// see JCA doc
+ @Override
public BigInteger getPrivateExponent() {
return d;
}
+
+ // see JCA doc
+ @Override
+ public AlgorithmParameterSpec getParams() {
+ return keyParams;
+ }
+
+ // return a string representation of this key for debugging
+ @Override
+ public String toString() {
+ return "Sun " + getAlgorithm() + " private key, " + n.bitLength()
+ + " bits" + "\n params: " + keyParams + "\n modulus: " + n
+ + "\n private exponent: " + d;
+ }
}