1 | // serpent.h - written and placed in the public domain by Wei Dai |
---|
2 | |
---|
3 | //! \file serpent.h |
---|
4 | //! \brief Classes for the Serpent block cipher |
---|
5 | |
---|
6 | #ifndef CRYPTOPP_SERPENT_H |
---|
7 | #define CRYPTOPP_SERPENT_H |
---|
8 | |
---|
9 | #include "seckey.h" |
---|
10 | #include "secblock.h" |
---|
11 | |
---|
12 | NAMESPACE_BEGIN(CryptoPP) |
---|
13 | |
---|
14 | //! \class Serpent_Info |
---|
15 | //! \brief Serpent block cipher information |
---|
16 | struct Serpent_Info : public FixedBlockSize<16>, public VariableKeyLength<16, 16, 32, 8>, public FixedRounds<32> |
---|
17 | { |
---|
18 | CRYPTOPP_CONSTEXPR static const char *StaticAlgorithmName() {return "Serpent";} |
---|
19 | }; |
---|
20 | |
---|
21 | //! \class Serpent |
---|
22 | //! \brief Serpent block cipher |
---|
23 | /// \sa <a href="http://www.weidai.com/scan-mirror/cs.html#Serpent">Serpent</a> |
---|
24 | class Serpent : public Serpent_Info, public BlockCipherDocumentation |
---|
25 | { |
---|
26 | class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl<Serpent_Info> |
---|
27 | { |
---|
28 | public: |
---|
29 | void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs ¶ms); |
---|
30 | |
---|
31 | protected: |
---|
32 | FixedSizeSecBlock<word32, 33*4> m_key; |
---|
33 | }; |
---|
34 | |
---|
35 | class CRYPTOPP_NO_VTABLE Enc : public Base |
---|
36 | { |
---|
37 | public: |
---|
38 | void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; |
---|
39 | }; |
---|
40 | |
---|
41 | class CRYPTOPP_NO_VTABLE Dec : public Base |
---|
42 | { |
---|
43 | public: |
---|
44 | void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const; |
---|
45 | }; |
---|
46 | |
---|
47 | public: |
---|
48 | typedef BlockCipherFinal<ENCRYPTION, Enc> Encryption; |
---|
49 | typedef BlockCipherFinal<DECRYPTION, Dec> Decryption; |
---|
50 | }; |
---|
51 | |
---|
52 | typedef Serpent::Encryption SerpentEncryption; |
---|
53 | typedef Serpent::Decryption SerpentDecryption; |
---|
54 | |
---|
55 | NAMESPACE_END |
---|
56 | |
---|
57 | #endif |
---|