> On Aug 1, 2018, at 11:55 PM, Seán Coffey <sean.cof...@oracle.com> wrote:
>
> Max,
>
> some updates.
>
> 1.
>
> I wasn't able to rename to destroy since that method is reserved for the
> Destroyable interface. I've gone with destroyKey.
Sorry I wasn't clear but this is exactly what I meant. SecretKey implements
Destroyable so you don't need to define sKey as PBEKey. Does it make any
problem?
>
> 3.
>
> As per offline communication, I've removed the ASCII reference in the
> s.s.p.KeyProtector constructor comments. I don't believe ASCII requirement
> was ever enforced (nor needed). We use the 16 bits if presented. If password
> standards need review, that work should be carried out in another bug report.
>
> 4.
>
> I wasn't able to use your suggested method reference syntax. The reference to
> this would prevent the Object from being cleaned. The PBEKeyCleanupTest
> testcase seems to confirm that.
Oops.
>
> http://cr.openjdk.java.net/~coffeys/webrev.8208583.v2/webrev/index.html
>
> Regards,
> Sean.
>
> On 01/08/18 09:17, Seán Coffey wrote:
>> Thanks for the comments Max. Comments inline..
>>
>>
>> On 01/08/2018 07:59, Weijun Wang wrote:
>>> Some comments:
>>>
>>> 1. Is it possible to let rename PBEKey::clearKey to PNEKey::destroy?
>> Sure.
>>>
>>> 2. I am not sure if the newly added "Arrays.fill(thatEncoded, (byte)0x00)"
>>> line in PBEKey::equals is safe. What if that key does not return a cloned
>>> copy when getEncode() is called? This is possible if the class is only used
>>> internally and never escape.
>> This is not new code. I just refactored the java.util.Arrays.fill call to
>> Arrays.fill.
>>>
>>> 3. You would need to modify the spec of s.s.p.KeyProtector::<init> since
>>> password is of a new type. In fact, is this change necessary? Just to
>>> prevent the duplication of code in convertToBytes()?
>> Yes, I can add edits to that effect. The class is package private and I only
>> found 2 usages of it. The main advantage is not having to copy or create an
>> extra buffer in this code. The calling code now has full control over when
>> it can null out the bytes in use. That should be a help here and also means
>> we don't place unnecessary load on GC/Cleaner.
>>>
>>> 4. I found the last line of PBEKey::<init> might be modified to
>>>
>>> CleanerFactory.cleaner().register(this, this::clearKey);
>> Sure - I can modify that.
>>
>> regards,
>> Sean.
>>>
>>> I have never been a lambda expert so forgive me if this is not correct.
>>>
>>> Thanks
>>> Max
>>>
>>>> On Aug 1, 2018, at 3:11 AM, Seán Coffey <sean.cof...@oracle.com> wrote:
>>>>
>>>> Looking to improve management of internal buffers in KeyStore. The
>>>> com.sun.crypto.provider.KeyProtector class uses the PBEKey class to
>>>> protect some keys. Buffers can be freed up earlier if the caller takes
>>>> responsibility for lifecycle of PBEKey object. (hence no reliance on
>>>> Cleaner). Some other minor improvements made while visiting this area.
>>>>
>>>> Other improvements in sun.security.provider.KeyProtector where I believe
>>>> the password buffer can be managed by the caller. I only found 2
>>>> instances of where this class is used.
>>>>
>>>> https://bugs.openjdk.java.net/browse/JDK-8208583
>>>> http://cr.openjdk.java.net/~coffeys/webrev.8208583.v1/webrev/index.html
>>>>
>>>> regards,
>>>> Sean.
>>>>
>>
>