While SignatureSpi says engineGetParameters() would throw an UOE when it's not 
overridden, it is not specified in Signature::getParameters:

     * <p> If this signature has been previously initialized with parameters
     * (by calling the {@code setParameter} method), this method returns
     * the same parameters. If this signature has not been initialized with
     * parameters, this method may return a combination of default and
     * randomly generated parameter values if the underlying
     * signature implementation supports it and can successfully generate
     * them. Otherwise, {@code null} is returned.

I'm afraid we'll have to return something here, maybe a mixture of a curve name 
and fields inside EdDSAParameterSpec.

--Max

> On Mar 31, 2020, at 12:25 PM, Anthony Scarpino <anthony.scarp...@oracle.com> 
> wrote:
> 
> On 3/30/20 8:52 PM, Anthony Scarpino wrote:
>> On 3/30/20 7:54 PM, Weijun Wang wrote:
>>> 
>>> 
>>>> On Mar 31, 2020, at 10:50 AM, Anthony Scarpino 
>>>> <anthony.scarp...@oracle.com> wrote:
>>>> 
>>>> On 3/30/20 11:52 AM, Anthony Scarpino wrote:
>>>>> On 3/30/20 6:21 AM, Weijun Wang wrote:
>>>>>> I was playing with keytool with your patch and noticed
>>>>>> sun.security.util.KeyUtil.getKeySize(Key) does not support an
>>>>>> EdECKey. While we use curve name instead of key size in EC to
>>>>>> describe the parameters, the size is still useful in determining the
>>>>>> strength.
>>>>> I think I should be able to access the parameter with the key's 
>>>>> NamedParameterSpec to return the size.
>>>> 
>>>> I was wrong about this.  The parameters are part of jdk.crypto.ec while 
>>>> KeyUtil is part of java.base, so I cannot access the internal 
>>>> EdDSAParameters class.
>>>> 
>>>> The easiest way would be to look at the NamedParameterSpec and return a 
>>>> hardcoded length based on the curve used. It's not ideal, but all these 
>>>> curves don't change lengths unlike for RSA, AES, etc.
>>> 
>>> Yes.
>>> 
>>>> 
>>>> Tony
>>>> 
>>>>>> 
>>>>>> There is also a KeyUtil.getKeySize(AlgorithmParameters) nearby. I'm
>>>>>> not involved with previous discussions on EdDSA design, but why does
>>>>>> EdDSASignature.engineGetParameters() throw an UOE?
>>>>> Because the public API for engineGetParameter(String param) is deprecated 
>>>>> would be my suspicion.
>>> 
>>> engineGetParameter() is deprecated, engineGetParameters() is not.
>> Oh sorry.  I'm not sure why, but I have to ask the question what is the 
>> point of this method?  If the user needs to set the parameters to do the a 
>> signature of verify, what is the need for a method that gets the parameter 
>> from Signature that should have just set?  Are the parameters returned 
>> changed from the initial setting?  In the EdDSA case they are not.
>> I don't have an immediate problem in having EdDSA return the same parameters 
>> back, I'm just not sure why it's necessary and I haven't see anything in the 
>> JEP as to why Adam decided against this.
>> Tony
> 
> Ok.. That's frustrating that engineSetParameters takes 
> AlgorithmParameterSpec, but engineGetParameters returns AlgorithmParameter.  
> That confused me.
> 
> So I would say the reason EdDSASignature.engineGetParameters() is UOE is 
> because the parameters are not exposed publicly.  The NamedParameterSpec 
> tells the internals of EdDSA what parameters to use.  I know this to be a 
> choice by Adam as he found it unnecessary to expose APIs that were 
> unnecessary at this time with predefined EdDSA curves and with a 
> implementation that did not allow arbitrary curves.
> 
> Tony
> 
>>> 
>>>>>> Another small problem:
>>>>>> 
>>>>>> You reverted the copyright year from 2020 to an earlier year in
>>>>>> module-info.java, keytool/Main.java.
>>>>> The copyright has not been reverted, the jdk repo was updated to 2020 
>>>>> from another changeset.
>>> 
>>> Ah yes, I applied your patch to my old repo.
>>> 
>>> --Max
>>> 
>>>>>> 
>>>>>> Thanks, Max
>>>>>> 
>>>>>>> On Mar 24, 2020, at 2:53 AM, Anthony Scarpino
>>>>>>> <anthony.scarp...@oracle.com> wrote:
>>>>>>> 
>>>>>>> On 2/25/20 12:49 PM, Anthony Scarpino wrote:
>>>>>>>> Hi I need a code review for the EdDSA support in JEP 339.  The
>>>>>>>> code builds on the existing java implemented constant time
>>>>>>>> classes used for XDH and the NIST curves.  The change also adds
>>>>>>>> classes to the public API to support EdDSA operations. All
>>>>>>>> information about the JEP is located at: JEP 339:
>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8199231 CSR:
>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8190219 webrev:
>>>>>>>> https://cr.openjdk.java.net/~ascarpino/8166597/webrev/ thanks Tony
>>>>>>> 
>>>>>>> 
>>>>>>> I updated the webrev with some minor updates that were commented
>>>>>>> previously.
>>>>>>> 
>>>>>>> https://cr.openjdk.java.net/~ascarpino/8166597/webrev.01/
>>>>>>> 
>>>>>>> Tony

Reply via email to