summaryrefslogtreecommitdiff
path: root/cryptlib.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cryptlib.cpp')
-rw-r--r--cryptlib.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/cryptlib.cpp b/cryptlib.cpp
index e3fe2d5..07dd87c 100644
--- a/cryptlib.cpp
+++ b/cryptlib.cpp
@@ -57,6 +57,28 @@ void SimpleKeyingInterface::ThrowIfInvalidKeyLength(const Algorithm &algorithm,
throw InvalidKeyLength(algorithm.AlgorithmName(), length);
}
+void SimpleKeyingInterface::ThrowIfResynchronizable()
+{
+ if (IsResynchronizable())
+ throw InvalidArgument("SimpleKeyingInterface: this object requires an IV");
+}
+
+void SimpleKeyingInterface::ThrowIfInvalidIV(const byte *iv)
+{
+ if (!iv && !(IVRequirement() == INTERNALLY_GENERATED_IV || IVRequirement() == STRUCTURED_IV || !IsResynchronizable()))
+ throw InvalidArgument("SimpleKeyingInterface: this object cannot use a null IV");
+}
+
+const byte * SimpleKeyingInterface::GetIVAndThrowIfInvalid(const NameValuePairs &params)
+{
+ const byte *iv;
+ if (params.GetValue(Name::IV(), iv))
+ ThrowIfInvalidIV(iv);
+ else
+ ThrowIfResynchronizable();
+ return iv;
+}
+
void BlockTransformation::ProcessAndXorMultipleBlocks(const byte *inBlocks, const byte *xorBlocks, byte *outBlocks, unsigned int numberOfBlocks) const
{
unsigned int blockSize = BlockSize();