On Wed, 9 Nov 2022 20:15:35 GMT, Weijun Wang <wei...@openjdk.org> wrote:

>> An `EncryptedPrivateKeyInfo` object can be created with an uninitialized 
>> `AlgorithmParameters`, but before you call `getEncoded` on it you need to 
>> remember to initialize the params. This is unfortunate but since this is a 
>> public API, I hesitate to make a change.
>> 
>> Instead, this code change fixes the much more widely used internal class 
>> `AlgorithmId` so that it cannot be created with an uninitialized 
>> `AlgorithmParameters`. `EncryptedPrivateKeyInfo` now works with both 
>> initialized and uninitialized params, and it's immutable.
>> 
>> No intention to make `AlgorithmId` immutable this time. It has a child class 
>> named `AlgIdDSA` which makes things complicated.
>
> src/java.base/share/classes/javax/crypto/EncryptedPrivateKeyInfo.java line 
> 423:
> 
>> 421:             // wrap everything into a SEQUENCE
>> 422:             out.write(DerValue.tag_Sequence, tmp);
>> 423:             return out.toByteArray();
> 
> I'd rather not cache the encoding. First, the cache makes the class mutable. 
> Second, `getEncode` should usually only be called once and the cache is not 
> so useful. Third, this avoids an unnecessary clone (on the line below).

I'm not very sure of the 2nd point.  Is it possible the class could be a long 
term object, and used multiple time?  Anyway, the encoding should be fast and 
may not worthy of a mutable design.

-------------

PR: https://git.openjdk.org/jdk/pull/11067

Reply via email to