< prev index next >
src/java.base/share/classes/com/sun/crypto/provider/AESCrypt.java
Print this page
rev 17033 : ECB fix part 2
*** 36,46 ****
package com.sun.crypto.provider;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
! import java.util.Arrays;
import java.util.Objects;
import jdk.internal.HotSpotIntrinsicCandidate;
/**
--- 36,46 ----
package com.sun.crypto.provider;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
! import java.security.ProviderException;
import java.util.Objects;
import jdk.internal.HotSpotIntrinsicCandidate;
/**
*** 354,363 ****
--- 354,375 ----
Objects.checkFromIndexSize(inOffset, AES_BLOCK_SIZE, in.length);
Objects.checkFromIndexSize(outOffset, AES_BLOCK_SIZE, out.length);
implEncryptBlock(in, inOffset, out, outOffset);
}
+ @Override
+ void encryptBlocks(byte[] in, int inOffset, byte[] out, int outOffset, int len) {
+ if ((len % AES_BLOCK_SIZE) != 0) {
+ throw new ProviderException("Internal error in input buffering");
+ }
+ Objects.checkFromIndexSize(inOffset , len, in.length);
+ Objects.checkFromIndexSize(outOffset, len, out.length);
+ for (int i = 0; i < len; i += AES_BLOCK_SIZE) {
+ implEncryptBlock(in, inOffset + i, out, outOffset + i);
+ }
+ }
+
// Encryption operation. Possibly replaced with a compiler intrinsic.
@HotSpotIntrinsicCandidate
private void implEncryptBlock(byte[] in, int inOffset,
byte[] out, int outOffset)
{
*** 433,442 ****
--- 445,467 ----
Objects.checkFromIndexSize(inOffset, AES_BLOCK_SIZE, in.length);
Objects.checkFromIndexSize(outOffset, AES_BLOCK_SIZE, out.length);
implDecryptBlock(in, inOffset, out, outOffset);
}
+ @Override
+ void decryptBlocks(byte[] in, int inOffset, byte[] out, int outOffset, int len) {
+ if ((len % AES_BLOCK_SIZE) != 0) {
+ throw new ProviderException("Internal error in input buffering");
+ }
+ Objects.checkFromIndexSize(inOffset, len, in.length);
+ Objects.checkFromIndexSize(outOffset, len, out.length);
+ for (int i = 0; i < len; i += AES_BLOCK_SIZE) {
+ implDecryptBlock(in, inOffset + i, out, outOffset + i);
+ }
+ }
+
+
// Decrypt operation. Possibly replaced with a compiler intrinsic.
@HotSpotIntrinsicCandidate
private void implDecryptBlock(byte[] in, int inOffset,
byte[] out, int outOffset)
{
< prev index next >