diff --git a/crypto/src/crypto/modes/SicBlockCipher.cs b/crypto/src/crypto/modes/SicBlockCipher.cs
index 3e2b8deba..17f86ee10 100644
--- a/crypto/src/crypto/modes/SicBlockCipher.cs
+++ b/crypto/src/crypto/modes/SicBlockCipher.cs
@@ -18,8 +18,7 @@ namespace Org.BouncyCastle.Crypto.Modes
private readonly int blockSize;
private readonly byte[] counter;
private readonly byte[] counterOut;
-
- private byte[] IV = null;
+ private byte[] IV;
/**
* Basic constructor.
@@ -32,6 +31,7 @@ namespace Org.BouncyCastle.Crypto.Modes
this.blockSize = cipher.GetBlockSize();
this.counter = new byte[blockSize];
this.counterOut = new byte[blockSize];
+ this.IV = new byte[blockSize];
}
/**
@@ -108,7 +108,8 @@ namespace Org.BouncyCastle.Crypto.Modes
public virtual void Reset()
{
- Array.Copy(IV, 0, counter, 0, counter.Length);
+ Arrays.Fill(counter, (byte)0);
+ Array.Copy(IV, 0, counter, 0, System.Math.Min(IV.Length, counter.Length));
cipher.Reset();
}
}
diff --git a/crypto/test/src/test/BlockCipherTest.cs b/crypto/test/src/test/BlockCipherTest.cs
index 2e8e8b0b8..93cf2b0a5 100644
--- a/crypto/test/src/test/BlockCipherTest.cs
+++ b/crypto/test/src/test/BlockCipherTest.cs
@@ -438,6 +438,7 @@ namespace Org.BouncyCastle.Tests
{
// TODO Examine short IV handling for these FIPS-compliant modes in Java build
if (mode.StartsWith("CFB")
+ || mode.StartsWith("CTR")
|| mode.StartsWith("GOFB")
|| mode.StartsWith("OFB")
|| mode.StartsWith("OPENPGPCFB"))
|