kpqc 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/Gemfile +4 -0
  4. data/README.md +9 -6
  5. data/THIRD_PARTY_NOTICES.md +14 -47
  6. data/ext/kpqc/extconf_helper.rb +6 -3
  7. data/ext/kpqc/secure_clear.c +8 -0
  8. data/kpqc.gemspec +4 -5
  9. data/lib/kpqc/aimer.rb +6 -6
  10. data/lib/kpqc/version.rb +1 -2
  11. data/test/kat/aimer128f.rsp +4 -4
  12. data/test/kat/aimer128s.rsp +4 -4
  13. data/test/kat/aimer192f.rsp +4 -4
  14. data/test/kat/aimer192s.rsp +4 -4
  15. data/test/kat/aimer256f.rsp +4 -4
  16. data/test/kat/aimer256s.rsp +4 -4
  17. data/test/kat/haetae2.rsp +1 -1
  18. data/test/kat/haetae3.rsp +1 -1
  19. data/test/kat/haetae5.rsp +1 -1
  20. data/vendor/AIMer/LICENSE +1 -1
  21. data/vendor/AIMer/aim3.c +227 -0
  22. data/vendor/AIMer/aim3.h +63 -0
  23. data/vendor/AIMer/field.h +12 -4
  24. data/vendor/AIMer/field128.c +24 -381
  25. data/vendor/AIMer/field192.c +24 -400
  26. data/vendor/AIMer/field256.c +28 -447
  27. data/vendor/AIMer/field_common.c +98 -0
  28. data/vendor/AIMer/field_internal.h +218 -0
  29. data/vendor/AIMer/params/params-aimer-128f.h +8 -8
  30. data/vendor/AIMer/params/params-aimer-128s.h +8 -8
  31. data/vendor/AIMer/params/params-aimer-192f.h +8 -8
  32. data/vendor/AIMer/params/params-aimer-192s.h +8 -8
  33. data/vendor/AIMer/params/params-aimer-256f.h +8 -8
  34. data/vendor/AIMer/params/params-aimer-256s.h +8 -8
  35. data/vendor/AIMer/params.h +5 -0
  36. data/vendor/AIMer/sign.c +246 -167
  37. data/vendor/AIMer/sign.h +6 -6
  38. data/vendor/AIMer/tree.c +10 -4
  39. data/vendor/AIMer/tree.h +1 -1
  40. data/vendor/HAETAE/include/fixpoint.h +14 -14
  41. data/vendor/HAETAE/include/rans_byte.h +10 -9
  42. data/vendor/HAETAE/src/decompose.c +8 -4
  43. data/vendor/HAETAE/src/encoding.c +5 -5
  44. data/vendor/HAETAE/src/fft.c +1 -1
  45. data/vendor/HAETAE/src/fips202.c +26 -14
  46. data/vendor/HAETAE/src/fixpoint.c +21 -18
  47. data/vendor/HAETAE/src/ntt.c +2 -0
  48. data/vendor/HAETAE/src/packing.c +15 -15
  49. data/vendor/HAETAE/src/poly.c +30 -3
  50. data/vendor/HAETAE/src/polyfix.c +2 -2
  51. data/vendor/HAETAE/src/polymat.c +2 -2
  52. data/vendor/HAETAE/src/polyvec.c +7 -5
  53. data/vendor/HAETAE/src/reduce.c +2 -0
  54. data/vendor/HAETAE/src/sampler.c +231 -47
  55. data/vendor/HAETAE/src/sign.c +11 -10
  56. data/vendor/NTRUplus/NTRU+1152/api.h +27 -8
  57. data/vendor/NTRUplus/NTRU+1152/fips202/fips202.c +12 -269
  58. data/vendor/NTRUplus/NTRU+1152/fips202/fips202.h +4 -113
  59. data/vendor/NTRUplus/NTRU+1152/kem.c +110 -40
  60. data/vendor/NTRUplus/NTRU+1152/ntt.c +50 -54
  61. data/vendor/NTRUplus/NTRU+1152/poly.c +21 -13
  62. data/vendor/NTRUplus/NTRU+1152/poly.h +3 -3
  63. data/vendor/NTRUplus/NTRU+1152/randombytes.h +1 -0
  64. data/vendor/NTRUplus/NTRU+1152/symmetric.c +3 -9
  65. data/vendor/NTRUplus/NTRU+1152/symmetric.h +13 -3
  66. data/vendor/NTRUplus/NTRU+1152/util.h +15 -0
  67. data/vendor/NTRUplus/NTRU+768/api.h +27 -8
  68. data/vendor/NTRUplus/NTRU+768/fips202/fips202.c +12 -269
  69. data/vendor/NTRUplus/NTRU+768/fips202/fips202.h +4 -113
  70. data/vendor/NTRUplus/NTRU+768/kem.c +110 -40
  71. data/vendor/NTRUplus/NTRU+768/ntt.c +50 -54
  72. data/vendor/NTRUplus/NTRU+768/poly.c +23 -13
  73. data/vendor/NTRUplus/NTRU+768/poly.h +3 -3
  74. data/vendor/NTRUplus/NTRU+768/randombytes.h +1 -0
  75. data/vendor/NTRUplus/NTRU+768/symmetric.c +3 -9
  76. data/vendor/NTRUplus/NTRU+768/symmetric.h +13 -3
  77. data/vendor/NTRUplus/NTRU+768/util.h +15 -0
  78. data/vendor/NTRUplus/NTRU+864/api.h +27 -8
  79. data/vendor/NTRUplus/NTRU+864/fips202/fips202.c +12 -269
  80. data/vendor/NTRUplus/NTRU+864/fips202/fips202.h +4 -113
  81. data/vendor/NTRUplus/NTRU+864/kem.c +110 -40
  82. data/vendor/NTRUplus/NTRU+864/ntt.c +24 -28
  83. data/vendor/NTRUplus/NTRU+864/poly.c +26 -12
  84. data/vendor/NTRUplus/NTRU+864/poly.h +3 -3
  85. data/vendor/NTRUplus/NTRU+864/randombytes.h +1 -0
  86. data/vendor/NTRUplus/NTRU+864/symmetric.c +3 -9
  87. data/vendor/NTRUplus/NTRU+864/symmetric.h +13 -3
  88. data/vendor/NTRUplus/NTRU+864/util.h +15 -0
  89. data/vendor/SMAUG-T/src/cbd.c +4 -4
  90. data/vendor/SMAUG-T/src/ciphertext.c +2 -2
  91. data/vendor/SMAUG-T/src/dg.c +2 -2
  92. data/vendor/SMAUG-T/src/hwt.c +4 -4
  93. data/vendor/SMAUG-T/src/indcpa.c +5 -5
  94. data/vendor/SMAUG-T/src/kem.c +9 -7
  95. data/vendor/SMAUG-T/src/key.c +2 -2
  96. data/vendor/SMAUG-T/src/pack.c +8 -8
  97. metadata +17 -42
  98. data/vendor/AIMer/aim2.c +0 -163
  99. data/vendor/AIMer/aim2.h +0 -36
  100. data/vendor/AIMer/aim2_constant.h +0 -74
  101. data/vendor/SOURCES.json +0 -130
data/test/kat/haetae3.rsp CHANGED
@@ -7,4 +7,4 @@ msg = D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8
7
7
  pk = 1C0EE1111B08003F28E65E8B3BDEB037CF8F221DFCDAF5950EDB38D506D85BEF7C6A6F3DC55218D370F4BC4AA02F8608AA8487CF55D5446DEA07F37D8DBED42264054A5C3C21611A2DB5E01020202056D20CDD1E0D348DEAC01646854049B09B5A4F2E61A4417D8901FD411412F925FC0992B15CD43C62B2D96E364299AEA1A1CAEE91C599BA93CEA5BE63DB2ECF51DF63E8B9233226B699EA39A0DF6A5BC4C27BA1892089803402B7B80E5DADEF446454AF1A6BF99CD44043915F5C7350D9A7CBE97ABA20C0F1EA88844A4443975BE8BB0A8F3AFC75C53C7D79CB12D52855DF07003A0622B59278CB24CD212F4D0B029C956CD9F0163A991756FE22B41B2E84C1644A061359DEC2E457778268325425240B859132592B252EC7A0CBB050763864FA2A3FD649087311C670F3A89378688D2CA5DDDDDD55C41020FF5C68067338E2C348EFE295E591810FE4A6603C7632C8A2637D01AE66009B23A4D33B459F7D14502ADCFA8CF2E5610B2A2E2A37DB58FEC2ABA26BEA3F17A1287253C87584106211228DDA711577C03078A82D5CD4670DE0F9F1A6F03D9C410F6B34391D840BC66AE3C270B268197C3CD0D74029747CFFD229709DD66348EB51D923AA3A835E1E76434BB1134F13407B4C394466CD8FBECF6676721F24E99385F179A6A337BB23203E179D4AC21948AF283BBDC977FD775E3FC998E60141428984CBF1A50EA382229A1EB95385F3D79A245FC1FCA50C1F90984B5D4D8211326849FCF43D9C7907886DC38ADD7304F07F25592BC04A680DC5BDB76D1B5B7641C0D4452B8F19BECC95B68F0CB28AC8E058675EE389239CD24A2E07385B59E410336082E5AC1528C0B0AF3042889B75BCB8F7D609D7903CE6C26671A2A378B8621CCA1ED0D310BB4CE939CA875C15180F7EA5A89A72A82590461833EC517F4503136542F0A1DFE1EE80C454BBCA3BBA90A20E4ECFAFA4D63505A636DC9ADB363B9A1F827EA3AB405BDBAEAE5282B29B5526A2132548ACEFC1AAF8E47BCDBC94CD82F5BD1BDB183D7ADA0DD1D3A68F32889AE95B1B0879D02D50E81C8B1ADDE523D3352F0E5DAE3A7A460DE880F0CAFA32BE227972D476152026671DBBC49D8BC093C79B5660CFB007FF20F83D7156D97298487CD27CCD39079FDDAD4109099885F787223E07361CD31928B597C4FA49D5583A057833CAAC9CA8C0563520CF0733BAAE07110AC4F86AF43A961F7FC487CAFC9F13AADE3543580584452B86C4BF56BB9265062460B2FAA120BEABFBFE44FBCE7C013ECF397D0AC3C3A57548417BFE195D48057FF61969EBE8C5E03D3BAAD8836D408C797602A275CFFE0205B48A40761CA78E328BF52381AC3BDF02FA35E396A7F3A6B8F6FF67E8ED519F57E2548F4676392AB3F037082950C20E8A1D6690C5B451B214A088021425299088CCAA28753F3081796AF80147B3485C8319742CE02F537D37610018DBB3322E3C95B268753993F8456AE1A24B87C751D4A60A7FD1D96C4A02A8370F6981EC754DB966EC6DF25AF726DE19394888A10D308C9E55713214BEDB50A87DD84448A5AC8F270913FF1B26FABD157A005FA9F2627CFB272205577E667D04FAD85FB47DB884F264D9D80338E7E5D664AF9E7DCD6A3BDAE7F07B6A299057AFBC2D053EE8E1690314414F111D9411ED3EAB49CC6D85A398DBD20630C6F850E5A82DF95CB73DF4E8B6455CA7E3FE60F946544701981D5137E36BAE6478B24221D590FBBA90490F0C0B7D05A543FE1B186E88930350C42320C0693BA5161792260F4A5D80DFCE9B7287B0F0D574885DC883AB6773D3F4DE140BBB18322A665A89B6533085EBA97A01A1F019E21F57C372137145B31F6A8F1E085603B40057A0167F666012A8793EBF266A6515B490C1A5EBE5FCDCF94A9867BF5D831838CFD8797E8C9D9DA4B70B0025624C7A52CA68A85655CA6B047349A96F68541AF0E933B8D1AFE55DAE0443699B8443F34B46649B826F90C86B0BABA860DF432D0DF11200313096441B2A2BAC4655AC7CC33CCA91CC0967186318F35649E94B8FE08A7108150A3B71EEBA94F7629790CE4D38266C
8
8
  sk = 1C0EE1111B08003F28E65E8B3BDEB037CF8F221DFCDAF5950EDB38D506D85BEF7C6A6F3DC55218D370F4BC4AA02F8608AA8487CF55D5446DEA07F37D8DBED42264054A5C3C21611A2DB5E01020202056D20CDD1E0D348DEAC01646854049B09B5A4F2E61A4417D8901FD411412F925FC0992B15CD43C62B2D96E364299AEA1A1CAEE91C599BA93CEA5BE63DB2ECF51DF63E8B9233226B699EA39A0DF6A5BC4C27BA1892089803402B7B80E5DADEF446454AF1A6BF99CD44043915F5C7350D9A7CBE97ABA20C0F1EA88844A4443975BE8BB0A8F3AFC75C53C7D79CB12D52855DF07003A0622B59278CB24CD212F4D0B029C956CD9F0163A991756FE22B41B2E84C1644A061359DEC2E457778268325425240B859132592B252EC7A0CBB050763864FA2A3FD649087311C670F3A89378688D2CA5DDDDDD55C41020FF5C68067338E2C348EFE295E591810FE4A6603C7632C8A2637D01AE66009B23A4D33B459F7D14502ADCFA8CF2E5610B2A2E2A37DB58FEC2ABA26BEA3F17A1287253C87584106211228DDA711577C03078A82D5CD4670DE0F9F1A6F03D9C410F6B34391D840BC66AE3C270B268197C3CD0D74029747CFFD229709DD66348EB51D923AA3A835E1E76434BB1134F13407B4C394466CD8FBECF6676721F24E99385F179A6A337BB23203E179D4AC21948AF283BBDC977FD775E3FC998E60141428984CBF1A50EA382229A1EB95385F3D79A245FC1FCA50C1F90984B5D4D8211326849FCF43D9C7907886DC38ADD7304F07F25592BC04A680DC5BDB76D1B5B7641C0D4452B8F19BECC95B68F0CB28AC8E058675EE389239CD24A2E07385B59E410336082E5AC1528C0B0AF3042889B75BCB8F7D609D7903CE6C26671A2A378B8621CCA1ED0D310BB4CE939CA875C15180F7EA5A89A72A82590461833EC517F4503136542F0A1DFE1EE80C454BBCA3BBA90A20E4ECFAFA4D63505A636DC9ADB363B9A1F827EA3AB405BDBAEAE5282B29B5526A2132548ACEFC1AAF8E47BCDBC94CD82F5BD1BDB183D7ADA0DD1D3A68F32889AE95B1B0879D02D50E81C8B1ADDE523D3352F0E5DAE3A7A460DE880F0CAFA32BE227972D476152026671DBBC49D8BC093C79B5660CFB007FF20F83D7156D97298487CD27CCD39079FDDAD4109099885F787223E07361CD31928B597C4FA49D5583A057833CAAC9CA8C0563520CF0733BAAE07110AC4F86AF43A961F7FC487CAFC9F13AADE3543580584452B86C4BF56BB9265062460B2FAA120BEABFBFE44FBCE7C013ECF397D0AC3C3A57548417BFE195D48057FF61969EBE8C5E03D3BAAD8836D408C797602A275CFFE0205B48A40761CA78E328BF52381AC3BDF02FA35E396A7F3A6B8F6FF67E8ED519F57E2548F4676392AB3F037082950C20E8A1D6690C5B451B214A088021425299088CCAA28753F3081796AF80147B3485C8319742CE02F537D37610018DBB3322E3C95B268753993F8456AE1A24B87C751D4A60A7FD1D96C4A02A8370F6981EC754DB966EC6DF25AF726DE19394888A10D308C9E55713214BEDB50A87DD84448A5AC8F270913FF1B26FABD157A005FA9F2627CFB272205577E667D04FAD85FB47DB884F264D9D80338E7E5D664AF9E7DCD6A3BDAE7F07B6A299057AFBC2D053EE8E1690314414F111D9411ED3EAB49CC6D85A398DBD20630C6F850E5A82DF95CB73DF4E8B6455CA7E3FE60F946544701981D5137E36BAE6478B24221D590FBBA90490F0C0B7D05A543FE1B186E88930350C42320C0693BA5161792260F4A5D80DFCE9B7287B0F0D574885DC883AB6773D3F4DE140BBB18322A665A89B6533085EBA97A01A1F019E21F57C372137145B31F6A8F1E085603B40057A0167F666012A8793EBF266A6515B490C1A5EBE5FCDCF94A9867BF5D831838CFD8797E8C9D9DA4B70B0025624C7A52CA68A85655CA6B047349A96F68541AF0E933B8D1AFE55DAE0443699B8443F34B46649B826F90C86B0BABA860DF432D0DF11200313096441B2A2BAC4655AC7CC33CCA91CC0967186318F35649E94B8FE08A7108150A3B71EEBA94F7629790CE4D38266C8422142116408A4194421441441681A222958504229615A285A90098A5665446509265654251218A56A988069545221494980A1901680442612A825A80A198089095A8A9A01120410212242699969119428000A11A18866A99405946665581951998AAAA48940586A0AA022410A00400A89188569852100581A9541A0004526856592628A5108895895416A9A80048A6592885A1AA05894256855282109646A9546405542A899909662A48582490A42A090488842265A6261216429522129AA9244A91409A40450AA928A5A152A5482948A214AA955622145200199126AA89A04904829824666A95609A8205A5861129505415594141902AA691954622951555AAA464152468102A99904090149120099810192A0984A49669A650608949A8012969195910189A958409A6A45A59251AA5559492884946049465682146261294D19648D8C04C48884598A069C8C24591224593B24DA1C42C49940012354D9A362588422D0CB4888A92214A24648AB249E1124008A5718A12295B2409E4142111A151E4242C4B3285130920C422209A900852026E8A346A9224444C902D88266593A44988308D13396C0A133153C08993A4719BB680C834649BB84C13442D111164919249128331C3942489A4615B346502282A9B282998246D52122C1AB4245C164954A429CAB24C99B22563C450D9B2204A306D89942DD0A2289A126959162DD01249CBA248D2366D532661CA3481C222494C42654122669AA425521249D318644B32291B91645226455B066AA2184191162DDA1449CCC8690A13699294418AA669932261D2A065A1942C98B64959B48492406C8A040514442913C46DC9A46D394D1695059DFF40AE256C5D5EDABFB69F5F40F37A588F50532CA408A8168AB1
9
9
  siglen = 2349
10
- sig = 201B53172201020BC00702254907400900D23342E00D210158592888A744230C8EB29C626D3CB724FB770F2BAE254AB21EF6B8DE6ACA08327F56C13299F4F4789A3ED9DF1FD9385B544BACC7AE19BAF5CBBDC1E4A93CCBA61D528362E8DD312E98AA81A113FCC88A83908044847CDD7C0FC6195763652EF1AEF234929EC40949B2FC0DC729F496C732F7BB903BDE7E99307C3DB8F0CF23D8B5B96BFEF4FD5D2554BC063268FC6693AA92BC438232A2B0154BE001EEA624BA820555A4CF344A1848B5F5F982BC055A28937343C14FD79AA8DD35C8056D33F8329CDEF1C24E9EE3AF54BA41CCFDF167D83668A422AA985976D1E9A2ECD152A1B2CEF808A8867ED2656990701AFBF0CBD9F74B8150E0A4550BBE9CFB109201A99E327CD4C48565F333F4A71ADA0E693CC156DB228ADAEA72D1DE7461306F5246DE5A5DC7362DEC3A98353EDB348D41B6814ACCD8EC7855AE317E4ECB3694A811A9E0257824BE1BBD47B67B28F10293F71836C64F0CA4D1A8C2629282605A13EA2F77C741AA154D69479507539EE2C5109EB4DA3675408B583EF4C7C4509FB74DC8C7E36DB2864CD1FD8AE3D811E90E5EBFF0A10E01130EA3F459F0D630DA72157246E96B8495E8642A0843F549F1079175724783DC06B0378D31D1C0EDE1CC89A461832778872EC25617DAC99116470032DDAD90F8AF0AD53068AAAB4B5CE6EC2794CED25047554B4E7A43B5DA45AE498A1D1BCED6476E323E66EAC2E8716F2D89EF223ACE8D17B73294E94D89DF1903598F28A1ACA2790ACE555193710CF80503608AF2631115AF3BAE78F6EAF71555F66F95893CE2E08CCC084ABB3F285D951E4C72C2F866B8B597DF7939E9656F7C925DC896C076C765F9C4A25359A8FF08F6E431D080C1CBC7E0C0884E98A88DEED99F747FAF06BFA27495D43ACE365B7CDB99AF58AC434F1E78A0948153AAC0DFEFBAC4D50094DDBF48312378F9A227F1DB51600334F0C558DA042B1F5C981902BFD489A2D4FE64BC41F5DD0F5AE2D4B47E1BDAE1C67BBF5654C0B2BDFB9EE087595C344CB85CD50C83364B401293E7D09060AE20AC324D04D8868CC85DD9F8357E7B5E7455DA8A9B5E436DBCA1DA869098B87EC09113EC610ECA45BC033B2564882F10BE7C6660931DE1C13963722D6D029958DA7B10B49AF1FAE28C3CD312DD950BB663626A0EDB234A04C5D6350774B5F4948783AEA72307B2F737B86A0772B9427299F6161BD0F9B9076E237B15B3930B53F915658493E1016715BE50FA68E7232CFA45C892D7A9A0E2E6F714BFF39B7E1302A34205C3B5571DCB99F176EB131F7C25417255D41AAFC5E692A2D49192F35021EC265360104417BE3EB97360CC0E00ECE099AB378D1022F48449DD1B2DFF7F4CE01CABA2F9AAADC986A56542559E83CBF984CB71FAE5E8106070B5A8EA289438F519EBBE392BF46918A1C0D455FB2F07FC4FE800682500BA6592A8F1AEACAE2992A82E16D7D2E6D698790FF375B86CB6041A6B7F07D5BAAF76725F959C04952C38574C794B6CB9E528CC2E8C757996AFC9E9884106A7A795168D52E547F4781E3906A049D74E2E2775D09BD3A859C0ADFD833C10AA24E071DD0D13BBCF2EA6A5A131376FEA9BD90BCA51DE9E0D70166FB17D757214C27254F48E20BD8A429601442DF6F834B1F65669AF673DACAA67E3EBFA247397D389E9AEE821199D1C25635DC7D5C0B87C8B1870E9BBD61BEA44CB6E97329BF34911BEE500E47D4006D9881BA00819E7AA897CEA016EA507C3859403B395C8DAE2034AD7B58630A5A5DF9AAC5F4C96B5A7C818FB21E33B305CAAA9E6C59D7F2482DB825468CA77631F3C950B5EEB18DCDF1DB6FBF3E9504049CBFF6E8D26CC69E319A9AE674992C4D47540922B889C0B3B252CB37F1A402CFF6CED36404589E33AE0998DDC04CB4749919A2DDE9E8AD6CC0B28C6CCE5860C2CD8F96FD1F0A8D247BB50D3A88443E62FDB0C9B7908753F665877572F71C344315766609054EF95F17EE1ED79CF642F19A35CC32EE2C50FD335F631A7E89167DB3C4FA9FCC71360C7AD7A1BE85A6D5377BEADCDD69D3DB00B070F9FD13654FC0A88C6377F7FFC9A8832CCC2D28DD46EAB693170D7C7D85C62F1F033B0F740DF4DAC356EF383C71DD32EC161D588C2D3C5DBFE1596084A5DAD0DF56DB2894AB7499E2F2235BF5A6F6EF9B5996861B10888BBD3BDC531C38889BD179A0FE2D0D1BD675CD7B5F7A8D29556C792C5C0624731E0982F958D2C2ADF05FAF9247DBF27EA86CEFBAB8CDF8FB0D425479376F3E9CF971D3DBA6179F4DAC622D5AD51C94D1EB907BF9825AC1A6555A75BD128D58D242F78CCBB4DBCA57D2326BCAA00C7E5F9D2D62FBFA9EB64C71EFDCBAF06E7509499A2DFCFAE6E9CB421047449B6627EC0C0A524DFC3125C7D81FB5E900DD7D799A49151B259CB9F8818CBB14A629A810E75D2ECFEEAC75799C32174887BC7658F4A2694EEB29C1D1639CCC90F86800BD3138C704865A728D5090A131DD96A8065B645925020D16CD3DBF5CAD8A5C8F40792985F625252EDF201460D3C45F4B3D6B7CBB9EF4F40A6D7D433E41B0DC50EA2A5363E1945C01065259526F54CF6356D3C9C1AD36E30E2876DC1B66AD57184302AB3D52421A0D4F817E7346CB0A17DFD171F25A19949EF499214FD3E4836433FE6E76C064E6B907F5D35D4126469F78D71C80590D824FAA4947940BA7F19A3339B1BD5F59F306F093293E1EAE70C0130009EBF78F80EFC8F9C942F943B49D27DE3F9B41C5600C53CFCB99B6BCE5C82159A0FFB729339B071C7E4AE92424E83315725693B427718397F470F0E2BB4FEDB58EE9CF834CC62A8175CF34417E00C03C55EECDD70F223CFE5D156DF85F4DB4977753237EEECFA3A177AA35EED4D5214338982E068693F3B64AEB6AE53FBE6ACB7B1B3A95F657BF86248112E61C66F3719E19EFF6D7D2A90ADEC7F97D8442671C51B2A14769F0D20440A72D28EB883CF0E328F96BFFAC6CFB24E5E2D544A8BC4BAE3566F5047AE7E6ECD2CA3CBB9BDDDA51C678F74035208F17B2787CDA8FDEA13F6F981AF9A811CA31443FCD9FC314B1A89F72FCE8EE5D7AFA08C572627A1D8FB907CB33906E6334BA69ED8F3B3F02BC0A5476B2123A5902DE403363F2AB90F5281873C3B78F1522A5F890E8582DDAFAF71A2846905F0EA78595AA49AECD0BE3B1B51739608F992B80D19BEC172D23B01DC44DC3ACE00D6294D56D27FAB9527A053144C2EA221BCDE212B9BBEC6085E9E8AF5DD2AC093AEA6960B1E9A067C295BA1FB5B4E02138966DA6407AC87C784000000
10
+ sig = DE0030D97002000592400444C481A2E45E0521240452E04888A875401543A032F76DFBA9E2FF2FAFF0302C63AE36F1EAC41196790E2C54CFADCDC5442F46637AA5B9F0CC883B44FCD2B158E5BB48CE54347A8A3A6FF2B15FE891CFAE0172E53AB40BB2DB13001FA6737CC2500A8AA8455839E959068E5FD1EE41D32CB97C038E47A7107C465B81C580F9E1F0E8402E284F5538B1FBCD1A4CA4DFABD250EA13033AE44D60974D49775A2D3CA4C48D00041AAAAE9BF06F5D4FB6ACF3BDDDE688DCFBC952EEDA56505102966B6A9DDDE1547C0885CEE6561264BD87D7AE8DDFFC0487ECF4DDB2E0EC615F5D2F928EEF904D9A7EF3601CDC19A47934F33F170527B515D5A22B0D5B13D91A0AAFCFCD8AF8F189F2C367D5DE20F38AE23D0FE73633554AFD04FAB606CB3E30CC67F2057366FA3F036C5ECAEB4EA5F914C067900265403CF6812E11D57BB2AFBE66E1CF802DDDABE1833FF0C58452705D4924319D2356D31266E930D9024208B2E2314024434AB1D4B36119F1443B1514BCC4F126007EC1A5CAA3BD82B3D42E6A9B3DB0BB7ED43AD10FE0BB380428658CFE3F56FC0B358874A3146DC1A0D64EBC5A93C31AA0C92920FA019D6E62E6EAB11C5037F459F360645F9E9D5016D0F512B3465254738CCAB4FA4DD9C8600200F5D779A90FCBED4CC13E24EF2C64FAD3EF14ACEE3A5596951B763665D8F2C99772E848D51F3B710628F6BBB275FEAB0827E5C25FE744209AB97181DADBF4C08C1E6981A29745C56B83957CFAA7B01BB9387ACD65DCE5BCD6977C75B5C91E6D9E847167F14E94DE26C5FC9E997132C6FB3B021B124A86616122DB645B59A508B6478F4FAE464743DBAF19334DC1E8F53F614205A74E7FCFB12206218DA90154A5F00695AA4DEBE2C4C7AEC3C13542D70EEFDD6211E5E0A8DC1FCDFEB0FB4768D19F743C4F86E23E15E7B4ACD8F28264213301B4EB2BB1AA126412CCE37966453D0F7B0D5BC3743B386CD4CC320BBA23B779E6D7CEA5A1D55BEFC6BF23B5DEADAD92699582D77DA2CD905017A6B4FFDB7627328162555CE70BC902BB0BD6D92C4ACC56BE963FF66CB54352C2FD892E352AE2DCF5E0FFA33C2522E0B223A80145070120427EF0793B7110DD2D7974EACDF20B16433CDEA6C048CF0A4CF14B29F73650FAF7ED96D9A2C391B08D29A50B37AAFFDF6D16678ED6887162924E62DA7AD3C57B46F27CF1D441BD7CCD5931A906B3BA2E52D918C9ED1E4964A99955D8152CB2F4E16AACB1013D81DC4408C38B89F1C5DF3D3C7CBE34591C9AC390EF149C2A1E9465754D5A0B0A14AC1E11D91B49F17888140A032C6AEC15ABB65DFFA75B2328ABD47F2FFF209D852F9B3AB95F814B22A7F035E5EBB0350D8FE5D8CB85A4574C9FCAC5D365983FA420369EC3CC08DBDE5863A83692E594A66E5B60DDCAEB855071D9A69DFD924EB39265366557291996540E70A747C787E059EFD6D65CC4EE627109FB8957A791A4D51AE5A45E40E6DFA767ECCEA17B755390A2C1A2918B6BCCBA66D6627713329C98891ECF4EF2AB72FA6EACAC10E5515B1CA265E1F48B70D9F725CF1B5F60FF9B1FAC0C76B2C31849F408CBE5B18A5EC779EDEEEB1FA7E907667666512EB9934954BF86086F3215169B9FD27A38F18CB779648641FD8A01C3F31E425A7F8C281FA061953921AD080ABA22DD54C760451329AB0BF9CAF4FADC2D9E54DE3A51FF3F69CDC02ED9CE92FFDEB7CBB9B60BABEBEEA133CED23F37DACB829029624B65501362F7F1F48D63DD3323EF8DF74FA5BB59DFDFC2E0C12F55BEA190ECCC2B90975DDE8656307DB88A57A7390E95102EFAA2CCB6C28A1254E8BC6D95E1A8689E5EA9F5516D2E986B6E438C0C00E6C00FD7CBEA06138DFBAE27E13E6E4A049569E7FC3143864FBEEF85D7AF21341EADE42E02A8004D55F37032689D6DA5791DEBB00B64D912CEEBC57877E3BCA3819C73783CDDAF68707942CD7029E1B154BCCAEA0488B6399E8D4A9DDA7C35C3BDAD02F4F206702E7946A19D86C57FEBCFE233018892AD71BB7F66347BC267C1A56D35AC20064294D986717DCFCA45773AC3BA1FE444A9460E7C31B84158F065C91E21E53754460CC2338E7EC1D445E2104AF759BF487BB3858DEE3F25819AB357A24996373627FB14785190407A9893700075EEF1A6FC869743482419C63D23199E4DCB135484708AD601A8C349B23043F68885193FCD006C58659345E6E2E611F5943F688D1781B84E68AC06BE7E49FB498096C042698C9384740537083BF27FB7617976F62A4BA2B7B6603737985DA3DCC27E1C4BA9385EC804A8E211BCF8200B72657B7E07A18953ED3602E7ECF04D0550B83EC05BF10924B1712AE44CEC9FB706B95E13453B422398AB8575319404445B6438CFCD479129AEC0A6C8B652DED5C44B8FBFEB54C53ED1F0EAD41C9487D2207A0B49AA249F81C004CEE6C7658503F52F45C5B6E76547E0CDD02E7C411E7BB63A667F02A52518E114EB513038FD8C958CB72A5EFB1AF272C0791FD43AD07080AD9D1DD813071DAC141DDF3445BCCBCF9D6E75826930AC82D52F6684E1FADBDBAE706D380A8FF4F1CB97B56C4336874121133EFDD8404C6CCDE539FF89872A2699BC7A1C20E5FABEDEA25160B0DE0D7AA9C45CBE7EDF081E0DB23D4F86C68745CAE03DF73CC21D950761BF8F9634F348540E03B690CA49264CE701F49973A60E4649E8E6DDF67A8FC82C2A19F1B8B0ECE376EC953A03CEF878C9B753D91D6458C6CEBB83C4D0942D2C7CFAFC90418AD663A542BC3DBC0E5ECB97A080853FD4EA3EE968D3DDB5E1A5A5A42548EF194E661A71E917212BA1EC3DA39CA9B92B3B382E174884EECB4C487CF27D116AE453F45C9E611484F9C422C1BE9C9943ABA75E0189E984C70D4B55EA4969646E41E5F3A294E08FAA45206EDF2EE850C0798BEF30C14F3116FF4E8ADC2CEC6A6E67FFB716F1A8F92602EDC7D18225E25D32BAE10E120988A22B096F683583FC43D7B73526AF187243DC7D8F1B76031379EC986A2B506F2AA1A5C9E4451B5D312F13523B9877AAE103F4D604EF2D38A63CBF99FDB4A1043EC55AF68CE2DDF63D47FAD18C0985ED4EAE37BF84D70F25949FFD7A802019AC711DFB64ACB15E59E81194440119ED6A0CCF21DDA14E3FCDF215A0129F5EB0B84CE4C792F2BEA788106FDCB64894FE31B374FB13B7AE09CFF54D3CAC20752CC17EC57D7B2BCC6DAE6F7524957D014D01CB78B22A44838E302B68BA8C61EED4B59002A3D841437925D65ADC0653E503CE8D9083D88489A97C0108830C9D57F578F4B100000000000000
data/test/kat/haetae5.rsp CHANGED
@@ -7,4 +7,4 @@ msg = D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8
7
7
  pk = 1C0EE1111B08003F28E65E8B3BDEB037CF8F221DFCDAF5950EDB38D506D85BEF441318223384A7173AA4087948505C2DE2C93460AA052493B8DF3281754A12A8206EDFE19CC8AF3E35DA0DFBE72F8D4D58A8198339D421384739E5F7D589D40F460A464AA5C56EF2C50622C7872C79F59B0B54CC5799A7E897A0686ED007B03BE788A81CB8775805C4B158924917E5AFC69A4B5D6948653EB7F56A2F8F07499704D4E7599EC342D3D27E41E15E3A135F4F7D0C3385BAEE17762ADFD41E7176DB52D395EF81761E983BCD0EDA2B4B1004BCE71342F8D6CC7A4DDF6F19652C79A7A5AC1CEEFC233275A585C70E4FC622C70DDD43C6832EAD59D026098CD73B00C90D315C5A13072F434239F598A87A269977C30F77B9EDBBAD8498E9A4744E41CFAB9586CC0ADFB2769BAE66B4C1A5A1CC10CF3DBFBD6FACDEF2C430AACFE4D7CE8379F3875E4E9061BF4E2A95EF8BCF284ED3162465383FD1DCC6200E7449C9705BD869978D1796022D99ECD897FA639D8B19503A3723143F2DCA672F5B416D0CB72672F05E43063E773270A70C515EEDD36B41FA8A121B97988F0FAD15D6550FFF34D2677EDCB1D146F7B54F6C30AA0D00D0E3FA54B51274FE92A7D3F5A55B859625EAB8980AAF43A3E675731501A45D028E3C82369ECDC565127085ECC00E6EFF241A08A8510B35D1CE750323E641B7F2B1CA52DED4998CCC53743966A0A62D57898D87AA10CCB73B7DBE62BA1A65CCC66F41A81D2FCF067633C1F98A036CBF0BBC5958C79CC0391C2031BB5590B974E1834D9CE673E17E9506C49A1C0EA1BCD4E59CAE42DA46CC95D3A98C76163EDAC79D46A5CC649412FB5D435A30DD148C1AA3F04FFC0A3B9BAAE450D81B893AA72853521AC538142D521EC171295537944BDC54095474D577596310981B2A192EABECF3AD144FD6FB918A79342B66E5A49C7EE69D3E963C1E2BAB1E02801FE3078E09D683B9539332C06BCA9731CEF3AA4952562F993C32C849A8C04229C5168EF9310118F82AF8ECE2891D1045EF2752FD27ACF733B5BEB96B8DB71E92F7A18B0F5AAAD5C4F3461C0C27619A134C0025719A7FB3608AC5F5D43B8C9F64DF7336E6827351839CD4F4BCC7EF36EECE34F18A64398288A6D2C9C29F35107D3549DF587102EB0BC1CA34B7BCDD7AC6D485E60F2949E7BBF6EB591DA2ED0DA305585A905E428A4333E767DF1C95A269677268BE9A166CD7CF8A3837BB5B1A4A303C4C483CE65703AE6CD56F862201040BD01177CBEB12EDAB1E5056F492BB34590315F084DDE5CB39767A572D2D7B92AD5F069761195CD955FD1B27C75AE08D995E8FF82A8EB5B87E739F848E1D6A4012FCC4C7171E350070730AA8D28E22ADC34570B35D512ECE7CC0B73F36E492D0941C63EC8D04C8530E5EAA794A7584564ED5ADF0C50F2C808DF2572E7F3B5B9F292D2EF446E0CA4C03456954D9DD1F441867C6AD14FA194F3F60B6D18EC6D97BE922650E7CD97F655FEC1B4335553E71EF9C0DA9A3925E67A2E49C482CD5F38EB1DA67C8A844426164BEF43D3BC83C26B282BFFCDD16462FA8CEA66696E73898174DB27C0FB0CAA0726CD6AE44D1812986B683725F890DC909002B4EE0ACE4299DC93C38094FA25601323968CFA7E0C962B91BF40907B43ADFBA5C57B172EDC826BD4AA68D3BA70F47F46055E92F45E177A309523DA7543C50F1E08734FCC34BB2789F92B36274E3692415E734A03FECB7C6D9482D9EEB24236ACD1C0AADA89625A5DC1F2939F8B5A91518CBF4AB1409AC26F056ACE78326F789065683DC18F440761352CEBCA01CE9F1A91C4D2FD591D61A2E4F965649B33582F94E11A68B483860EC61B7CF0FC4A12AD369837FD3E563123BFF05F510F7EA6018134E391B5A92C0D0E5F1F865219617918F0EFE82B05A2EDC245A97E7E26271707737B0A06A40559C2EBB1FF7BDA13B1DAB4D53A8366F8FC087CBA0EE60A828308D149E9291D08469E76CCA0EB70CED5DB426D0F3A3189BF50A0C8BC59E0C650813964C0BDC4487EC703BE390047DB292FBE32812CA2F205A089BAA023B838DB3A5E47DF0B5D1D6C7CB56B4C1D3812599A6B8F42C8031B7CA202A1A75CA9941EE9494D56079B6C277F7B2BD5522E180794A68A72ADA2F0D73BD8936725C425BD1779316B30118AF432FCD1ED1D217ED4144D2835D42B529E2DC2AFA54BB7BD29A1AEDE819FC8F6034C07304E8ED43855A33759A398479D5788B7649CE5B119745E348B08620675437F1F83A3F7A92D86D4FE216DADF7843A98BC73B329C4428D5BA933BA6544F8FF1C869A79758CE86509794D0BEF5E966C5D76DF9BB744DAB2F007CDA8233BF62362768464860F69E23434FA623C4A341AE8946EE03E7DF5D83073AA295BCAC4C89892517AB45B788BCDE7BDC50CA592B206BD7F2A861EB455AFEB3B4D239478814CAE6CAEEFF97DF19DADBB80449928298E0D06A9A59F8091BAA0E590625A2D18497F08FF0E01FBF38EB2971644A28B86D2088D6C594E64B975871622E13FAE60C8F3C8D77DDCE7C35B9559F21221E168B6738F17A3AC7B210AA639C3A7E6C8C9ACBF3352DBDC491E62190F714BEF9AFF69013919C83E60F473F382696B2D1C60CE056073A1770767CB7A1AB564E9ABDD79C556BD88900FD59EE69BB2956F1BD9882179528855CBC2B1A77B8D2A40BF7BEA771A8A217B31E159716AB8C683817EF7285CABB0FD02A79511E98F68D359B78878EAEA838A7A7A7148E0993258B681B52AF247316E10B27182B48FA9AF59F04878E9BD3BEE9AC859D5E402F0CD5BA10B0CC9EE0B2D25C75266EBCBF6579D9B4B3715EDA2F8A5F15757D899114E09E1E1C4334E5E2B64B47CC7306D3BB5D93062903E173502D5FB8CB3CB62C1D722E1807E025054461B55D99D3ED3899439B9F3856DBA9835402A06F097ADDADA8C5EB
8
8
  sk = 1C0EE1111B08003F28E65E8B3BDEB037CF8F221DFCDAF5950EDB38D506D85BEF441318223384A7173AA4087948505C2DE2C93460AA052493B8DF3281754A12A8206EDFE19CC8AF3E35DA0DFBE72F8D4D58A8198339D421384739E5F7D589D40F460A464AA5C56EF2C50622C7872C79F59B0B54CC5799A7E897A0686ED007B03BE788A81CB8775805C4B158924917E5AFC69A4B5D6948653EB7F56A2F8F07499704D4E7599EC342D3D27E41E15E3A135F4F7D0C3385BAEE17762ADFD41E7176DB52D395EF81761E983BCD0EDA2B4B1004BCE71342F8D6CC7A4DDF6F19652C79A7A5AC1CEEFC233275A585C70E4FC622C70DDD43C6832EAD59D026098CD73B00C90D315C5A13072F434239F598A87A269977C30F77B9EDBBAD8498E9A4744E41CFAB9586CC0ADFB2769BAE66B4C1A5A1CC10CF3DBFBD6FACDEF2C430AACFE4D7CE8379F3875E4E9061BF4E2A95EF8BCF284ED3162465383FD1DCC6200E7449C9705BD869978D1796022D99ECD897FA639D8B19503A3723143F2DCA672F5B416D0CB72672F05E43063E773270A70C515EEDD36B41FA8A121B97988F0FAD15D6550FFF34D2677EDCB1D146F7B54F6C30AA0D00D0E3FA54B51274FE92A7D3F5A55B859625EAB8980AAF43A3E675731501A45D028E3C82369ECDC565127085ECC00E6EFF241A08A8510B35D1CE750323E641B7F2B1CA52DED4998CCC53743966A0A62D57898D87AA10CCB73B7DBE62BA1A65CCC66F41A81D2FCF067633C1F98A036CBF0BBC5958C79CC0391C2031BB5590B974E1834D9CE673E17E9506C49A1C0EA1BCD4E59CAE42DA46CC95D3A98C76163EDAC79D46A5CC649412FB5D435A30DD148C1AA3F04FFC0A3B9BAAE450D81B893AA72853521AC538142D521EC171295537944BDC54095474D577596310981B2A192EABECF3AD144FD6FB918A79342B66E5A49C7EE69D3E963C1E2BAB1E02801FE3078E09D683B9539332C06BCA9731CEF3AA4952562F993C32C849A8C04229C5168EF9310118F82AF8ECE2891D1045EF2752FD27ACF733B5BEB96B8DB71E92F7A18B0F5AAAD5C4F3461C0C27619A134C0025719A7FB3608AC5F5D43B8C9F64DF7336E6827351839CD4F4BCC7EF36EECE34F18A64398288A6D2C9C29F35107D3549DF587102EB0BC1CA34B7BCDD7AC6D485E60F2949E7BBF6EB591DA2ED0DA305585A905E428A4333E767DF1C95A269677268BE9A166CD7CF8A3837BB5B1A4A303C4C483CE65703AE6CD56F862201040BD01177CBEB12EDAB1E5056F492BB34590315F084DDE5CB39767A572D2D7B92AD5F069761195CD955FD1B27C75AE08D995E8FF82A8EB5B87E739F848E1D6A4012FCC4C7171E350070730AA8D28E22ADC34570B35D512ECE7CC0B73F36E492D0941C63EC8D04C8530E5EAA794A7584564ED5ADF0C50F2C808DF2572E7F3B5B9F292D2EF446E0CA4C03456954D9DD1F441867C6AD14FA194F3F60B6D18EC6D97BE922650E7CD97F655FEC1B4335553E71EF9C0DA9A3925E67A2E49C482CD5F38EB1DA67C8A844426164BEF43D3BC83C26B282BFFCDD16462FA8CEA66696E73898174DB27C0FB0CAA0726CD6AE44D1812986B683725F890DC909002B4EE0ACE4299DC93C38094FA25601323968CFA7E0C962B91BF40907B43ADFBA5C57B172EDC826BD4AA68D3BA70F47F46055E92F45E177A309523DA7543C50F1E08734FCC34BB2789F92B36274E3692415E734A03FECB7C6D9482D9EEB24236ACD1C0AADA89625A5DC1F2939F8B5A91518CBF4AB1409AC26F056ACE78326F789065683DC18F440761352CEBCA01CE9F1A91C4D2FD591D61A2E4F965649B33582F94E11A68B483860EC61B7CF0FC4A12AD369837FD3E563123BFF05F510F7EA6018134E391B5A92C0D0E5F1F865219617918F0EFE82B05A2EDC245A97E7E26271707737B0A06A40559C2EBB1FF7BDA13B1DAB4D53A8366F8FC087CBA0EE60A828308D149E9291D08469E76CCA0EB70CED5DB426D0F3A3189BF50A0C8BC59E0C650813964C0BDC4487EC703BE390047DB292FBE32812CA2F205A089BAA023B838DB3A5E47DF0B5D1D6C7CB56B4C1D3812599A6B8F42C8031B7CA202A1A75CA9941EE9494D56079B6C277F7B2BD5522E180794A68A72ADA2F0D73BD8936725C425BD1779316B30118AF432FCD1ED1D217ED4144D2835D42B529E2DC2AFA54BB7BD29A1AEDE819FC8F6034C07304E8ED43855A33759A398479D5788B7649CE5B119745E348B08620675437F1F83A3F7A92D86D4FE216DADF7843A98BC73B329C4428D5BA933BA6544F8FF1C869A79758CE86509794D0BEF5E966C5D76DF9BB744DAB2F007CDA8233BF62362768464860F69E23434FA623C4A341AE8946EE03E7DF5D83073AA295BCAC4C89892517AB45B788BCDE7BDC50CA592B206BD7F2A861EB455AFEB3B4D239478814CAE6CAEEFF97DF19DADBB80449928298E0D06A9A59F8091BAA0E590625A2D18497F08FF0E01FBF38EB2971644A28B86D2088D6C594E64B975871622E13FAE60C8F3C8D77DDCE7C35B9559F21221E168B6738F17A3AC7B210AA639C3A7E6C8C9ACBF3352DBDC491E62190F714BEF9AFF69013919C83E60F473F382696B2D1C60CE056073A1770767CB7A1AB564E9ABDD79C556BD88900FD59EE69BB2956F1BD9882179528855CBC2B1A77B8D2A40BF7BEA771A8A217B31E159716AB8C683817EF7285CABB0FD02A79511E98F68D359B78878EAEA838A7A7A7148E0993258B681B52AF247316E10B27182B48FA9AF59F04878E9BD3BEE9AC859D5E402F0CD5BA10B0CC9EE0B2D25C75266EBCBF6579D9B4B3715EDA2F8A5F15757D899114E09E1E1C4334E5E2B64B47CC7306D3BB5D93062903E173502D5FB8CB3CB62C1D722E1807E025054461B55D99D3ED3899439B9F3856DBA9835402A06F097ADDADA8C5EB08A0AA15A4209810529915890A66691219852829A921124896545114085A408544A0A4086022A90105856806166225A5184A582866519A958084925602A0A9A161926222141A9A982001504566151068AAA4A59192545984222614160008A615A1A9594620661082806880912A22980A8042552586A64991AA40681490A64591645A565400244615202A9119A06A84A85A629406221A04955119169544285A1091A02611586489948A92A96069480A694846A656026456104991468A8221208A94159818A68A949080861295816820541A98116650641A41080918918602A952999552199226952846A8019AA04910966401115249AA6256A215016048A012A2090012904846149A80886AA26024508541AA28699654542268A569825A5551965262A446A4645844296559A94209A64A66141822866965040458885054925140950A648245A5994A0A985A51802A4A85A0606A22A9698169A90A284668152A4028121802942451A1640A89A40A61A116AA5195A8210461104626A01A08922828A0984809299102908151A4850900261A461551508A010549861689090468A1522198590062084656AA959180180651449058A418464A9829005515610815181AA42A2A2121258511A42469552AA0214959404251A4A6A9826094551989A145498A205520694AA2496982541A65400095594A19826916214905686A01046A0951289A1225951849955625525011092A945A20450201A25A62190A9164608181614206A286629640241949420191089A81456A459AA45408A9A54A5A558058689006AA1211AAA1146089940618508A554A651A5181892AA4495561A890A4928024A0A66188A2AA19A024224286961269286A08A56426A9980229082A608A6A9A08394D1695059DFF40AE256C5D5EDABFB69F5F40F37A588F50532CA408A8168AB1
9
9
  siglen = 2948
10
- sig = 026BC8F47A0C7B081C70F690FA32F782D261926755909F227285AD04AC1348A521264C9FDF440D677F0DF631DD0BA9FD7A74800AA8426D2D00791D5B7C29DC300C4D86774485F26282E808554B4A4D19AC8F6ACA9AE958AAE66BA0E056FEEF6C0655AA8ACDFC933CCCF632507E25A585C92DDD34DE723F161DC22E731ACF992CA032C079F29D323EE48C82C264B558C5A4C07FBF68A56C80DD3BF490826EA5EEA07E637C5A5F36AA43918F91927ED9CC0EEB2258505FD446B18DF00714CE09ADAAC2D45443A9A966A3BCB22E62F1B919D19DF2FCBC6ECD2400C147128A4DAF372579A6971BE83FB612ADF8797C16DF3C1E9FD5BE4662DBD8194D7D2847FB4B396403CFA901410FE12836EE7EB96EC766D572B4732BD678936AAA930981D6209BDFFAB5807D91BAF4B2769F2EDF4C4B1485BA4ECF95A3AC79AC3751CCD52791ACBF104DF8E5F6A10244589E41488EE5ADC04B6F2B8A98E5BB1134ACEEF93EB91E15D2F13FFBE87340AC7DBCBADD8B72334844FC8682ADEF1B95D18BB93DF6ED6D5E23AA102DC84F5512513970F0A6F632ED1D3494418F7B6076165C546EDE98D1ADA2F7D4CB0758ED6E956EE8AB08D792536A7098FACCA3826989F5EC7CD28ECBB01FF16216DF4D248CB4888A00B71B9F84D856107747AB3EF7953DC3A530DBE8C240F5B5E51BB38FD9AFB9CE1C62EF763F84AC51CDBE409156D2A665E498257403BC4FD2196AEA8A9533A535C42E67559239BD8568684E3DE1E201928E611BEBE89D1A86717296CBD785A148BE4EE8E803739DFD4B4FE8811EB8D643327C613216BF19AE2643BE63D3C5EDA6112C99B7FECA7DCADAE21F71DFD754FE8999BCFF495DEC69B4F58A3BE46696FBD024A45657210FCE81821F07E0E6D96215D2B1DCEAE548C0A06AAA3436EBD1E9095571B3D84D1EB3797D92EA26F79600331F5D35240D87C96E97FD5B6A641DA83FB6621112AD364F98C98962AAB95A64FBDCA78B316915603C74F7F126270082BAF3A6412C93092DCC2BAC5A6FA77AC7FD5D53F79906A80B8D4D68281BAA11BDEF0FC9636F6FA0105AC573F0FAF72E8CF132BE1E68599CCDCB086E0115233059255597B40079D01CC2F24038E7D27402BC14215983C4B752EF7AB22433F77CF18B89995CD64D5FFAD66ED2199EBA9325495173A6FE694AE2E75E93627C43E7662BB46EC7D15AD10C4AE7E6365DDAD72A57F18B3812300CF672234A47CF548E10C445C77B8801A48C4877A440ED0B08D74D75E6B374C32149F263A3BF89DDA7D5C7957B81265FBF69F596C508A209A2E1F7AE31260E4E04C3B0835DFFB33490EBECF85EA27BBFCA6FD7DC148824EDAAA79ABBBA62A992D63A4C775B14A3D19F9DD16C810ADF8427AAFDFD760AA400E16EE0204D5AF8670397DA2FE99DEA75697D0E071BFBF190DBB187046E5C71924203909AF06DB091C060CB954ECFAE08126A63F936FBCA4B3A937F5138D2F798DDD85CBA9FB09F4F28F35FD2E8BEAD4485D9300A8EFB6E4A24F5BF94177F0382276B344DE1862B20633800D5FA3801F26340B2695EA1A0E4DB5DF0EBCAA5684D75E0AEDD39FE7B771292F463B0FF78D85E920CAD2FA621729938223BD0E46A2CF5B4640FBCD74C62F93E226E013BA7E9E8374C144CB8A0CC0A1C7828BA2972DF061404718008AC56A276804DF5FA2F6D834AB44796E72F8B298777170B95F8F9CBD416FDA92AF5749BE03B058AFA7CB2071EF1BB4C574C6C24718A6F2DB1E7E1DC4570156531A882E10FA5ED218D4335B2820AA46826A8F552BEC47A7BB9F2D958A83C30A5F362D19102F01C53BE1E445BD0E9FAB2A034A6092E3B4B7561730D53D7E9E0F2936AF3E447957A5C74D1DD8ABCF5B6D8C055D40BDA81B25643619C783CD540B60B291CC5DF19D4BB84755E91ED0C6794C457E33307B868BC31815BAE9A4B1F192D92AA0324716DF1B14B87EE71CB9863D4DC56D26627C917ECAB4DC01AD1202F6F84C80ACF0FED6039C5729D74A5D6AE69F3C4ACF5C7E921B0C83C864879A62C6B95DBFF528830B92887DBE99F6C7BD5B13283474748C05D145F04AEF4428BB1253B7E54AEBC379C2AEE43C526D0B8094D62131AE1C8E65E1DF2166EF04CE3FF32F4EA5444025E4CA8AD2E66D96FF0AE92E418C17CFA0A2AB01280F309846B2462746EC5E54D7E8CD2572D6575FF211007C883F231D52D2D1701BE679AED48AB85EE677B524B8487CE22EFBF0CB7F62A4BCC355A62E0D9E80B50C7C10AA14E7D07EEEDE3FE8CA863F6D9C2E21FDB8DF64B5526B8106B0FBDECFD84434EADF19620C2890E0F7102C73FEC0E5F40A88C92F6FE597A229E64C8D8271A32CD4799C2E8673A7D37B922A5B5ED8D4F17FB4CD97FA7EB26C023E178EFAA679EF3B63AB3D5A15BC5EC9AB50EC6A26594A53EFD80F1AE0A954268E4D35F030954F6AEA1C6C252BCDE24BF1D506D968E880A1D2CF5178F0562DD010E892C762064E6BB97733B7AAC6E56F28FE8D0B8B9B55F902FD55CBA557FEB3DFEF3D6576E4A24D1F30AFC5551B4AD8E75C3CD8EF127842D751CA728F8FE1C29D93C5D24C750801EA3B1BB798B800FC232A34F1F548A9746B41E6CA49E7A14E0EC1B8A30795D76ABE838BFE786CA0CA2AABA3CEBD9E8558E5560BCB9D810A9BBB44684BDB5746139AB5ED9981829E6A81BBB113DF0A81B38E90B68859DE7C1B86E701A50F94E54F0836BC23FA9C93F853D4E625B1B172629B7C6ACE306F6DB1E9F3D678961B909F5E28EFC43D9A7F99F7DB333F45C7A5053EF4ED5A2DB5C8E78C6AFDC7D8116D113042F3998CEA1AA7749E3D7CF5565FAD7B35872EF2AB90D37EFB4CC9E0106B0D51DEB59AF9B4D087520CACCE4E924A6940CE7C27DC9E703EBA1F044FCC490534C164F280EE7522741A217F6C7BF9A76171D2FF267B2BCEB4AEE803FEAA65ACCC419DDC45A5D7290C3C43D21801BC2574CF99896D80DBF67CC7AD87A0807F971A61FC5F4057FB7CDA7BF8102321A6E1A2A5789216EDF0720635B287A8A68FB66CD14D471D06C842617B4E1FF2DA703124B316A0156D9B7E8CB8403F663C7C955FC4F0FE9E5617850AF59894C8949BCAE6A3A5566A5CBAED0DD18732F4FD6B316CE146FF53DBDFC104D80B45DDA8A99B06E69A4DB12F0C922D8B1FD96BCBDA5FEFAED0DF7525AFACFFB4FCCD782324FAE2728598BAF526E46B77B95BC9AA131B99142D4F9E442D5D0AB0A9AE028FB4143579A7839F3543DE2B89392422DE292883DC79FCE7C582118A19672D60F760BC23544054F49972CB88CE9EB3EFB71DE10E1C56370CBC1457F27A44D1EF5C0ED23202DC9928C05DA7D9655A54D454563CE3C4FEA09D5A831A07D3ECDB061AE5B8301FED76E24222B7C4070BFD6A14DD8782F89883A26719AA8D815871C9C213340FD06C9E164AF29F0D187FFA1A2379E2F63872F6314579AC942D2442911A0E4DE4FBEFB25ACF908016D96E24B2CE81506CC988CEAB4106B8EE39EA99FCF5E43AC9F9663887F369A6C470715F3A362D419330624F702DF87733795892480B8B6FD3FFF4A3CCF6D8D6E13549DE182A4E656B035DB5CBDC111D33E3DD774BEB328A31283E466BECC924FDB3050462CB88B0C36C8B16127F9662482C2B63C3AD4178051E7FB9C4CA6059CC383E4193E62DA47D642C15B9167790280362484581CDDBDE21ADAD184D64554F7E2A2683C1AB245A8AF59AFAE97CCA780B5D4FD113F54E58D7B234DF07E622289564EE45C43EA5328A2BCE59EE17753CB7E06D510B47360F43207C608E092C7D191B2CBC5DC0EF756F34386F6453C50529C5AD5088526E828630DF5F1C2C213459DE64D42FE7267D8269C41317B350C845C0035E55882AC1E9282EC1E7DDF6B08321DF488615F2900093A71D463E3D6C8B3A3FD8E37A9691B090E11ADFD9C0683435B0A04867E4F1D994A1D8AEEF9A22EF6F01E9F69457AD2848624FBAA4BD157C7C469B5C8F1A141CCD787DD79A373EBEE12C3C52CAAFE49CFE040F7F2045E0A77A31674AE6266B27E8D21819EB9CEE655EE845FBDC21E1C2F9503C37524A6A4C254D775ABB2AACF8AE782916EAA3EA5839A3E76ED82EFE748A7773E38F85BD6FBCF772FAC6C051B3BBE55DA3CF31DA5C712A21B01CE62E746C65E94149A32AADBFE133F18651A0C03767FE0000000
10
+ sig = 310C0B53644AE4D291E8411B6C7B82EF07581349ACC2FF12285C93386036676CD2BCE09CEF7D2B604030684F9707AF6E67AD0EFBE13C5338A56A0726FA5E35B2AEA6E439B9498F2144CD3D3B5FA0EF358739157E7E866F2EAE4F9AA9676845171E3A43A428D84507D8B73F9515048F281833F23E6F29EF12F6339A38C664AF35E5A07F28C2EB71667CA146133906649CD6522A5130AE53AAF583687D5C8ED0CE28B00666D5C67D66BAEF5C992F877B85567066FD298A182FE32C30E6D491BF21957316AFD5CDDA8DC42A6DBFB8C27DC3E2C75073B4BAA8BF0D564B765966F843DACA358BB26450113DDFCBD56102154A627DE6561A2894EDAFC848F956A2BF0BE728CBACFC66147F5EF9C898D3E8C3A7611C9FCA0AF182AFD1A49BF6A0AE511BBBB2F2F017E435333070A4411B9449C29D5D765923B054F95B36323AC895739BED6CB8DD0F909C034F2502CEB6A536B057D9B9FDA7A0D8A9F50941B94C2F6F0F64B8923A53881C2D2B372EF55399F4E0CBAC8BEC759E35712F7C91E1C7A059FD0ED2F28C4205F21F817463D2828FAFA31FCD3AE9EEAAF4469A49A5EA9637865D3705D7E1CF8762902801D58207E98ABB5AEBA81E0CAF184F3664989E56C23D2314DEA38F99DE7C6406AF9E8833B415DF75BF0B3482B6FE8BED81D1C983AFFE64F2413FD019E8559A5E7BF0410E0D2DD28CBD86CB30964A1751658D55FEEEB3A49FA9BD2FC18AAE8273606124D559A62B59AE7E9D207533717EEA2E6023521884E3BD90BA1E2CC09A75A56FC07C6C8027D396ABE652EF4DFED6CEA2F1294B4D1AF5C587F41114AD5F5E04788074D9941C0B99880297DA9A79984B5F96A5AF51AC83B4408FD50CBC0458DCD8129CAFCDD42C25AAD341E4C3A10058D319A8C5FD0AF8899827F71845C2691CCAD177050AEF598AE37C6B3E63107206CB5437740A5F34390348AD05060B122C2F2513751C6E9D70E2B8286CC42156CE99CADB5046793F985AAE14BAD06BA97299321B526415072ABD9102D3CDCAFE83C037FB2E67641DA704D21340BDBD05E024A05575DF5EB71FAB2988B19B7832309D5E29EEAEC637294CD2D5E7545F275445693AEA3B956DDEB162BD4D26BE20EBC2AEE95632054B4868A9577A356FD11DBD9EBE18FCA77DFA1BF33B6FFA715CE62CFB56531C427541A423B23C8C5AA73FA140B3C7DB52C1681B4959CD9453C237F4475E61737C8F3C0BF22E10E180323875005825F057C3733746A5AF81D50ED86995BBAC5C81B189B404E9063A23C65C895C30583A1AD69FFAF33110E87E0B2635E8E8FCC2C626227DE01383F21B980B2DF66CE3BCA04DE18631C583B5891237B74D99FA0E5C1635003D4E1F00DFC9199D03ECDD4B8C5D75052623E4293D52CBF60DBC44686957AFA9566213B2429BC3DDD1A61FF29786538ED3F314CDF35E4E893AB6ED4BAD42C43CC72E57832A710E8BC36870E7AEADFD9EDCE3E533EA1116BA1F97802A712FD119F4AF6C7D741CF4C06669FE8188480BE827BF3857A5D9723832B97D9029A53DDE6881CEE015C9994BA51E9890BFDC5398DDB1599FCD6FE3CE54322C7546BDC2A68F67D134364C40B62EB5C4E96293700F0F5FEE378709640FE30239BF3FC7DD6C71486B60EA58B8031E28A969BA1C6AFA19B242EBC25332C32C16CE19A5A38A2C58CCBFEF4F427A84150690AF32931F0B4186CFF4C4C7B8AA8C010A06FA6F35604FC2AB98B0FDBBE60017139B7EF595319CB14CC38BF129CACE527B2B2D881F410A2DE907A6D68DD8FDE5105ABBDA95201B3F4BC3AA2DEC7371DEC91BD7521BB39508A976426771F6FA49544063307C8F9E004E607E428C05C631445D28E6F634AC6AC06042A17FECF0B36C574DD699F710B66880832F73CFDE3F51C9F662DA4A1A8896AACD6AD8D5A7D6F29A4A08B14BADC3CD21EEF66E9066ACA5FA7EE3A0DCC09EC8B45DEC39C3DBD8ECE81FB6551EF07DE84630A13A158DF22042E50DD18BBFC9ECF76C07C278ADC5C5C3E952BD1A4E69E18473094788524C764875555072D10E35EB325A00D6F7E501403D0999320E769922F6009E8E72AD82CE85028FA21EC6AFFEC51DB4B7D95BE35F3F8A56061DC53E14556604A840D9E32D279C2C4232220B46552732FCB69F0D5693B7C04923F415E888AF015856182815F022AC828BD726E30DEFA89C449B84C0B57BB0CA50386AC7FD0B9772AB737BAFDBAA607FB4CF202192DD46339BC73D7546EE1260291F9C0C6FC322F8EA19C32BC2B0CE4642B2E0DC9BE08CB8B9A1EAF803FD63890CD7FD3A4128867A8133C0BC6C7F9791D5C138F8F8C5154712E4D206CEC4CDB1C01B523CA571B20FA80384ABC89D87CC965D3C71AC35ABBB1718FE8C67B956298CB32BA1B0DF65657F37D661A936BCB76353842CD9C39800800663F42BBC35F946C47A7A9636A6E0AD6FBA43F56B2A2551AA5EF8E13667C4DE027287B5A187AFF5F366FF49B11BBBCA8E9E3462F1B021B2DF576A279FACF936EAA90212E126DADCF0BC297DA46109EB6853A1C1D3C230F6A6766CD78EC92C9B6AFED6A0A4714DBE07FCC523A9F1C54D48A84892827D7DEFBD0239CB5CC8762B7418C318A469AC9870A1957A8C72ABF72D6A198BD538778B3CA9878A056A98E2B72225382C3AAE56857EEC782EEC5FC230411354EA6ABA68E0FBCC9F4F15A1EAEA98D0EAF9D348B546A7DD8E76CB8DDCF75855B1653EA7479190DC5315FB53E2EF3F73952DFD3393B172FDC6E09F5C0A8BDAA8E3058982D416F9A20A1F989BD377C26564A8FACFB9449490DA9A023A8F7D5D239C32B254C24BE9F3813E8D72F9DAD408E15B219CFFC1974A82973AEE6A48F6AD9AF84EDB13ACDE7383E852866741FF4593C4C9D11394700B4796951D2988FBA8A0EAC36E7A18EE7164B54F1734089E87E09C5F8370878D0DC33F32A3838C01FA9C63B494FAD706837AB4811DF1B8E410D62AB17B0A8E1B430A96CBC54F1AA8F3A7B1485307D32C1655FB0D95653B66DB2DACE6F784056D94AF861250F967ACD4A838F77A252C613510C1C8062AE47000431C619EBE31DEE2F62C7955981B5CDD4B9693CE92469464A7EF2776828453E43A3473EBBE6B443EED5DD98C5E3C44FD6012CC8E22D88FD1E47D9AF9AAC659F795457B67D6F911598A4FEC5D8A03CA8C2EC0D2091F0EDD8AADF5EDECEF4004B73398948C92DC2725EA53AE24B7C0C461CAC70AB773F6CEA9A78E57AB56F3A0E1BD6F38BBA7F4E1EBAABE624BF6CA06B77287C338F4B459BEA6AF20DC2A7C1785811DD694D07B17B99993A42E6D633220B487FB393E3BA2CB52BD6C633C85B793FE623E1B69C93A561A19D7784B24D4D35490898B2C9CB5550E77DAA4E635317CBD42EFFE5C189375B3FBEEE92EC25D22E04EB042E08628D1AF34352BF064CDA0785EB8B4BAA09A7B906AA01CE264D2B3AF703FD29CE47EAE5016F52A27859B00B96E1C1F55926F860DDC7187F90669B8F8FF4688926F47F1ED891C33A9459024E302714199F4558B2E503454C68352BD66F893E27E881FC26443919B3A367485FC392AB09BE1FB32E1E14E257D8A675C24CDB642C2B04BCBDFA628EBEACFC527D5771AA9106DB7FF6AF849CFB72EF0555A322E660362D16E1BCD48EAC998910EDB72F9808FC8CE266EF138EDDFC828F1917CA0C541A6EE67CF8E0513FE05F4D5A5D7AF229B0B3728138CC595061B9B1783EB575C594BD1D6DCC7E4AD57D71C744A6CD39A4FBF41A6410C9A4BF311856635ED4291EF66C73CEF117ECAA54065770DE806156E3CF46CA7B23C3BE08F98C28B7DB930AF70F256DFE330EEDE95D1C656B85B0710474A0D5BE4E55C51BCC814304A76FA90AFE75CD618FDBEA8C04C3D71BAAD5AE9AC5785AB7A58D20CC9C1C5D83B9EE0CAA39A30608C8499580DDD0569BC97A9885086E67DF9A08C4527C8FDBA9CB1B61807CCCE3FF013ADDACF59DFCF8AAC59AD49CC529A8CE37107590816AB05E63527AA1C17E186C095B4A2848D858E3D838D2596693AB95D19A8729AF12DBDB16FC067677A47078FEDACDBBD55CF346169303447D330F928E04D516D4761E0CF9F365CA4A7BBB2B173A9667D27FEB1368894ED517E014D39BE97A9375B466AAA50C2D2112BEE70A8C7B725961B8B4C7AF624725DA2A192A5531A0000000000000000
data/vendor/AIMer/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2022-2025 SAMSUNG SDS
3
+ Copyright (c) 2022-2026 SAMSUNG SDS
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,227 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ #include "aim3.h"
4
+ #include "field.h"
5
+ #include "hash.h"
6
+ #include "params.h"
7
+ #include <stddef.h>
8
+ #include <stdint.h>
9
+ #include <stdlib.h>
10
+
11
+ static void squeeze_invertible_matrix(hash_instance *ctx,
12
+ gf mat[AIM3_NUM_BITS_FIELD])
13
+ {
14
+ uint8_t buf[AIM3_NUM_BYTES_FIELD];
15
+ uint64_t ormask, lmask, umask;
16
+
17
+ gf matrix_L[AIM3_NUM_BITS_FIELD];
18
+ gf matrix_U[AIM3_NUM_BITS_FIELD];
19
+ gf temp = {0,};
20
+
21
+ for (size_t row = 0; row < AIM3_NUM_BITS_FIELD; row++)
22
+ {
23
+ hash_squeeze(ctx, buf, AIM3_NUM_BYTES_FIELD);
24
+ gf_from_bytes(temp, buf);
25
+
26
+ ormask = ((uint64_t)1) << (row % 64);
27
+ lmask = ((uint64_t)-1) << (row % 64);
28
+ umask = ~lmask;
29
+
30
+ size_t inter = row / 64;
31
+ size_t col_word;
32
+ for (col_word = 0; col_word < inter; col_word++)
33
+ {
34
+ // L is zero, U is full
35
+ matrix_L[row][col_word] = 0;
36
+ matrix_U[row][col_word] = temp[col_word];
37
+ }
38
+ matrix_L[row][inter] = (temp[inter] & lmask) | ormask;
39
+ matrix_U[row][inter] = (temp[inter] & umask) | ormask;
40
+ for (col_word = inter + 1; col_word < AIM3_NUM_WORDS_FIELD; col_word++)
41
+ {
42
+ // L is full, U is zero
43
+ matrix_L[row][col_word] = temp[col_word];
44
+ matrix_U[row][col_word] = 0;
45
+ }
46
+ }
47
+
48
+ for (size_t i = 0; i < AIM3_NUM_BITS_FIELD; i++)
49
+ {
50
+ gf_mat_vec_mul(mat[i], matrix_U[i], (const gf *)matrix_L);
51
+ }
52
+ }
53
+
54
+ void aim3_generate_linear(aim_lin_t *lin, const uint8_t iv[AIM3_IV_SIZE])
55
+ {
56
+ hash_instance ctx;
57
+
58
+ hash_init(&ctx);
59
+ hash_update(&ctx, iv, AIM3_IV_SIZE);
60
+ hash_final(&ctx);
61
+
62
+ for (size_t ell = 0; ell < 2 * AIM3_NUM_INPUT_SBOX; ell++)
63
+ {
64
+ squeeze_invertible_matrix(&ctx, lin->mat_A[ell]);
65
+ }
66
+
67
+ for (size_t ell = 0; ell < AIM3_NUM_INPUT_SBOX + 1; ell++)
68
+ {
69
+ hash_squeeze(&ctx, (uint8_t *)lin->vec_b[ell], AIM3_NUM_BYTES_FIELD);
70
+ }
71
+ hash_ctx_release(&ctx);
72
+ }
73
+
74
+ int aim3_nozeroinpsb(uint8_t ct[AIM3_NUM_BYTES_FIELD],
75
+ const uint8_t pt[AIM3_NUM_BYTES_FIELD],
76
+ const uint8_t iv[AIM3_IV_SIZE])
77
+ {
78
+ aim_lin_t *lin = (aim_lin_t *)malloc(sizeof(aim_lin_t));
79
+ if (lin == NULL)
80
+ {
81
+ // allocation failure
82
+ return -2;
83
+ }
84
+
85
+ gf state[AIM3_NUM_INPUT_SBOX];
86
+ gf pt_gf = {0,}, ct_gf = {0,}, tmp = {0,};
87
+ gf_from_bytes(pt_gf, pt);
88
+
89
+ // generate random matrix
90
+ aim3_generate_linear(lin, iv);
91
+
92
+ for (size_t i = 0; i < AIM3_NUM_INPUT_SBOX; i++)
93
+ {
94
+ // linear component: affine layer
95
+ gf_mat_vec_mul(state[i], pt_gf, lin->mat_A[i]);
96
+ gf_add(state[i], state[i], lin->vec_b[i]);
97
+
98
+ // non-linear component: y = x^{2^e-1} + x^{-1} = x^{-1} * (x^2^e + 1)
99
+ if (gf_is0(state[i]))
100
+ {
101
+ free(lin);
102
+ return -1;
103
+ }
104
+ gf_inv(tmp, state[i]);
105
+ for (size_t e = 0; e < aim3_exponents[i]; e++)
106
+ {
107
+ gf_sqr(state[i], state[i]);
108
+ }
109
+ state[i][0] ^= 1;
110
+ gf_mul(state[i], state[i], tmp);
111
+
112
+ // linear component: affine layer
113
+ gf_mat_vec_mul(state[i], state[i],
114
+ (const gf *)lin->mat_A[i + AIM3_NUM_INPUT_SBOX]);
115
+ }
116
+
117
+ for (size_t i = 1; i < AIM3_NUM_INPUT_SBOX; i++)
118
+ {
119
+ gf_add(state[0], state[0], state[i]);
120
+ }
121
+ gf_add(state[0], state[0], lin->vec_b[AIM3_NUM_INPUT_SBOX]);
122
+
123
+ // non-linear component: y = x^{2^e-1} + x^{-1} = x^{-1} * (x^2^e + 1)
124
+ if (gf_is0(state[0]))
125
+ {
126
+ free(lin);
127
+ return -1;
128
+ }
129
+ gf_inv(tmp, state[0]);
130
+ for (size_t e = 0; e < aim3_exponents[AIM3_NUM_INPUT_SBOX]; e++)
131
+ {
132
+ gf_sqr(state[0], state[0]);
133
+ }
134
+ state[0][0] ^= 1;
135
+ gf_mul(state[0], state[0], tmp);
136
+
137
+ // linear component: feed-forward
138
+ gf_add(ct_gf, pt_gf, state[0]);
139
+
140
+ gf_to_bytes(ct, ct_gf);
141
+
142
+ free(lin);
143
+ return 0;
144
+ }
145
+
146
+ void aim3_sbox_outputs(gf sbox_outputs[AIM3_NUM_INPUT_SBOX+1],
147
+ const aim_lin_t* lin,
148
+ const gf pt, const gf ct)
149
+ {
150
+ gf tmp = {0,};
151
+ for (size_t i = 0; i < AIM3_NUM_INPUT_SBOX; i ++)
152
+ {
153
+ // linear component: affine layer
154
+ gf_mat_vec_mul(sbox_outputs[i], pt, lin->mat_A[i]);
155
+ gf_add(sbox_outputs[i], sbox_outputs[i], lin->vec_b[i]);
156
+
157
+ // non-linear component: y = x^{2^e-1} + x^{-1} = x^{-1} * (x^2^e + 1)
158
+ gf_inv(tmp, sbox_outputs[i]);
159
+ for (size_t e = 0; e < aim3_exponents[i]; e++)
160
+ {
161
+ gf_sqr(sbox_outputs[i], sbox_outputs[i]);
162
+ }
163
+ sbox_outputs[i][0] ^= 1;
164
+ gf_mul(sbox_outputs[i], sbox_outputs[i], tmp);
165
+ }
166
+ gf_add(sbox_outputs[AIMER_L], pt, ct);
167
+ }
168
+
169
+ void aim3_mpc(mult_chk_t *mult_chk, const aim_lin_t *lin,
170
+ const tape_t *tape, const gf ct_gf,
171
+ size_t party)
172
+ {
173
+ for (size_t i = 0; i < AIMER_L + 1; i++)
174
+ {
175
+ gf_copy(mult_chk->a_shares[i], tape->a_shares[i]);
176
+ }
177
+
178
+ // b_shares[i] = share of sbox outputs
179
+ for (size_t i = 0; i < AIMER_L; i++)
180
+ {
181
+ gf_copy(mult_chk->b_shares[i], tape->y_shares[i]);
182
+ }
183
+ gf_copy(mult_chk->b_shares[AIMER_L], tape->pt_share);
184
+ if (party == AIMER_N - 1)
185
+ {
186
+ gf_add(mult_chk->b_shares[AIMER_L], mult_chk->b_shares[AIMER_L], ct_gf);
187
+ }
188
+
189
+ gf_copy(mult_chk->c_share, tape->c_share);
190
+
191
+ // Set x_shares (= share of sbox inputs)
192
+ for (size_t i = 0; i < AIMER_L; i++)
193
+ {
194
+ gf_mat_vec_mul(mult_chk->x_shares[i], tape->pt_share, lin->mat_A[i]);
195
+ if (party == AIMER_N - 1)
196
+ {
197
+ gf_add(mult_chk->x_shares[i], mult_chk->x_shares[i], lin->vec_b[i]);
198
+ }
199
+ }
200
+
201
+ gf_set0(mult_chk->x_shares[AIMER_L]);
202
+ for (size_t ell = 0; ell < AIMER_L; ell++)
203
+ {
204
+ gf_mat_vec_mul_add(mult_chk->x_shares[AIMER_L], tape->y_shares[ell],
205
+ lin->mat_A[ell+AIMER_L]);
206
+ }
207
+ if (party == AIMER_N - 1)
208
+ {
209
+ gf_add(mult_chk->x_shares[AIMER_L], mult_chk->x_shares[AIMER_L],
210
+ lin->vec_b[AIMER_L]);
211
+ }
212
+
213
+ // Set z_shares: z[i] = x[i]^{2^e} + 1
214
+ // y = x^{-1} + x^{2^e-1} -> xy = x^{2^e} + 1
215
+ for (size_t ell = 0; ell < AIMER_L + 1; ell++)
216
+ {
217
+ gf_sqr(mult_chk->z_shares[ell], mult_chk->x_shares[ell]);
218
+ for (size_t i = 1; i < aim3_exponents[ell]; i++)
219
+ {
220
+ gf_sqr(mult_chk->z_shares[ell], mult_chk->z_shares[ell]);
221
+ }
222
+ if (party == AIMER_N - 1)
223
+ {
224
+ mult_chk->z_shares[ell][0] ^= 1;
225
+ }
226
+ }
227
+ }
@@ -0,0 +1,63 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ #ifndef AIM3_H
4
+ #define AIM3_H
5
+
6
+ #include "field.h"
7
+ #include "params.h"
8
+ #include "sign.h"
9
+ #include <stdint.h>
10
+
11
+ typedef struct mult_chk_t
12
+ {
13
+ gf x_shares[AIMER_L + 1];
14
+ gf z_shares[AIMER_L + 1];
15
+ gf a_shares[AIMER_L + 1];
16
+ gf b_shares[AIMER_L + 1]; // b_shares[i] = y_shares[i]
17
+ gf c_share;
18
+ } mult_chk_t;
19
+
20
+ typedef struct aim_lin_t
21
+ {
22
+ gf mat_A[2 * AIM3_NUM_INPUT_SBOX][AIM3_NUM_BITS_FIELD];
23
+ gf vec_b[AIM3_NUM_INPUT_SBOX + 1];
24
+ } aim_lin_t;
25
+
26
+ #if SECURITY_BITS == 128
27
+ static const size_t aim3_exponents[AIM3_NUM_INPUT_SBOX + 1] =
28
+ {
29
+ 3, 7, 11
30
+ };
31
+
32
+ #elif SECURITY_BITS == 192
33
+ static const size_t aim3_exponents[AIM3_NUM_INPUT_SBOX + 1] =
34
+ {
35
+ 11, 23, 47
36
+ };
37
+
38
+ #else
39
+ static const size_t aim3_exponents[AIM3_NUM_INPUT_SBOX + 1] =
40
+ {
41
+ 3, 7, 11, 19
42
+ };
43
+ #endif
44
+
45
+ #define aim3_generate_linear AIMER_NAMESPACE(aim3_generate_linear)
46
+ void aim3_generate_linear(aim_lin_t *lin, const uint8_t iv[AIM3_IV_SIZE]);
47
+
48
+ #define aim3_sbox_outputs AIMER_NAMESPACE(aim3_sbox_outputs)
49
+ void aim3_sbox_outputs(gf sbox_outputs[AIM3_NUM_INPUT_SBOX+1],
50
+ const aim_lin_t *lin,
51
+ const gf pt, const gf ct);
52
+
53
+ #define aim3_nozeroinpsb AIMER_NAMESPACE(aim3_nozeroinpsb)
54
+ int aim3_nozeroinpsb(uint8_t ct[AIM3_NUM_BYTES_FIELD],
55
+ const uint8_t pt[AIM3_NUM_BYTES_FIELD],
56
+ const uint8_t iv[AIM3_IV_SIZE]);
57
+
58
+ #define aim3_mpc AIMER_NAMESPACE(aim3_mpc)
59
+ void aim3_mpc(mult_chk_t *mult_chk, const aim_lin_t *lin,
60
+ const tape_t *tape, const gf ct_gf,
61
+ size_t party);
62
+
63
+ #endif // AIM3_H
data/vendor/AIMer/field.h CHANGED
@@ -4,9 +4,15 @@
4
4
  #define FIELD_H
5
5
 
6
6
  #include "params.h"
7
+ #include <stdbool.h>
7
8
  #include <stddef.h>
8
9
  #include <stdint.h>
9
10
 
11
+ #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \
12
+ __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
13
+ #error "AIMer reference implementation assumes a little-endian target"
14
+ #endif
15
+
10
16
  #if SECURITY_BITS == 128
11
17
  typedef uint64_t gf[2];
12
18
  #elif SECURITY_BITS == 192
@@ -17,6 +23,8 @@ typedef uint64_t gf[4];
17
23
 
18
24
  #define gf_set0 AIMER_NAMESPACE(gf_set0)
19
25
  void gf_set0(gf a);
26
+ #define gf_is0 AIMER_NAMESPACE(gf_is0)
27
+ bool gf_is0(const gf a);
20
28
  #define gf_copy AIMER_NAMESPACE(gf_copy)
21
29
  void gf_copy(gf out, const gf in);
22
30
  #define gf_to_bytes AIMER_NAMESPACE(gf_to_bytes)
@@ -32,12 +40,12 @@ void gf_mul(gf c, const gf a, const gf b);
32
40
  void gf_mul_add(gf c, const gf a, const gf b);
33
41
  #define gf_sqr AIMER_NAMESPACE(gf_sqr)
34
42
  void gf_sqr(gf c, const gf a);
35
- #define gf_exp AIMER_NAMESPACE(gf_exp)
36
- void gf_exp(gf out, const gf in, const uint64_t *exp);
43
+ #define gf_inv AIMER_NAMESPACE(gf_inv)
44
+ void gf_inv(gf c, const gf a);
37
45
 
38
46
  #define gf_mat_vec_mul AIMER_NAMESPACE(gf_mat_vec_mul)
39
- void gf_mat_vec_mul(gf c, const gf a, const gf b[AIM2_NUM_BITS_FIELD]);
47
+ void gf_mat_vec_mul(gf c, const gf a, const gf b[AIM3_NUM_BITS_FIELD]);
40
48
  #define gf_mat_vec_mul_add AIMER_NAMESPACE(gf_mat_vec_mul_add)
41
- void gf_mat_vec_mul_add(gf c, const gf a, const gf b[AIM2_NUM_BITS_FIELD]);
49
+ void gf_mat_vec_mul_add(gf c, const gf a, const gf b[AIM3_NUM_BITS_FIELD]);
42
50
 
43
51
  #endif // FIELD_H