Coverage Report

Created: 2024-11-21 07:03

/src/cryptopp/square.h
Line
Count
Source
1
// square.h - originally written and placed in the public domain by Wei Dai
2
3
/// \file square.h
4
/// \brief Classes for the Square block cipher
5
6
#ifndef CRYPTOPP_SQUARE_H
7
#define CRYPTOPP_SQUARE_H
8
9
#include "seckey.h"
10
#include "secblock.h"
11
12
NAMESPACE_BEGIN(CryptoPP)
13
14
/// \brief Square block cipher information
15
/// \since Crypto++ 2.2
16
struct Square_Info : public FixedBlockSize<16>, public FixedKeyLength<16>, FixedRounds<8>
17
{
18
13
  CRYPTOPP_STATIC_CONSTEXPR const char* StaticAlgorithmName() {return "Square";}
19
};
20
21
/// \brief Square block cipher
22
/// \sa <a href="http://www.cryptopp.com/wiki/Square">Square</a>
23
/// \since Crypto++ 2.2
24
class Square : public Square_Info, public BlockCipherDocumentation
25
{
26
  class CRYPTOPP_NO_VTABLE Base : public BlockCipherImpl<Square_Info>
27
  {
28
  public:
29
    void UncheckedSetKey(const byte *userKey, unsigned int length, const NameValuePairs &params);
30
31
  protected:
32
    FixedSizeSecBlock<word32, 4*(ROUNDS+1)> m_roundkeys;
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
  private:
40
    static const byte Se[256];
41
    static const word32 Te[4][256];
42
  };
43
44
  class CRYPTOPP_NO_VTABLE Dec : public Base
45
  {
46
  public:
47
    void ProcessAndXorBlock(const byte *inBlock, const byte *xorBlock, byte *outBlock) const;
48
  private:
49
    static const byte Sd[256];
50
    static const word32 Td[4][256];
51
  };
52
53
public:
54
  typedef BlockCipherFinal<ENCRYPTION, Enc> Encryption;
55
  typedef BlockCipherFinal<DECRYPTION, Dec> Decryption;
56
};
57
58
typedef Square::Encryption SquareEncryption;
59
typedef Square::Decryption SquareDecryption;
60
61
NAMESPACE_END
62
63
#endif