diff --git a/crypto/src/crypto/modes/KCcmBlockCipher.cs b/crypto/src/crypto/modes/KCcmBlockCipher.cs
index 8f1ed9c6f..1911ba53b 100644
--- a/crypto/src/crypto/modes/KCcmBlockCipher.cs
+++ b/crypto/src/crypto/modes/KCcmBlockCipher.cs
@@ -36,16 +36,12 @@ namespace Org.BouncyCastle.Crypto.Modes
private readonly MemoryStream data = new MemoryStream();
/*
- * Nb is a parameter specified in CCM mode of DSTU7624 standard.
- * This parameter specifies maximum possible length of input. It should
- * be calculated as follows: Nb = 1/8 * (-3 + log[2]Nmax) + 1,
- * where Nmax - length of input message in bits. For practical reasons
- * Nmax usually less than 4Gb, e.g. for Nmax = 2^32 - 1, Nb = 4.
+ *
*
*/
private int Nb_ = 4;
- public void setNb(int Nb)
+ private void setNb(int Nb)
{
if (Nb == 4 || Nb == 6 || Nb == 8)
{
@@ -57,7 +53,26 @@ namespace Org.BouncyCastle.Crypto.Modes
}
}
- public KCcmBlockCipher(IBlockCipher engine)
+ /// <summary>
+ /// Base constructor. Nb value is set to 4.
+ /// </summary>
+ /// <param name="engine">base cipher to use under CCM.</param>
+ public KCcmBlockCipher(IBlockCipher engine): this(engine, 4)
+ {
+ }
+
+ /// <summary>
+ /// Constructor allowing Nb configuration.
+ ///
+ /// Nb is a parameter specified in CCM mode of DSTU7624 standard.
+ /// This parameter specifies maximum possible length of input.It should
+ /// be calculated as follows: Nb = 1 / 8 * (-3 + log[2]Nmax) + 1,
+ /// where Nmax - length of input message in bits.For practical reasons
+ /// Nmax usually less than 4Gb, e.g. for Nmax = 2^32 - 1, Nb = 4.
+ /// </summary>
+ /// <param name="engine">base cipher to use under CCM.</param>
+ /// <param name="Nb">Nb value to use.</param>
+ public KCcmBlockCipher(IBlockCipher engine, int Nb)
{
this.engine = engine;
this.macSize = engine.GetBlockSize();
@@ -69,6 +84,7 @@ namespace Org.BouncyCastle.Crypto.Modes
this.buffer = new byte[engine.GetBlockSize()];
this.s = new byte[engine.GetBlockSize()];
this.counter = new byte[engine.GetBlockSize()];
+ setNb(Nb);
}
public virtual void Init(bool forEncryption, ICipherParameters parameters)
diff --git a/crypto/test/src/crypto/test/DSTU7624Test.cs b/crypto/test/src/crypto/test/DSTU7624Test.cs
index 599a3d61f..12ee46e5d 100644
--- a/crypto/test/src/crypto/test/DSTU7624Test.cs
+++ b/crypto/test/src/crypto/test/DSTU7624Test.cs
@@ -482,7 +482,6 @@ namespace Org.BouncyCastle.Crypto.Tests
KCcmBlockCipher dstu7624ccm = new KCcmBlockCipher(new Dstu7624Engine(128));
- dstu7624ccm.setNb(4);
dstu7624ccm.Init(true, param);
dstu7624ccm.ProcessAadBytes(authText, 0, authText.Length);
@@ -508,7 +507,6 @@ namespace Org.BouncyCastle.Crypto.Tests
+ " got " + Hex.ToHexString(encrypted));
}
- dstu7624ccm.setNb(4);
dstu7624ccm.Init(false, param);
dstu7624ccm.ProcessAadBytes(authText, 0, authText.Length);
@@ -546,7 +544,6 @@ namespace Org.BouncyCastle.Crypto.Tests
dstu7624ccm = new KCcmBlockCipher(new Dstu7624Engine(256));
- dstu7624ccm.setNb(4);
dstu7624ccm.Init(true, param);
dstu7624ccm.ProcessAadBytes(authText, 0, authText.Length);
@@ -570,8 +567,7 @@ namespace Org.BouncyCastle.Crypto.Tests
+ Hex.ToHexString(expectedEncrypted)
+ " got " + Hex.ToHexString(encrypted));
}
-
- dstu7624ccm.setNb(4);
+
dstu7624ccm.Init(false, param);
dstu7624ccm.ProcessAadBytes(authText, 0, authText.Length);
@@ -607,9 +603,8 @@ namespace Org.BouncyCastle.Crypto.Tests
param = new AeadParameters(new KeyParameter(key), 256, iv);
- dstu7624ccm = new KCcmBlockCipher(new Dstu7624Engine(256));
+ dstu7624ccm = new KCcmBlockCipher(new Dstu7624Engine(256), 6);
- dstu7624ccm.setNb(6);
dstu7624ccm.Init(true, param);
dstu7624ccm.ProcessAadBytes(authText, 0, authText.Length);
@@ -634,7 +629,6 @@ namespace Org.BouncyCastle.Crypto.Tests
+ " got " + Hex.ToHexString(encrypted));
}
- dstu7624ccm.setNb(6);
dstu7624ccm.Init(false, param);
dstu7624ccm.ProcessAadBytes(authText, 0, authText.Length);
@@ -670,9 +664,8 @@ namespace Org.BouncyCastle.Crypto.Tests
param = new AeadParameters(new KeyParameter(key), 512, iv);
- dstu7624ccm = new KCcmBlockCipher(new Dstu7624Engine(512));
+ dstu7624ccm = new KCcmBlockCipher(new Dstu7624Engine(512), 8);
- dstu7624ccm.setNb(8);
dstu7624ccm.Init(true, param);
dstu7624ccm.ProcessAadBytes(authText, 0, authText.Length);
@@ -697,7 +690,6 @@ namespace Org.BouncyCastle.Crypto.Tests
+ " got " + Hex.ToHexString(encrypted));
}
- dstu7624ccm.setNb(8);
dstu7624ccm.Init(false, param);
dstu7624ccm.ProcessAadBytes(authText, 0, authText.Length);
|