Webrev updated at

   https://cr.openjdk.java.net/~weijun/8213009/webrev.03

I reset messageDigest/messageDigestAlgorithm/needsReset and check for "key 
instanceof RSAPublicKey" in RSA::engineInitVerify.

Thanks
Max
   

> On Nov 27, 2018, at 10:13 PM, Weijun Wang <weijun.w...@oracle.com> wrote:
> 
> 
> 
>> On Nov 27, 2018, at 9:55 AM, Valerie Peng <valerie.p...@oracle.com> wrote:
>> 
>> Hi Max,
>> 
>> Please find comments in line.
>> On 11/22/2018 6:04 AM, Weijun Wang wrote:
>>>> On Nov 22, 2018, at 9:14 AM, Valerie Peng <valerie.p...@oracle.com>
>>>> wrote:
>>>> 
>>>> Hi Max,
>>>> 
>>>> Here are some comments:
>>>> 
>>>> <src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/CSignature.java>
>>>> - line 39, add PSS here as well.
>>>> - line 97, CSignature ctr, better to initialize all fields
>>>> 
>>> Which particular ones are you thinking about? privateKey and publicKey will 
>>> be initialized later and messageDigest/messageDigestAlgorithm/needsReset 
>>> will be useless when digestName == null.
>>> 
>> I was referring messageDigest/messageDigestAlgorithm/needsReset. My general 
>> preference is to set them to null/false even when not used, may help catch 
>> future coding problems. 
> 
> OK.
> 
>>>> - line 109, has key algorithm been checked by JCA already? If not, it 
>>>> should be checked here. Same goes for line 414, and 560
>>>> 
>>> Can I do this later? This sub-task is meant to be a cleanup.
>> My point for checking the key algorithm is to ensure that the specified key 
>> object is RSA type. After this cleanup and refactoring, the specified key 
>> should be checked to be of RSA type, i.e. line 111, 130. Otherwise, the 
>> casting to various RSA public/private key interfaces, e.g. 
>> java.security.interfaces.RSAPublicKey, may fail.
> 
> OK, I can check for RSAPublicKey.
> 
> On the other hand, if I create a subclass for CRSAPrivateKey, its 
> getModulus() and getPrivateExponent() can only throw out a ProviderException 
> if the key is unextractable, and this breaks some existing code inside JDK.
> 
> Thanks
> Max
> 
>> 
>> Updates look fine.
>> 
>> Regards,
>> 
>> Valerie
>> 
>>> But I think I need to move more RSA related methods into the RSA subclass.
>>> 
>>> 
>>>> - with the class renaming, I think it's clearer to include "RSA" as part 
>>>> of the subclass names, e.g. "MD2withRSA" instead of just "MD2"
>>>> 
>>> OK.
>>> 
>>> 
>>>> - line 681: can be static, right? pkg-private?
>>>> 
>>> Yes. Looks like it can be private.
>>> 
>>> 
>>>> <src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/CPublicKey.java>
>>>> - line 120: maybe a ProviderException instead of IllegalArgumentException 
>>>> as the 'alg' is not from user but rather inside the provider.
>>>> 
>>> Either is OK for me. Since it's only called inside the provider, it can 
>>> even be an AssertionError.
>>> 
>>> 
>>>> - line 127, add @Override
>>>> 
>>> OK.
>>> 
>>> 
>>>> - line 140, must getPublicKeyBob be public? Maybe pkg private?
>>>> 
>>> Correct.
>>> 
>>> 
>>>> <src/jdk.crypto.mscapi/windows/classes/sun/security/mscapi/CKeyStore.java>
>>>> - line 119: why not just use RSAPrivateCrtKey instead of Key? The caller 
>>>> has already did an instanceof check before this method.
>>>> 
>>> Correct. I think I should rename both setPrivateKey and 
>>> generatePrivateKeyBlob to setRSAPrivateKey and generateRSAPrivateKeyBlob. 
>>> If one day I starts supporting EC keys the methods will be quite different.
>>> 
>>> 
>>>> <test/jdk/sun/security/mscapi/KeyAlgorithms.java>
>>>> - would be nice to have a String constant for "RSA".
>>>> 
>>> Sure.
>>> 
>>> Thanks
>>> Max
>>> 
>>> 
>>>> Rest looks fine.
>>>> Thanks,
>>>> Valerie
>>>> 
>>>> 
>>>> On 11/15/2018 7:40 AM, Weijun Wang wrote:
>>>> 
>>>>> Oops, my copy/paste sequence goes wrong.
>>>>> 
>>>>> 
>>>>>> On Nov 15, 2018, at 11:38 PM, Weijun Wang <weijun.w...@oracle.com>
>>>>>> wrote:
>>>>>> 
>>>>>> Webrev updated at
>>>>>> 
>>>>>> 
>>>>>   https://cr.openjdk.java.net/~weijun/8213009/webrev.01/
>>>>> 
>>>>> 
>>>>> 
>>>>>> More refactorings:
>>>>>> 
>>>>>> - getEncoded and getFormat of CKey removed, implemented in CPublicKey 
>>>>>> and CPrivateKey.
>>>>>> 
>>>>>> - CPublicKey has child class CRSAPublicKey, CKeyPairGenerator has child 
>>>>>> class RSA.
>>>>>> 
>>>>>> - CPublicKey and CPrivateKey now have a static of() method that can 
>>>>>> return a child instance.
>>>>>> 
>>>>>> - CCipher renamed to CRSACipher. I realized there won't be CECCipher.
>>>>>> 
>>>>>> Thanks
>>>>>> Max
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>>> On Nov 7, 2018, at 12:13 AM, Weijun Wang <weijun.w...@oracle.com>
>>>>>>> wrote:
>>>>>>> 
>>>>>>> Webrev updated at
>>>>>>> 
>>>>>>> 
>>>>>>> https://cr.openjdk.java.net/~weijun/8213009/webrev.00/
>>>>>>> 
>>>>>>> 
>>>>>>> The subtask id is now used.
>>>>>>> 
>>>>>>> The previous refactoring has removed the "RSA" algorithm info from some 
>>>>>>> keys. This update adds them back.
>>>>>>> 
>>>>>>> Thanks
>>>>>>> Max
>>>>>>> 
>>>>>>> 
>>>>>>>> On Oct 25, 2018, at 4:38 PM, Weijun Wang <weijun.w...@oracle.com>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> Please review the change at
>>>>>>>> 
>>>>>>>> 
>>>>>>>> https://cr.openjdk.java.net/~weijun/8026953/webrev.00/
>>>>>>>> 
>>>>>>>> 
>>>>>>>> (I will use a sub-task id for this change but currently JBS is down).
>>>>>>>> 
>>>>>>>> The major change is renaming classes. Since we are going to support 
>>>>>>>> algorithms other than RSA, I've renamed the classes like RSAPrivateKey 
>>>>>>>> -> CPrivateKey. Classes that have the same name as JCA classes (like 
>>>>>>>> Key, KeyStore) are also renamed (to CKey, CKeyStore) so it's easy to 
>>>>>>>> tell them apart.
>>>>>>>> 
>>>>>>>> Others are not about renaming but they are also related to supporting 
>>>>>>>> other algorithms, and there is no behavior change. They include:
>>>>>>>> 
>>>>>>>> - CKey (plus its child classes CPublicKey and CPrivateKey) has a new 
>>>>>>>> field "algorithm". This field is used by 
>>>>>>>> CKeyStore::generateRSAKeyAndCertificateChain and its value is obtained 
>>>>>>>> from the public key algorithm in a cert [1].
>>>>>>>> 
>>>>>>>> - Child class named "RSA" of CKeyPairGenerator.
>>>>>>>> 
>>>>>>>> - Child class named "RSA" of CSignature. I also moved some RSA-related 
>>>>>>>> methods into this child class as overridden methods.
>>>>>>>> 
>>>>>>>> - CKeyStore::setPrivateKey's key parameter has a new type Key, but it 
>>>>>>>> still only accepts RSAPrivateCrtKey now.
>>>>>>>> 
>>>>>>>> Noreg-cleanup.
>>>>>>>> 
>>>>>>>> Thanks
>>>>>>>> Max
>>>>>>>> 
>>>>>>>> [1] 
>>>>>>>> https://docs.microsoft.com/en-gb/windows/desktop/api/wincrypt/ns-wincrypt-_crypt_algorithm_identifier
> 

Reply via email to