On Fri, 15 Nov 2024 18:55:44 GMT, Volodymyr Paprotski <vpaprot...@openjdk.org> 
wrote:

>> src/java.base/share/classes/com/sun/crypto/provider/CipherBlockChaining.java 
>> line 65:
>> 
>>> 63:     // Should be large enough to provide intrinsic with optimization
>>> 64:     // opportunities
>>> 65:     private final int chunkSize = 1024*100;
>> 
>> Shouldn't we call `getBlockSize()` of the parent class here rather than 
>> using a hard-coded integer? Variable assignment to be done in constructor in 
>> such case.
>
> I don't think this constant needs to be dynamic. The reason I mention 
> blocksize, the intrinsic expects multiple of block size 
> (`ArrayUtil.blockSizeCheck(plainLen, blockSize);` assert before-hand), but 
> its otherwise unrelated to the block size. (i.e. "has to be large enough for 
> optimizations").
> 
> I believe this class can also be used by DES; iirc, blocksize=8. I suppose I 
> could use `AESConstants.AES_BLOCK_SIZE*6400` as `chunkSize`. If that looks 
> good, I will do that change, though I've seen '16' used as a raw number 
> plenty of times in the package, without 'attribution' to AES_BLOCK_SIZE.
> 
> And to be thorough, I should probably put an 
> `ArrayUtil.blockSizeCheck(chunkSize, blockSize);` into the constructor? That 
> way it is checked, but not on every call.

Yes, my concern is basically `intrinsic expects multiple of block size`. I 
would simply declare the variable and then assign it in constructor when 
`blockSize` is known, no need to call `blockSizeCheck`:

private final int chunkSize;
.........
 CipherBlockChaining(SymmetricCipher embeddedCipher) {
        super(embeddedCipher);
        k = new byte[blockSize];
        r = new byte[blockSize];
        chunkSize = blockSize * 6400;
    }

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

PR Review Comment: https://git.openjdk.org/jdk/pull/22086#discussion_r1844375649

Reply via email to