private CryptoCipher createCryptoCipherFromContentCryptoMaterial()

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());
    }