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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -0
- data/Gemfile +4 -0
- data/README.md +9 -6
- data/THIRD_PARTY_NOTICES.md +14 -47
- data/ext/kpqc/extconf_helper.rb +6 -3
- data/ext/kpqc/secure_clear.c +8 -0
- data/kpqc.gemspec +4 -5
- data/lib/kpqc/aimer.rb +6 -6
- data/lib/kpqc/version.rb +1 -2
- data/test/kat/aimer128f.rsp +4 -4
- data/test/kat/aimer128s.rsp +4 -4
- data/test/kat/aimer192f.rsp +4 -4
- data/test/kat/aimer192s.rsp +4 -4
- data/test/kat/aimer256f.rsp +4 -4
- data/test/kat/aimer256s.rsp +4 -4
- data/test/kat/haetae2.rsp +1 -1
- data/test/kat/haetae3.rsp +1 -1
- data/test/kat/haetae5.rsp +1 -1
- data/vendor/AIMer/LICENSE +1 -1
- data/vendor/AIMer/aim3.c +227 -0
- data/vendor/AIMer/aim3.h +63 -0
- data/vendor/AIMer/field.h +12 -4
- data/vendor/AIMer/field128.c +24 -381
- data/vendor/AIMer/field192.c +24 -400
- data/vendor/AIMer/field256.c +28 -447
- data/vendor/AIMer/field_common.c +98 -0
- data/vendor/AIMer/field_internal.h +218 -0
- data/vendor/AIMer/params/params-aimer-128f.h +8 -8
- data/vendor/AIMer/params/params-aimer-128s.h +8 -8
- data/vendor/AIMer/params/params-aimer-192f.h +8 -8
- data/vendor/AIMer/params/params-aimer-192s.h +8 -8
- data/vendor/AIMer/params/params-aimer-256f.h +8 -8
- data/vendor/AIMer/params/params-aimer-256s.h +8 -8
- data/vendor/AIMer/params.h +5 -0
- data/vendor/AIMer/sign.c +246 -167
- data/vendor/AIMer/sign.h +6 -6
- data/vendor/AIMer/tree.c +10 -4
- data/vendor/AIMer/tree.h +1 -1
- data/vendor/HAETAE/include/fixpoint.h +14 -14
- data/vendor/HAETAE/include/rans_byte.h +10 -9
- data/vendor/HAETAE/src/decompose.c +8 -4
- data/vendor/HAETAE/src/encoding.c +5 -5
- data/vendor/HAETAE/src/fft.c +1 -1
- data/vendor/HAETAE/src/fips202.c +26 -14
- data/vendor/HAETAE/src/fixpoint.c +21 -18
- data/vendor/HAETAE/src/ntt.c +2 -0
- data/vendor/HAETAE/src/packing.c +15 -15
- data/vendor/HAETAE/src/poly.c +30 -3
- data/vendor/HAETAE/src/polyfix.c +2 -2
- data/vendor/HAETAE/src/polymat.c +2 -2
- data/vendor/HAETAE/src/polyvec.c +7 -5
- data/vendor/HAETAE/src/reduce.c +2 -0
- data/vendor/HAETAE/src/sampler.c +231 -47
- data/vendor/HAETAE/src/sign.c +11 -10
- data/vendor/NTRUplus/NTRU+1152/api.h +27 -8
- data/vendor/NTRUplus/NTRU+1152/fips202/fips202.c +12 -269
- data/vendor/NTRUplus/NTRU+1152/fips202/fips202.h +4 -113
- data/vendor/NTRUplus/NTRU+1152/kem.c +110 -40
- data/vendor/NTRUplus/NTRU+1152/ntt.c +50 -54
- data/vendor/NTRUplus/NTRU+1152/poly.c +21 -13
- data/vendor/NTRUplus/NTRU+1152/poly.h +3 -3
- data/vendor/NTRUplus/NTRU+1152/randombytes.h +1 -0
- data/vendor/NTRUplus/NTRU+1152/symmetric.c +3 -9
- data/vendor/NTRUplus/NTRU+1152/symmetric.h +13 -3
- data/vendor/NTRUplus/NTRU+1152/util.h +15 -0
- data/vendor/NTRUplus/NTRU+768/api.h +27 -8
- data/vendor/NTRUplus/NTRU+768/fips202/fips202.c +12 -269
- data/vendor/NTRUplus/NTRU+768/fips202/fips202.h +4 -113
- data/vendor/NTRUplus/NTRU+768/kem.c +110 -40
- data/vendor/NTRUplus/NTRU+768/ntt.c +50 -54
- data/vendor/NTRUplus/NTRU+768/poly.c +23 -13
- data/vendor/NTRUplus/NTRU+768/poly.h +3 -3
- data/vendor/NTRUplus/NTRU+768/randombytes.h +1 -0
- data/vendor/NTRUplus/NTRU+768/symmetric.c +3 -9
- data/vendor/NTRUplus/NTRU+768/symmetric.h +13 -3
- data/vendor/NTRUplus/NTRU+768/util.h +15 -0
- data/vendor/NTRUplus/NTRU+864/api.h +27 -8
- data/vendor/NTRUplus/NTRU+864/fips202/fips202.c +12 -269
- data/vendor/NTRUplus/NTRU+864/fips202/fips202.h +4 -113
- data/vendor/NTRUplus/NTRU+864/kem.c +110 -40
- data/vendor/NTRUplus/NTRU+864/ntt.c +24 -28
- data/vendor/NTRUplus/NTRU+864/poly.c +26 -12
- data/vendor/NTRUplus/NTRU+864/poly.h +3 -3
- data/vendor/NTRUplus/NTRU+864/randombytes.h +1 -0
- data/vendor/NTRUplus/NTRU+864/symmetric.c +3 -9
- data/vendor/NTRUplus/NTRU+864/symmetric.h +13 -3
- data/vendor/NTRUplus/NTRU+864/util.h +15 -0
- data/vendor/SMAUG-T/src/cbd.c +4 -4
- data/vendor/SMAUG-T/src/ciphertext.c +2 -2
- data/vendor/SMAUG-T/src/dg.c +2 -2
- data/vendor/SMAUG-T/src/hwt.c +4 -4
- data/vendor/SMAUG-T/src/indcpa.c +5 -5
- data/vendor/SMAUG-T/src/kem.c +9 -7
- data/vendor/SMAUG-T/src/key.c +2 -2
- data/vendor/SMAUG-T/src/pack.c +8 -8
- metadata +17 -42
- data/vendor/AIMer/aim2.c +0 -163
- data/vendor/AIMer/aim2.h +0 -36
- data/vendor/AIMer/aim2_constant.h +0 -74
- 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 =
|
|
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 =
|
|
10
|
+
sig = 310C0B53644AE4D291E8411B6C7B82EF07581349ACC2FF12285C93386036676CD2BCE09CEF7D2B604030684F9707AF6E67AD0EFBE13C5338A56A0726FA5E35B2AEA6E439B9498F2144CD3D3B5FA0EF358739157E7E866F2EAE4F9AA9676845171E3A43A428D84507D8B73F9515048F281833F23E6F29EF12F6339A38C664AF35E5A07F28C2EB71667CA146133906649CD6522A5130AE53AAF583687D5C8ED0CE28B00666D5C67D66BAEF5C992F877B85567066FD298A182FE32C30E6D491BF21957316AFD5CDDA8DC42A6DBFB8C27DC3E2C75073B4BAA8BF0D564B765966F843DACA358BB26450113DDFCBD56102154A627DE6561A2894EDAFC848F956A2BF0BE728CBACFC66147F5EF9C898D3E8C3A7611C9FCA0AF182AFD1A49BF6A0AE511BBBB2F2F017E435333070A4411B9449C29D5D765923B054F95B36323AC895739BED6CB8DD0F909C034F2502CEB6A536B057D9B9FDA7A0D8A9F50941B94C2F6F0F64B8923A53881C2D2B372EF55399F4E0CBAC8BEC759E35712F7C91E1C7A059FD0ED2F28C4205F21F817463D2828FAFA31FCD3AE9EEAAF4469A49A5EA9637865D3705D7E1CF8762902801D58207E98ABB5AEBA81E0CAF184F3664989E56C23D2314DEA38F99DE7C6406AF9E8833B415DF75BF0B3482B6FE8BED81D1C983AFFE64F2413FD019E8559A5E7BF0410E0D2DD28CBD86CB30964A1751658D55FEEEB3A49FA9BD2FC18AAE8273606124D559A62B59AE7E9D207533717EEA2E6023521884E3BD90BA1E2CC09A75A56FC07C6C8027D396ABE652EF4DFED6CEA2F1294B4D1AF5C587F41114AD5F5E04788074D9941C0B99880297DA9A79984B5F96A5AF51AC83B4408FD50CBC0458DCD8129CAFCDD42C25AAD341E4C3A10058D319A8C5FD0AF8899827F71845C2691CCAD177050AEF598AE37C6B3E63107206CB5437740A5F34390348AD05060B122C2F2513751C6E9D70E2B8286CC42156CE99CADB5046793F985AAE14BAD06BA97299321B526415072ABD9102D3CDCAFE83C037FB2E67641DA704D21340BDBD05E024A05575DF5EB71FAB2988B19B7832309D5E29EEAEC637294CD2D5E7545F275445693AEA3B956DDEB162BD4D26BE20EBC2AEE95632054B4868A9577A356FD11DBD9EBE18FCA77DFA1BF33B6FFA715CE62CFB56531C427541A423B23C8C5AA73FA140B3C7DB52C1681B4959CD9453C237F4475E61737C8F3C0BF22E10E180323875005825F057C3733746A5AF81D50ED86995BBAC5C81B189B404E9063A23C65C895C30583A1AD69FFAF33110E87E0B2635E8E8FCC2C626227DE01383F21B980B2DF66CE3BCA04DE18631C583B5891237B74D99FA0E5C1635003D4E1F00DFC9199D03ECDD4B8C5D75052623E4293D52CBF60DBC44686957AFA9566213B2429BC3DDD1A61FF29786538ED3F314CDF35E4E893AB6ED4BAD42C43CC72E57832A710E8BC36870E7AEADFD9EDCE3E533EA1116BA1F97802A712FD119F4AF6C7D741CF4C06669FE8188480BE827BF3857A5D9723832B97D9029A53DDE6881CEE015C9994BA51E9890BFDC5398DDB1599FCD6FE3CE54322C7546BDC2A68F67D134364C40B62EB5C4E96293700F0F5FEE378709640FE30239BF3FC7DD6C71486B60EA58B8031E28A969BA1C6AFA19B242EBC25332C32C16CE19A5A38A2C58CCBFEF4F427A84150690AF32931F0B4186CFF4C4C7B8AA8C010A06FA6F35604FC2AB98B0FDBBE60017139B7EF595319CB14CC38BF129CACE527B2B2D881F410A2DE907A6D68DD8FDE5105ABBDA95201B3F4BC3AA2DEC7371DEC91BD7521BB39508A976426771F6FA49544063307C8F9E004E607E428C05C631445D28E6F634AC6AC06042A17FECF0B36C574DD699F710B66880832F73CFDE3F51C9F662DA4A1A8896AACD6AD8D5A7D6F29A4A08B14BADC3CD21EEF66E9066ACA5FA7EE3A0DCC09EC8B45DEC39C3DBD8ECE81FB6551EF07DE84630A13A158DF22042E50DD18BBFC9ECF76C07C278ADC5C5C3E952BD1A4E69E18473094788524C764875555072D10E35EB325A00D6F7E501403D0999320E769922F6009E8E72AD82CE85028FA21EC6AFFEC51DB4B7D95BE35F3F8A56061DC53E14556604A840D9E32D279C2C4232220B46552732FCB69F0D5693B7C04923F415E888AF015856182815F022AC828BD726E30DEFA89C449B84C0B57BB0CA50386AC7FD0B9772AB737BAFDBAA607FB4CF202192DD46339BC73D7546EE1260291F9C0C6FC322F8EA19C32BC2B0CE4642B2E0DC9BE08CB8B9A1EAF803FD63890CD7FD3A4128867A8133C0BC6C7F9791D5C138F8F8C5154712E4D206CEC4CDB1C01B523CA571B20FA80384ABC89D87CC965D3C71AC35ABBB1718FE8C67B956298CB32BA1B0DF65657F37D661A936BCB76353842CD9C39800800663F42BBC35F946C47A7A9636A6E0AD6FBA43F56B2A2551AA5EF8E13667C4DE027287B5A187AFF5F366FF49B11BBBCA8E9E3462F1B021B2DF576A279FACF936EAA90212E126DADCF0BC297DA46109EB6853A1C1D3C230F6A6766CD78EC92C9B6AFED6A0A4714DBE07FCC523A9F1C54D48A84892827D7DEFBD0239CB5CC8762B7418C318A469AC9870A1957A8C72ABF72D6A198BD538778B3CA9878A056A98E2B72225382C3AAE56857EEC782EEC5FC230411354EA6ABA68E0FBCC9F4F15A1EAEA98D0EAF9D348B546A7DD8E76CB8DDCF75855B1653EA7479190DC5315FB53E2EF3F73952DFD3393B172FDC6E09F5C0A8BDAA8E3058982D416F9A20A1F989BD377C26564A8FACFB9449490DA9A023A8F7D5D239C32B254C24BE9F3813E8D72F9DAD408E15B219CFFC1974A82973AEE6A48F6AD9AF84EDB13ACDE7383E852866741FF4593C4C9D11394700B4796951D2988FBA8A0EAC36E7A18EE7164B54F1734089E87E09C5F8370878D0DC33F32A3838C01FA9C63B494FAD706837AB4811DF1B8E410D62AB17B0A8E1B430A96CBC54F1AA8F3A7B1485307D32C1655FB0D95653B66DB2DACE6F784056D94AF861250F967ACD4A838F77A252C613510C1C8062AE47000431C619EBE31DEE2F62C7955981B5CDD4B9693CE92469464A7EF2776828453E43A3473EBBE6B443EED5DD98C5E3C44FD6012CC8E22D88FD1E47D9AF9AAC659F795457B67D6F911598A4FEC5D8A03CA8C2EC0D2091F0EDD8AADF5EDECEF4004B73398948C92DC2725EA53AE24B7C0C461CAC70AB773F6CEA9A78E57AB56F3A0E1BD6F38BBA7F4E1EBAABE624BF6CA06B77287C338F4B459BEA6AF20DC2A7C1785811DD694D07B17B99993A42E6D633220B487FB393E3BA2CB52BD6C633C85B793FE623E1B69C93A561A19D7784B24D4D35490898B2C9CB5550E77DAA4E635317CBD42EFFE5C189375B3FBEEE92EC25D22E04EB042E08628D1AF34352BF064CDA0785EB8B4BAA09A7B906AA01CE264D2B3AF703FD29CE47EAE5016F52A27859B00B96E1C1F55926F860DDC7187F90669B8F8FF4688926F47F1ED891C33A9459024E302714199F4558B2E503454C68352BD66F893E27E881FC26443919B3A367485FC392AB09BE1FB32E1E14E257D8A675C24CDB642C2B04BCBDFA628EBEACFC527D5771AA9106DB7FF6AF849CFB72EF0555A322E660362D16E1BCD48EAC998910EDB72F9808FC8CE266EF138EDDFC828F1917CA0C541A6EE67CF8E0513FE05F4D5A5D7AF229B0B3728138CC595061B9B1783EB575C594BD1D6DCC7E4AD57D71C744A6CD39A4FBF41A6410C9A4BF311856635ED4291EF66C73CEF117ECAA54065770DE806156E3CF46CA7B23C3BE08F98C28B7DB930AF70F256DFE330EEDE95D1C656B85B0710474A0D5BE4E55C51BCC814304A76FA90AFE75CD618FDBEA8C04C3D71BAAD5AE9AC5785AB7A58D20CC9C1C5D83B9EE0CAA39A30608C8499580DDD0569BC97A9885086E67DF9A08C4527C8FDBA9CB1B61807CCCE3FF013ADDACF59DFCF8AAC59AD49CC529A8CE37107590816AB05E63527AA1C17E186C095B4A2848D858E3D838D2596693AB95D19A8729AF12DBDB16FC067677A47078FEDACDBBD55CF346169303447D330F928E04D516D4761E0CF9F365CA4A7BBB2B173A9667D27FEB1368894ED517E014D39BE97A9375B466AAA50C2D2112BEE70A8C7B725961B8B4C7AF624725DA2A192A5531A0000000000000000
|
data/vendor/AIMer/LICENSE
CHANGED
data/vendor/AIMer/aim3.c
ADDED
|
@@ -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
|
+
}
|
data/vendor/AIMer/aim3.h
ADDED
|
@@ -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
|
|
36
|
-
void
|
|
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[
|
|
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[
|
|
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
|