summaryrefslogtreecommitdiff
path: root/plugins/CryptoPP/crypto/src/seal.h
diff options
context:
space:
mode:
authorKirill Volinsky <mataes2007@gmail.com>2012-07-20 16:21:49 +0000
committerKirill Volinsky <mataes2007@gmail.com>2012-07-20 16:21:49 +0000
commitf424a18112032cf61d2871a6b91a5af607c171ae (patch)
tree88fedc4e28941ceecda7026f0b06eba6271f91d5 /plugins/CryptoPP/crypto/src/seal.h
parentbfe1bd0fc087be44c70904aee0fe4276643d206d (diff)
CryptoPP:
changed folder structure git-svn-id: http://svn.miranda-ng.org/main/trunk@1083 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/CryptoPP/crypto/src/seal.h')
-rw-r--r--plugins/CryptoPP/crypto/src/seal.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/plugins/CryptoPP/crypto/src/seal.h b/plugins/CryptoPP/crypto/src/seal.h
new file mode 100644
index 0000000000..c8b7ff4e95
--- /dev/null
+++ b/plugins/CryptoPP/crypto/src/seal.h
@@ -0,0 +1,44 @@
+#ifndef CRYPTOPP_SEAL_H
+#define CRYPTOPP_SEAL_H
+
+#include "strciphr.h"
+
+NAMESPACE_BEGIN(CryptoPP)
+
+//! _
+template <class B = BigEndian>
+struct SEAL_Info : public FixedKeyLength<20, SimpleKeyingInterface::INTERNALLY_GENERATED_IV, 4>
+{
+ static const char *StaticAlgorithmName() {return B::ToEnum() == LITTLE_ENDIAN_ORDER ? "SEAL-3.0-LE" : "SEAL-3.0-BE";}
+};
+
+template <class B = BigEndian>
+class CRYPTOPP_NO_VTABLE SEAL_Policy : public AdditiveCipherConcretePolicy<word32, 256>, public SEAL_Info<B>
+{
+protected:
+ void CipherSetKey(const NameValuePairs &params, const byte *key, size_t length);
+ void OperateKeystream(KeystreamOperation operation, byte *output, const byte *input, size_t iterationCount);
+ void CipherResynchronize(byte *keystreamBuffer, const byte *IV);
+ bool IsRandomAccess() const {return true;}
+ void SeekToIteration(lword iterationCount);
+
+private:
+ FixedSizeSecBlock<word32, 512> m_T;
+ FixedSizeSecBlock<word32, 256> m_S;
+ SecBlock<word32> m_R;
+
+ word32 m_startCount, m_iterationsPerCount;
+ word32 m_outsideCounter, m_insideCounter;
+};
+
+//! <a href="http://www.weidai.com/scan-mirror/cs.html#SEAL-3.0-BE">SEAL</a>
+template <class B = BigEndian>
+struct SEAL : public SEAL_Info<B>, public SymmetricCipherDocumentation
+{
+ typedef SymmetricCipherFinal<ConcretePolicyHolder<SEAL_Policy<B>, AdditiveCipherTemplate<> >, SEAL_Info<B> > Encryption;
+ typedef Encryption Decryption;
+};
+
+NAMESPACE_END
+
+#endif