/ src / minisketch / src / fields / clmul_1byte.cpp
clmul_1byte.cpp
  1  /**********************************************************************
  2   * Copyright (c) 2018 Pieter Wuille, Greg Maxwell, Gleb Naumenko      *
  3   * Distributed under the MIT software license, see the accompanying   *
  4   * file LICENSE or http://www.opensource.org/licenses/mit-license.php.*
  5   **********************************************************************/
  6  
  7  /* This file was substantially auto-generated by doc/gen_params.sage. */
  8  #include "../fielddefines.h"
  9  
 10  #if defined(ENABLE_FIELD_BYTES_INT_1)
 11  
 12  #include "clmul_common_impl.h"
 13  
 14  #include "../int_utils.h"
 15  #include "../lintrans.h"
 16  #include "../sketch_impl.h"
 17  
 18  #endif
 19  
 20  #include "../sketch.h"
 21  
 22  namespace {
 23  #ifdef ENABLE_FIELD_INT_2
 24  // 2 bit field
 25  typedef RecLinTrans<uint8_t, 2> StatTableTRI2;
 26  constexpr StatTableTRI2 SQR_TABLE_TRI2({0x1, 0x3});
 27  constexpr StatTableTRI2 QRT_TABLE_TRI2({0x2, 0});
 28  typedef FieldTri<uint8_t, 2, 1, StatTableTRI2, &SQR_TABLE_TRI2, &QRT_TABLE_TRI2, &QRT_TABLE_TRI2, &QRT_TABLE_TRI2, &QRT_TABLE_TRI2, &QRT_TABLE_TRI2, IdTrans, &ID_TRANS, &ID_TRANS> FieldTri2;
 29  #endif
 30  
 31  #ifdef ENABLE_FIELD_INT_3
 32  // 3 bit field
 33  typedef RecLinTrans<uint8_t, 3> StatTableTRI3;
 34  constexpr StatTableTRI3 SQR_TABLE_TRI3({0x1, 0x4, 0x6});
 35  constexpr StatTableTRI3 QRT_TABLE_TRI3({0, 0x4, 0x6});
 36  typedef FieldTri<uint8_t, 3, 1, StatTableTRI3, &SQR_TABLE_TRI3, &QRT_TABLE_TRI3, &QRT_TABLE_TRI3, &QRT_TABLE_TRI3, &QRT_TABLE_TRI3, &QRT_TABLE_TRI3, IdTrans, &ID_TRANS, &ID_TRANS> FieldTri3;
 37  #endif
 38  
 39  #ifdef ENABLE_FIELD_INT_4
 40  // 4 bit field
 41  typedef RecLinTrans<uint8_t, 4> StatTableTRI4;
 42  constexpr StatTableTRI4 SQR_TABLE_TRI4({0x1, 0x4, 0x3, 0xc});
 43  constexpr StatTableTRI4 QRT_TABLE_TRI4({0x6, 0xa, 0x8, 0});
 44  typedef FieldTri<uint8_t, 4, 1, StatTableTRI4, &SQR_TABLE_TRI4, &QRT_TABLE_TRI4, &QRT_TABLE_TRI4, &QRT_TABLE_TRI4, &QRT_TABLE_TRI4, &QRT_TABLE_TRI4, IdTrans, &ID_TRANS, &ID_TRANS> FieldTri4;
 45  #endif
 46  
 47  #ifdef ENABLE_FIELD_INT_5
 48  // 5 bit field
 49  typedef RecLinTrans<uint8_t, 5> StatTable5;
 50  constexpr StatTable5 SQR_TABLE_5({0x1, 0x4, 0x10, 0xa, 0xd});
 51  constexpr StatTable5 SQR2_TABLE_5({0x1, 0x10, 0xd, 0xe, 0x1b});
 52  constexpr StatTable5 QRT_TABLE_5({0x14, 0x8, 0xa, 0, 0xe});
 53  typedef Field<uint8_t, 5, 5, StatTable5, &SQR_TABLE_5, &SQR2_TABLE_5, &QRT_TABLE_5, &QRT_TABLE_5, &QRT_TABLE_5, &QRT_TABLE_5, IdTrans, &ID_TRANS, &ID_TRANS> Field5;
 54  typedef FieldTri<uint8_t, 5, 2, RecLinTrans<uint8_t, 5>, &SQR_TABLE_5, &SQR2_TABLE_5, &QRT_TABLE_5, &QRT_TABLE_5, &QRT_TABLE_5, &QRT_TABLE_5, IdTrans, &ID_TRANS, &ID_TRANS> FieldTri5;
 55  #endif
 56  
 57  #ifdef ENABLE_FIELD_INT_6
 58  // 6 bit field
 59  typedef RecLinTrans<uint8_t, 6> StatTableTRI6;
 60  constexpr StatTableTRI6 SQR_TABLE_TRI6({0x1, 0x4, 0x10, 0x3, 0xc, 0x30});
 61  constexpr StatTableTRI6 SQR2_TABLE_TRI6({0x1, 0x10, 0xc, 0x5, 0x13, 0x3c});
 62  constexpr StatTableTRI6 QRT_TABLE_TRI6({0x3a, 0x26, 0x24, 0x14, 0x20, 0});
 63  typedef FieldTri<uint8_t, 6, 1, StatTableTRI6, &SQR_TABLE_TRI6, &SQR2_TABLE_TRI6, &QRT_TABLE_TRI6, &QRT_TABLE_TRI6, &QRT_TABLE_TRI6, &QRT_TABLE_TRI6, IdTrans, &ID_TRANS, &ID_TRANS> FieldTri6;
 64  #endif
 65  
 66  #ifdef ENABLE_FIELD_INT_7
 67  // 7 bit field
 68  typedef RecLinTrans<uint8_t, 4, 3> StatTableTRI7;
 69  constexpr StatTableTRI7 SQR_TABLE_TRI7({0x1, 0x4, 0x10, 0x40, 0x6, 0x18, 0x60});
 70  constexpr StatTableTRI7 SQR2_TABLE_TRI7({0x1, 0x10, 0x6, 0x60, 0x14, 0x46, 0x78});
 71  constexpr StatTableTRI7 QRT_TABLE_TRI7({0, 0x14, 0x16, 0x72, 0x12, 0x40, 0x7a});
 72  typedef FieldTri<uint8_t, 7, 1, StatTableTRI7, &SQR_TABLE_TRI7, &SQR2_TABLE_TRI7, &QRT_TABLE_TRI7, &QRT_TABLE_TRI7, &QRT_TABLE_TRI7, &QRT_TABLE_TRI7, IdTrans, &ID_TRANS, &ID_TRANS> FieldTri7;
 73  #endif
 74  
 75  #ifdef ENABLE_FIELD_INT_8
 76  // 8 bit field
 77  typedef RecLinTrans<uint8_t, 4, 4> StatTable8;
 78  constexpr StatTable8 SQR_TABLE_8({0x1, 0x4, 0x10, 0x40, 0x1b, 0x6c, 0xab, 0x9a});
 79  constexpr StatTable8 SQR2_TABLE_8({0x1, 0x10, 0x1b, 0xab, 0x5e, 0x97, 0xb3, 0xc5});
 80  constexpr StatTable8 QRT_TABLE_8({0xbc, 0x2a, 0x28, 0x86, 0x2c, 0xde, 0x8e, 0});
 81  typedef Field<uint8_t, 8, 27, StatTable8, &SQR_TABLE_8, &SQR2_TABLE_8, &QRT_TABLE_8, &QRT_TABLE_8, &QRT_TABLE_8, &QRT_TABLE_8, IdTrans, &ID_TRANS, &ID_TRANS> Field8;
 82  #endif
 83  }
 84  
 85  Sketch* ConstructClMul1Byte(int bits, int implementation) {
 86      switch (bits) {
 87  #ifdef ENABLE_FIELD_INT_5
 88      case 5: return new SketchImpl<Field5>(implementation, 5);
 89  #endif
 90  #ifdef ENABLE_FIELD_INT_8
 91      case 8: return new SketchImpl<Field8>(implementation, 8);
 92  #endif
 93      }
 94      return nullptr;
 95  }
 96  
 97  Sketch* ConstructClMulTri1Byte(int bits, int implementation) {
 98      switch (bits) {
 99  #ifdef ENABLE_FIELD_INT_2
100      case 2: return new SketchImpl<FieldTri2>(implementation, 2);
101  #endif
102  #ifdef ENABLE_FIELD_INT_3
103      case 3: return new SketchImpl<FieldTri3>(implementation, 3);
104  #endif
105  #ifdef ENABLE_FIELD_INT_4
106      case 4: return new SketchImpl<FieldTri4>(implementation, 4);
107  #endif
108  #ifdef ENABLE_FIELD_INT_5
109      case 5: return new SketchImpl<FieldTri5>(implementation, 5);
110  #endif
111  #ifdef ENABLE_FIELD_INT_6
112      case 6: return new SketchImpl<FieldTri6>(implementation, 6);
113  #endif
114  #ifdef ENABLE_FIELD_INT_7
115      case 7: return new SketchImpl<FieldTri7>(implementation, 7);
116  #endif
117      }
118      return nullptr;
119  }