diff options
Diffstat (limited to 'cryptlib.cpp')
-rw-r--r-- | cryptlib.cpp | 22 |
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 ¶ms) +{ + 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(); |