Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

161 linhas
6.3 KiB

  1. package p503
  2. import (
  3. . "github.com/cloudflare/sidh/internal/isogeny"
  4. )
  5. const (
  6. // SIDH public key byte size
  7. P503_PublicKeySize = 378
  8. // SIDH shared secret byte size.
  9. P503_SharedSecretSize = 126
  10. // Max size of secret key for 2-torsion group, corresponds to 2^e2 - 1
  11. P503_SecretBitLenA = 250
  12. // Size of secret key for 3-torsion group, corresponds to log_2(3^e3) - 1
  13. P503_SecretBitLenB = 252
  14. // Size of a compuatation strategy for 2-torsion group
  15. strategySizeA = 124
  16. // Size of a compuatation strategy for 3-torsion group
  17. strategySizeB = 158
  18. // ceil(503+7/8)
  19. P503_Bytelen = 63
  20. // Number of limbs for a field element
  21. NumWords = 8
  22. )
  23. // The x-coordinate of PA
  24. var P503_affine_PA = Fp2Element{
  25. A: FpElement{
  26. 0xE7EF4AA786D855AF, 0xED5758F03EB34D3B, 0x09AE172535A86AA9, 0x237B9CC07D622723,
  27. 0xE3A284CBA4E7932D, 0x27481D9176C5E63F, 0x6A323FF55C6E71BF, 0x002ECC31A6FB8773,
  28. },
  29. B: FpElement{
  30. 0x64D02E4E90A620B8, 0xDAB8128537D4B9F1, 0x4BADF77B8A228F98, 0x0F5DBDF9D1FB7D1B,
  31. 0xBEC4DB288E1A0DCC, 0xE76A8665E80675DB, 0x6D6F252E12929463, 0x003188BD1463FACC,
  32. },
  33. }
  34. // The x-coordinate of QA
  35. var P503_affine_QA = Fp2Element{
  36. A: FpElement{
  37. 0xB79D41025DE85D56, 0x0B867DA9DF169686, 0x740E5368021C827D, 0x20615D72157BF25C,
  38. 0xFF1590013C9B9F5B, 0xC884DCADE8C16CEA, 0xEBD05E53BF724E01, 0x0032FEF8FDA5748C,
  39. },
  40. B: FpElement{
  41. 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
  42. 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
  43. },
  44. }
  45. // The x-coordinate of RA = PA-QA
  46. var P503_affine_RA = Fp2Element{
  47. A: FpElement{
  48. 0x12E2E849AA0A8006, 0x41CF47008635A1E8, 0x9CD720A70798AED7, 0x42A820B42FCF04CF,
  49. 0x7BF9BAD32AAE88B1, 0xF619127A54090BBE, 0x1CB10D8F56408EAA, 0x001D6B54C3C0EDEB,
  50. },
  51. B: FpElement{
  52. 0x34DB54931CBAAC36, 0x420A18CB8DD5F0C4, 0x32008C1A48C0F44D, 0x3B3BA772B1CFD44D,
  53. 0xA74B058FDAF13515, 0x095FC9CA7EEC17B4, 0x448E829D28F120F8, 0x00261EC3ED16A489,
  54. },
  55. }
  56. // The x-coordinate of PB
  57. var P503_affine_PB = Fp2Element{
  58. A: FpElement{
  59. 0x7EDE37F4FA0BC727, 0xF7F8EC5C8598941C, 0xD15519B516B5F5C8, 0xF6D5AC9B87A36282,
  60. 0x7B19F105B30E952E, 0x13BD8B2025B4EBEE, 0x7B96D27F4EC579A2, 0x00140850CAB7E5DE,
  61. },
  62. B: FpElement{
  63. 0x7764909DAE7B7B2D, 0x578ABB16284911AB, 0x76E2BFD146A6BF4D, 0x4824044B23AA02F0,
  64. 0x1105048912A321F3, 0xB8A2E482CF0F10C1, 0x42FF7D0BE2152085, 0x0018E599C5223352,
  65. },
  66. }
  67. // The x-coordinate of QB
  68. var P503_affine_QB = Fp2Element{
  69. A: FpElement{
  70. 0x4256C520FB388820, 0x744FD7C3BAAF0A13, 0x4B6A2DDDB12CBCB8, 0xE46826E27F427DF8,
  71. 0xFE4A663CD505A61B, 0xD6B3A1BAF025C695, 0x7C3BB62B8FCC00BD, 0x003AFDDE4A35746C,
  72. },
  73. B: FpElement{
  74. 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
  75. 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
  76. },
  77. }
  78. // The x-coordinate of RB = PB - QB
  79. var P503_affine_RB = Fp2Element{
  80. A: FpElement{
  81. 0x75601CD1E6C0DFCB, 0x1A9007239B58F93E, 0xC1F1BE80C62107AC, 0x7F513B898F29FF08,
  82. 0xEA0BEDFF43E1F7B2, 0x2C6D94018CBAE6D0, 0x3A430D31BCD84672, 0x000D26892ECCFE83,
  83. },
  84. B: FpElement{
  85. 0x1119D62AEA3007A1, 0xE3702AA4E04BAE1B, 0x9AB96F7D59F990E7, 0xF58440E8B43319C0,
  86. 0xAF8134BEE1489775, 0xE7F7774E905192AA, 0xF54AE09308E98039, 0x001EF7A041A86112,
  87. },
  88. }
  89. // 2-torsion group computation strategy
  90. var P503_AliceIsogenyStrategy = [strategySizeA]uint32{
  91. 0x3D, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02,
  92. 0x01, 0x01, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01,
  93. 0x01, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01,
  94. 0x01, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01,
  95. 0x1D, 0x10, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01,
  96. 0x01, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01,
  97. 0x0D, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01,
  98. 0x05, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01}
  99. // 3-torsion group computation strategy
  100. var P503_BobIsogenyStrategy = [strategySizeB]uint32{
  101. 0x47, 0x26, 0x15, 0x0D, 0x08, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01,
  102. 0x02, 0x01, 0x01, 0x05, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x09,
  103. 0x05, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x01,
  104. 0x02, 0x01, 0x01, 0x11, 0x09, 0x05, 0x03, 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01,
  105. 0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x08, 0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01,
  106. 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x21, 0x11, 0x09, 0x05, 0x03, 0x02, 0x01, 0x01,
  107. 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x08, 0x04,
  108. 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x10, 0x08,
  109. 0x04, 0x02, 0x01, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x08,
  110. 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x04, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01}
  111. // Used internally by this package
  112. // -------------------------------
  113. var p503 = FpElement{
  114. 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xABFFFFFFFFFFFFFF,
  115. 0x13085BDA2211E7A0, 0x1B9BF6C87B7E7DAF, 0x6045C6BDDA77A4D0, 0x004066F541811E1E,
  116. }
  117. // 2*503
  118. var p503x2 = FpElement{
  119. 0xFFFFFFFFFFFFFFFE, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0x57FFFFFFFFFFFFFF,
  120. 0x2610B7B44423CF41, 0x3737ED90F6FCFB5E, 0xC08B8D7BB4EF49A0, 0x0080CDEA83023C3C,
  121. }
  122. // p503 + 1
  123. var p503p1 = FpElement{
  124. 0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0xAC00000000000000,
  125. 0x13085BDA2211E7A0, 0x1B9BF6C87B7E7DAF, 0x6045C6BDDA77A4D0, 0x004066F541811E1E,
  126. }
  127. // R^2=(2^512)^2 mod p
  128. var p503R2 = FpElement{
  129. 0x5289A0CF641D011F, 0x9B88257189FED2B9, 0xA3B365D58DC8F17A, 0x5BC57AB6EFF168EC,
  130. 0x9E51998BD84D4423, 0xBF8999CBAC3B5695, 0x46E9127BCE14CDB6, 0x003F6CFCE8B81771,
  131. }
  132. // 1*R mod p
  133. var P503_OneFp2 = Fp2Element{
  134. A: FpElement{
  135. 0x00000000000003F9, 0x0000000000000000, 0x0000000000000000, 0xB400000000000000,
  136. 0x63CB1A6EA6DED2B4, 0x51689D8D667EB37D, 0x8ACD77C71AB24142, 0x0026FBAEC60F5953},
  137. }
  138. // 1/2 * R mod p
  139. var P503_HalfFp2 = Fp2Element{
  140. A: FpElement{
  141. 0x00000000000001FC, 0x0000000000000000, 0x0000000000000000, 0xB000000000000000,
  142. 0x3B69BB2464785D2A, 0x36824A2AF0FE9896, 0xF5899F427A94F309, 0x0033B15203C83BB8},
  143. }