in oss-20190517/src/main/java/com/aliyun/sdk/service/oss20190517/encryption/internal/CryptoModuleAesCtr.java [100:117]
private CryptoCipher createCryptoCipherFromContentCryptoMaterial(ContentCryptoMaterial cekMaterial, int cipherMode,
long[] cryptoRange, long skipBlock) {
if (cipherMode != Cipher.ENCRYPT_MODE && cipherMode != Cipher.DECRYPT_MODE) {
throw new OSSClientException("Invalid cipher mode.", null);
}
byte[] iv = cekMaterial.getIV();
SecretKey cek = cekMaterial.getCEK();
String cekAlgo = cekMaterial.getContentCryptoAlgorithm();
CryptoScheme tmpContentCryptoScheme = CryptoScheme.fromCEKAlgo(cekAlgo);
// Adjust the IV if needed
boolean isRangeGet = (cryptoRange != null);
if (isRangeGet) {
iv = tmpContentCryptoScheme.adjustIV(iv, cryptoRange[0]);
} else if (skipBlock > 0) {
iv = CryptoScheme.incrementBlocks(iv, skipBlock);
}
return tmpContentCryptoScheme.createCryptoCipher(cek, iv, cipherMode, cryptoConfig.getContentCryptoProvider());
}