Hi All,
Currently, every algorithm-specific asymmetric key interface (Ex: ECKey) in JDK
has a getParams() method. We are thinking about duplicating this method in
PublicKey and PrivateKey (returning null by default) so the method is available
for all asymmetric keys. Once we have this method, even if a new algorithm is
introduced in a future release, there is no need to rewrite your applications
to use any new algorithm-specific API (suppose the new algorithm does not
invent any new AlgorithmParameterSpec type).
Since PublicKey/PrivateKey and, say, ECKey do not have the same parent
interface, there will be an ambiguity in their child interfaces to decide which
getParams() to choose. In order to fix this, we will add new default methods in
all existing child interfaces (Ex: ECPublicKey and ECPrivateKey) that return
the same type as their algorithm-specific parent (Ex: ECKey::getParams returns
ECParameterSpec) with a value null.
Do you have any comment?
The risk is that if an existing algorithm-specific interface already has this
method but does not return an AlgorithmParameterSpec object there will be a
conflict. In fact, inside OpenJDK, DSAKey's getParams() returns a DSAParams
object which is not an AlgorithmParameterSpec. We'll modify it to extend
AlgorithmParameterSpec.
If there is something similar in your code, please let us know. And, do you
think you can fix it the same way we do?
Thanks,
Weijun
----
Example:
java.security.PublicKey:
+ default AlgorithmParameterSpec getParams(){
+ return null;
+ }
java.security.interfaces.ECKey:
ECParameterSpec getParams();
java.security.interfaces.ECPublicKey:
+ default ECParameterSpec getParams(){
+ return null;
+ }