From 9dcbb7bdb06802c69e53637fd500001f5cb520ff Mon Sep 17 00:00:00 2001 From: Douglas Stebila Date: Fri, 2 Aug 2019 09:50:21 -0400 Subject: [PATCH] Generate kat_sig combine_message_signature from template --- docs/algorithms/sig_dilithium.md | 2 +- .../copy_from_pqclean/copy_from_pqclean.py | 1 + .../copy_from_pqclean/copy_from_pqclean.yml | 3 + .../combine_message_signature.fragment | 17 ++ .../dilithium/pqclean_dilithium2_clean/sign.c | 2 +- .../dilithium/pqclean_dilithium3_clean/sign.c | 2 +- .../dilithium/pqclean_dilithium4_clean/sign.c | 2 +- tests/KATs/sig/DILITHIUM_3.kat | 8 + tests/KATs/sig/DILITHIUM_4.kat | 8 + tests/kat_sig.c | 172 +++++++++++++++++- 10 files changed, 209 insertions(+), 8 deletions(-) create mode 100644 scripts/copy_from_pqclean/tests/kat_sig.c/combine_message_signature.fragment create mode 100644 tests/KATs/sig/DILITHIUM_3.kat create mode 100644 tests/KATs/sig/DILITHIUM_4.kat diff --git a/docs/algorithms/sig_dilithium.md b/docs/algorithms/sig_dilithium.md index 9a10d1b11..833e72ca1 100644 --- a/docs/algorithms/sig_dilithium.md +++ b/docs/algorithms/sig_dilithium.md @@ -26,7 +26,7 @@ Implementation -------------- - **Source of implementation:** https://github.com/PQClean/PQClean -- **Implementation version:** https://github.com/PQClean/PQClean/commit/e56b2e5556934963cae177062fca17798760afd2 +- **Implementation version:** https://github.com/PQClean/PQClean/commit/6e12692b4e8484340779fc90676c6af5e3d8f039 - **License:** public domain - **Language:** C - **Constant-time:** Yes diff --git a/scripts/copy_from_pqclean/copy_from_pqclean.py b/scripts/copy_from_pqclean/copy_from_pqclean.py index 688d87612..ef682fa34 100755 --- a/scripts/copy_from_pqclean/copy_from_pqclean.py +++ b/scripts/copy_from_pqclean/copy_from_pqclean.py @@ -123,6 +123,7 @@ replacer('src/kem/kem.c', instructions, '/////') replacer('src/kem/kem.h', instructions, '/////') replacer('src/sig/sig.c', instructions, '/////') replacer('src/sig/sig.h', instructions, '/////') +replacer('tests/kat_sig.c', instructions, '/////') replacer('VisualStudio/winconfig.h', instructions, '/////') generator_all('VisualStudio/oqs/dll.def', instructions) unix2dos('VisualStudio/oqs/dll.def') diff --git a/scripts/copy_from_pqclean/copy_from_pqclean.yml b/scripts/copy_from_pqclean/copy_from_pqclean.yml index f98eb8841..648bab144 100644 --- a/scripts/copy_from_pqclean/copy_from_pqclean.yml +++ b/scripts/copy_from_pqclean/copy_from_pqclean.yml @@ -110,6 +110,7 @@ sigs: pretty_name_full: DILITHIUM_2 implementation: clean sources: ['sign.c', 'polyvec.c', 'poly.c', 'packing.c', 'ntt.c', 'reduce.c', 'rounding.c', 'symmetric.c'] + signed_msg_order: sig_then_msg visual_studio_guid: 1f5e5dbe-8082-4756-9e90-c7d84198d682 - scheme: "3" @@ -117,6 +118,7 @@ sigs: pretty_name_full: DILITHIUM_3 implementation: clean sources: ['sign.c', 'polyvec.c', 'poly.c', 'packing.c', 'ntt.c', 'reduce.c', 'rounding.c', 'symmetric.c'] + signed_msg_order: sig_then_msg visual_studio_guid: 8a93b308-7b77-41e7-88a5-275994b62322 - scheme: "4" @@ -124,6 +126,7 @@ sigs: pretty_name_full: DILITHIUM_4 implementation: clean sources: ['sign.c', 'polyvec.c', 'poly.c', 'packing.c', 'ntt.c', 'reduce.c', 'rounding.c', 'symmetric.c'] + signed_msg_order: sig_then_msg visual_studio_guid: fb8c21f2-891b-46fb-8a45-17f69dfa31bd - name: mqdss diff --git a/scripts/copy_from_pqclean/tests/kat_sig.c/combine_message_signature.fragment b/scripts/copy_from_pqclean/tests/kat_sig.c/combine_message_signature.fragment new file mode 100644 index 000000000..82b3f3b6c --- /dev/null +++ b/scripts/copy_from_pqclean/tests/kat_sig.c/combine_message_signature.fragment @@ -0,0 +1,17 @@ +{% for family in instructions['sigs'] %}{% for scheme in family['schemes'] %} + } else if (0 == strcmp(sig->method_name, "{{ scheme['pretty_name_full'] }}")) { +{%- if scheme['signed_msg_order'] == 'sig_then_msg' %} + // signed_msg = signature || msg + *signed_msg_len = signature_len + msg_len; + *signed_msg = malloc(*signed_msg_len); + if (*signed_msg == NULL) { + return OQS_ERROR; + } + memcpy(*signed_msg, signature, signature_len); + memcpy(*signed_msg + signature_len, msg, msg_len); + return OQS_SUCCESS; +{%- else %} + // not yet implemented + return OQS_ERROR; +{%- endif %}{% endfor %}{% endfor %} + diff --git a/src/sig/dilithium/pqclean_dilithium2_clean/sign.c b/src/sig/dilithium/pqclean_dilithium2_clean/sign.c index 4fc469ef0..b6b2e28f2 100644 --- a/src/sig/dilithium/pqclean_dilithium2_clean/sign.c +++ b/src/sig/dilithium/pqclean_dilithium2_clean/sign.c @@ -367,7 +367,7 @@ int PQCLEAN_DILITHIUM2_CLEAN_crypto_sign(uint8_t *sm, * - unsigned long long *mlen: pointer to output length of message * - const unsigned char *sm: pointer to signed message * - unsigned long long smlen: length of signed message -* - const unsigned char *sk: pointer to bit-packed public key +* - const unsigned char *pk: pointer to bit-packed public key * * Returns 0 if signed message could be verified correctly and -1 otherwise **************************************************/ diff --git a/src/sig/dilithium/pqclean_dilithium3_clean/sign.c b/src/sig/dilithium/pqclean_dilithium3_clean/sign.c index 057ee1bb8..8818a8abb 100644 --- a/src/sig/dilithium/pqclean_dilithium3_clean/sign.c +++ b/src/sig/dilithium/pqclean_dilithium3_clean/sign.c @@ -367,7 +367,7 @@ int PQCLEAN_DILITHIUM3_CLEAN_crypto_sign(uint8_t *sm, * - unsigned long long *mlen: pointer to output length of message * - const unsigned char *sm: pointer to signed message * - unsigned long long smlen: length of signed message -* - const unsigned char *sk: pointer to bit-packed public key +* - const unsigned char *pk: pointer to bit-packed public key * * Returns 0 if signed message could be verified correctly and -1 otherwise **************************************************/ diff --git a/src/sig/dilithium/pqclean_dilithium4_clean/sign.c b/src/sig/dilithium/pqclean_dilithium4_clean/sign.c index 3961bb7cc..70c4679b4 100644 --- a/src/sig/dilithium/pqclean_dilithium4_clean/sign.c +++ b/src/sig/dilithium/pqclean_dilithium4_clean/sign.c @@ -367,7 +367,7 @@ int PQCLEAN_DILITHIUM4_CLEAN_crypto_sign(uint8_t *sm, * - unsigned long long *mlen: pointer to output length of message * - const unsigned char *sm: pointer to signed message * - unsigned long long smlen: length of signed message -* - const unsigned char *sk: pointer to bit-packed public key +* - const unsigned char *pk: pointer to bit-packed public key * * Returns 0 if signed message could be verified correctly and -1 otherwise **************************************************/ diff --git a/tests/KATs/sig/DILITHIUM_3.kat b/tests/KATs/sig/DILITHIUM_3.kat new file mode 100644 index 000000000..eb63621fd --- /dev/null +++ b/tests/KATs/sig/DILITHIUM_3.kat @@ -0,0 +1,8 @@ +count = 0 +seed = 061550234D158C5EC95595FE04EF7A25767F2E24CC2BC479D09D86DC9ABCFDE7056A8C266F9EF97ED08541DBD2E1FFA1 +mlen = 33 +msg = D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8 +pk = 7C9935A0B07694AA0C6D10E4DB6B1ADD2FD81A25CCB148032DCD739936737F2D2F4F8FABA268F4304160EEAE093D9C539F7A9E872C5B92C85581253EBF8DF0CE453A1012702FF50FD3C6D20E41A44F1A1F5C0393C7DECA45321ECB9EBDCA30329898D579C33756AAF76CE77D3543FD45945BF334766AF01926781F4034AB54AC6F7E0B902D17C9C209016788386D13A5163E4D3A7278971F71011DA9E4147F59BFBA7185A1D91B6B90E357D44FD2F330E459971967C3567A9CE229B6F03B43F1A78AD086BB47C084406899DC25B14D2CD2BAD6FFF71E4DD284FC52EECEA00496AE1B8A3B6071F4F9052A01ABD009C3D642E74221026165635EE70B81DC153C693CE63E69A051EBC4F8B57EA55F48A97254532EDA16F2AB90B1F8BB22FBF0364AA6AB7D8AC1FF84E48EB58B26C6743FAA0884E4733D4052F10A97E65CFFC209DAB18E55935C0D216C2D1F1B1DF8786FFBA842C5F2E2AFB60199777B8896A0DA28BB277CA0AC09C2585B11B6548AB897228DE43AD50563207AD55D7AB94730DD9C7805E409CBF67B9A591F8FDD8B4214071E5FA7BEA20594F3D8AF4E1E7605C228CC2D2AED226B92D50AADFB8439BFF3C9B477CD833935B9C4AC4738DF186492B58E03589E3BC418F203D1ACAE047B877330F5F7FAAD662319265684C5E53D18B941E2354334BB39098166D5E484F1783FA0E104147B47686F3869F13157F84321264A6E3A843041E11D9BF90166223109E1490928D8407A91CAA3111FB5A9C49B16943C0E48780D9406188D9808318BCA9736A02F781F995BD5F0520C9F3733E10DA420814ACE11F7F54B739674A920CB81C9D3A2C136576D4D5FF6B904D6E2801DD9BE45D9B1CC52E3D060BF58B04C78B52036DCBF41A3F6D9CD8B50443106EDA8D18A14059618649B0F899642A8BDEB2669E90F4077D2FF84703600649F1BC0B6FAF5A687EF96432FB759B01F76DD6075946BE66DC6831A265AF2BDB0C0D9192DC66EB6A47D54A396AD67D2A6A065FA9F2600F304DC5E1428BE154D6D6009BB09DE42953B128E1117F1684D44B8ED6537C1F55F81ED39E355500FF91DC5C51FFCB0CBD3D054AA39ADD29F79C39F246D2BFDC4FC2D0B82B4A2FFAEBB58793508D03568DB1DCADC4D4D21F9D5AD87499F603C352C60762E01F5D16E960B70333D65884A9444F5A64D475D0900AF4912D4674E40A617E75C21171AE63CF81D46C8E15185899DED8462F460F654DAB1601F2B38FDDAE0431044379F57CC7370AC5910D66BF7C8C9A482BDBBFE457C6658BBEDE885F2EDEF21F2B30164C5C326616758A8D2C6F7981CB406578DDEEF5D137C69BBAE88A8304C412A2A42A1D07A981342E34118AF1BD6E3671B1EFCED77F164552A388ABB9A53A378B9ED72CFDD35A4BB8CE60BFE757AEC5EB38A1148CF8852778E1D17EC09FB99F1CAA898DF8E44D6C666EE8AB91622E7CA3483A93EAD60FB86AFED66D5989FC8BE4E95ECCD83E0F4A9BE20CD2CF7318C2D717CA677160CDAFACF686B1E5303D9E8F2E424A6993331E29487879933670ECF533CBEEEC370E29A9CF8525A754550DEBD91AB754E6FE0C21044A4C20CEB7515E61908E2F67FB12C89A091B56594B5E17FC0B74FE46523E12B0E3A5849D0EEB05AD0CEE8DFB62EBD2CF333A6E146D2CECCA2C791CF21F2D6E2842B4E599BFBC50EE479C929DAF97ED4CFA55A127ABAB621C7236B5A2621E98B7B5E70ACB6AAC2D67DBA314000BA3010889DF20A799FCEA1BAFDE2D992C4D222AA94F5A3EDF65439ED6544E42EC9E5E4D4F086243B50D00E6A17E778DAEF618DA339C48585953CBECF47F33B2C64DF968B6CC7AB75547E291F69EAD45D36B1AD8F13FA49F3D823FF5E9358D6C009A1CCD98E3CBFC9596CB979ACF28347BF165D0A18A2A9AC979EDA93CDEF6469BAA54F072DFA023D0A08594D7BEB10B0D6E7213AC08E470D0F52C63BB2B2D5E23AC5B4CC8BAD8589378DA67D7DE1B394FAF5A624112A0A7317B63BA331C645BCD78FAB3C374496CC0148E454392F0A82C8C94800824A1A7CC577A407D3830C495541D07B2586B581F3F1F3708187D34610 +sk = 7C9935A0B07694AA0C6D10E4DB6B1ADD2FD81A25CCB148032DCD739936737F2D3E784CCB7EBCDCFD45542B7F6AF778742E0F4479175084AA488B3B74340678AA8EBAFDDFE871ABA84291DB726D9F129174454F5FC0DB3A12E77361CD504017A9F4F32E8624129F2D1B61B66820AE1C27495233996505260189A40292341053460049AA633085A816A00A36109018514946488668034A9492A5470974239735A486A2924171788A0A10A628898680249972317915555430A775A8939248247597A265966987551016579346691682A6606375568276880373087761786140461418A460554063898296A890A4A00263197421023A140909AA89309A87713815577A1A3400430050181853745923128990A14181918854863862520755185030396897A177048320302676A8077459A1204070A141677A054A3831672630645036856056A353A634525430058134A60623199958646A96995A20658007041431527A378403860702416484041049535A128517807059576A16462395200A7261858A7963074098848836017625A13A27418524896821851724845816531923623103802089921AA6863A97660254733230142A32472632909A304386A200648169784613248600A1A6A730577739548A6588591874686881077531726A39794692960905A017284AA02775346710108163625A50A57635614579034241982A0A7484830970AA09892077A3476166857183063221074530321440338A6A87301A79A1885A564479059A87750334019401524223620794965700A256244495478579382A2311A4A27998A22A0881769928557884944085A8034627388220235222505079312370955A26105844718077697882622452787117942A44998867A12252668304A23322665949383707920A23217039775A914214483373AA93683A26AAA6348241744754A99839A40A64644658A7625004718021694818A371387374AAA913A09495AA9581528AA977030412879A1A24945A367284A1963746A7564500025821750686611780341298166469354434A22A51711533075A306523637994314749611089471A449AA383826914381205266550485642051103941862769660232A9630A43207672050728912835A30421A07273062772881730150410946699043071215A092242912A45A7490196980572445A58564804427546023011869A33635A1757340798863926A27307879106715189822AA63910051AA651A94571586AA5359AA2266401107871011A36A5A87293641874232182716A373932016425A03491A2144071936198AA8285258161A9421604008199530267201130285326904039880562A62147A97370602A226AA8A73670704899A09A07355637321A1A2641773299A167965A561464516090A4862A97A206A1AA639060864A8897033166730885590836A992372692309235449063023A88A214A4660AA9224160886A42385949681021952A25961684425250136947A46865030376856A204011A035066441362A32A44371721096A17A08786A9188886A590690078026802095A5517A29493656900171A406AA952910945761541A935148058789759119602433624794969872069A943109A3690182A4547310644330316867522359312A241A8220A4636AA352527A060A78962910653380816768798330204400824972A0929676A36997297268206963395691AA963743A04A47A5288A716339526439991477962419633A8017A0A38191700314AB99CCDBF53E9020EDE4D0FBE45CDA2EED4850A4BE727E0136010DA01D6890D7D1189E08B9D98327A76C496BBA2A8805B9DA55DA7607539BBD16579070BD513D2FA830682A9D0DBFE50FC225294DC08922A24807B3E7A22BB52E8FBBD9E556081B2C473EFEB452FC07375A08BD4D285E5469D9C93487B9ECD7057DA016F27A1FCFCAC13B196285EE10506A2D46601185B284900671C29992C3D4AE23E603B723BBDDDA4746C4322AC43CE1F58280D66B42227FEE12E5851955F3D8DC61814013B10B1D859C5E1BBAC80326777DCCB9F994AC7278F9CDDA2F27438C2ACC0590AEC332096FE0FEF88EBD5CB71750E2737FBFEEDCCF56A5079D34A5488BDF3D141FA9E87EC3917650E4A85E76DC261EE1E4FFEC9F014940A0BA62D3A9BF8EE0513290F072F0CD855345C0F790417AD701000218755DC00DB37CAE6FE198757AD6B049631F29B7C46C5E63B80F49E48CDC3EC827FEF8E74D96DB18B0FDC78CE756F155CD07992CEF2E833C6CC3F6EEFC50DFBA0914554A40C5E85849FF5E4D79B9DE12353AE504A3592995E4EDF1F3E6D768D15BF1EA9CB4A44B69FF451BB4E796257EEBB176F919BD82922CD7DB1EE784B304C52BBBE1854EAD923E5C51A34CE2322AB7185C9920F955B9CF88417B9792FB2FED46440A973A1711B4C5C39ADA26456943559EF7EBA0957EE1FB8E4EBE2A269009AF5662D53C00CFC851E9AE760D861F7E87C53A8B27E679CCC583951E3DEF37C81A4D3BC43A6EC7BF9A15E7371ED7DC974C743F17F02B4561F32E590277D54C5A0907900693C78CFD450B2D0AFE8CE55B8300FA98B88C7E207D131B97BEA31A1C444A9881A14943E256059194DF3D03F8D07EF3271911C7E8A04FE30542EF7AD3B6A4D0AE7FA5B84ECE3A30572257C3513072221D0FD8B999CBA0B1719FE9A28766615F5069627FC198D6A819856D8E13EA76A18D4584E2B3983ED97583EB694E65B2867C5DD1CBA79D90D6CC86B9C2B6E1793EE73856597733A3639DDD327A375C7691D339476E45BB575F505A99F22F0E6AAF6702EBC99C28A659EF667306824D6C969CCB6248990ACBCF22A6E0E18C55BE47A1B2F407B56F2BC5F34BD0C47A0499EC80AEBF89F8BE0A41F506E5194D04B92B02FA69635362AE1983DCFADA43D90C0DDACAAFCF31687B81CDD712BF4CDE1BB36BD4390FB0980A2047CDFBC945ACD7E61165A37E1F10641AD062A90DC1BDD4B83094220728A749464046579500C6B655693B2616BADA36938D6B11CFD07D0970579C064741C398BC8D81703ED1B3674609A788276205369595807B1B4AAA539008310BF8B3FD75B3BB105A28C2D38764F4C84875BC2D53B5BE30A80171BF3F1EE62B07BD1541B75501556F5A40A5FAE0939E47A9F08E8B2A5EA151E17F469EE9D1DF162390DC70684D541F98C128DD080BF68291AE107E5005A1FFC69E399291AAF0F3599F481C9FF2B8990351D5B9076BE7C5C49F8872515EC9BB4ACF0C5F723E15E3C9CE63FD7A38F4F81CF5B795C841B7E76302C4502D6B9FB9EB32000B3CD8911FC0D73627AD61946F3D32444D299DA1CD79DFCC69541A05C90D425C9F50E91A1F8D67C86B69B36BA73113DB1560FA7133B5A91FBA63A71AC4F413999E49EE400340AD7735E09E1FA6B91F4F62BDD773ADEB491767F8C3DBB5C47898687603FCA40F717DC91F5C6CCD81F98740EB8087E7083A08254138F44A477E9A5670E6082E8843DAC8050DEC1457C3B7E75337637FB3D3A1FE6200EB77B3D0FE351256A709EA77F545CF081180CC58BF030BF536077B650083E811D1866B3E2E3D5EC451123CB73D700F98ED5981E30B506F8542DA8F22CA70887912DFC06EE1397BE1F64E0475513E0E486D85C1E77C045A3286AEA26423A6B178B2ED968E44534A9239DA10385144A24337C76AA66F54D1354B37097A7A0C5EC3C96D69EC08EC8F62A039DFC6E9A3A8B77DC086530FC8D9CD895795664A4AAF3994C391282A41274ACBC4B6DEE85695115D20F7275E09A8E57508DE27278C47CB25558E26CA7CEA390492ABCCF4980FA7B43DD230306E9E58420B5CB9AB6BBEFC0762D221C86BAADA78E3FC5A4EBD418C94ABC001049DAAD7F132E23796197ABA484118D0A5FD04B7843E507263E4A0C968513FB87E02DA811BDD7529586BAD891717DD307682ACC44C8FD3156CD52240F6CAA8CD6ED7B2D4AB6A0A66399EAECF0D76C6650BDF5053A7FC8D43CABC4A1ECB5BFCD4857D47CA0BFE7570A27A19B608D4C955A23019B47D0DBA1B6D21F481F026AB4999538F1665EB6F6E6D62135B36BF75014AB0A28BBAEBCD0C9C0B929DDBD86C224991062DD9BCAF8D84A4A8CEE1192922652DE1CCAD11339CB49C81E44948B92BE173B60A08EA9F8C4AA1FA0A208DC915B1FD2F9DA63CCB990397F41B72F964F1ED31C4A50CAAD02D66E8C4A9BE403CDA4AC0E1274EB7F3589C49327EC0AF71DAD54D1B56DBB1641BD52737E786619715FE4BB14159D8668DC06261806F2C9271E2C0F68950853844FF3CBC9139FBAFACFF12F5041F61D9BA7C0A0242B5666D1AB8095778A4FE6442B2430ABE84D6C0A3735AD3A2EAFAE710467DA963D551452740F96A0816CE5630637911EF7A6E6E1039FD008166E135C2753F5AD3AF69B899CD326FFE5B385E4420DF1B33E251A13026B75DA558C85F740A7B55AE7335F1CAA711E648A1B5AE7DC546271BB4C4470DB79B883A280C5C5CC0ABD880ACDE7A6F32C15CA6FC31B1E98E70E3C9D93F4EC5FFA91F1C1837837CC715DC8A3E5037C1936DB2880A8A74E3431062A9328841046067A20C71D9C03864376C10B0BAD132D7656FB02C62BDD72B9B2B0270FCD0680BA539398792EB11BD84F7D283D2C3295C34493B0E406566E1D1107090D7C0D46C6C9A6CA0B734AB6B1AB11D1E944DA0E06932BD9A2FF114B0AA6963D88BD0AFF31E320B89C82DDA8DDE23C91E28E68616E916570AC7DEA75ADD5A8E6F67F08229411E2AC6D85D42F05E79BFE430629344120922C1130FFC44EE6380EB5AA9C53E0501F905988BCB61294EEF2860BF139442E492F7808FCD7A869CE11979A91346A206F05A58B7164C93983619BAB9D3B382C83B12DA778D9E9739D372D83F727A4AC7DD264C4E2B92FDC06C3C3D53A2EB0ED34DD47D7A21553F76D5067 +smlen = 2734 +sm = F21B63C5CB868F1932B5D92B34758845E0123E40F7987C10643C3420D352BB2CFFC0BC3B1ADBD774D150EE4580537B06057D115D12E6331A10D3B31A5ED370D7368D566798B4C4E6725602B39AB1548F7772D985892A901907A8E9D6C6C1B55207ECD8A30F1E2965A171E121CD94D26F8447A89B2F3BC555CB87F9E22FB112DD63A565B4E289B420099B24F5E4F8F3778D49CDAB369BA335B3609A0D40AE746B7749955DE80BA51779AC91EAC7E6595D1F82C263DAC3A5945C05D642A19BDEC0E833D99C8AED9CE1979B1018103D6990DAB520D52C946B246F07E8DC6285DC510F1353A04EEC62607970841BEAED9BB83A367FCCF0145DCF522F7CB2E633665AEED8D5DECA872C9F7E78EECDDFD6EAC3AD2FC372AEBED4C33E7D6371A1D99154937568CF7E4C7249A5DC9E62EC3508C489C83F5448C72C44FDE4F86234D9419749FB561E5449E1751FF1C4EB4D148132C2931E14B29E30397B81475BFBCC9B93F659EDF395691E69A8CBDFAFB1DDD6692481973EB11601F6122EBEA9D44B845A1F4EF84D177854E0E73234C7161923845AAEC5E5B5603317DDC26492B6392E8B5A954AAD539B3F215D37242BFC48BD99ED17D767F8590F4D31C85664732E4ABDEA1EB4E6CF9056F1332A232EBC95F5F5F306D6EA867D223F2B7CE135C54E133579DA4E08321A8AEC905AA586095DF7AE2FEB9D37F7455F3E1C2C04F0CF47F29428664EB0F100E015A71D97ED40D9D8E4F36BAFB152872CFE42DBDB3494420E9023F40A5831695C02BF15999E636A3592D07AB63F5C91E8353F33FDE10BCA5464026E0A8A18FE72AA533263A4DAE0094BE6CA57C5901E0EC4F94AB41F607A42076067AA760E19AB4593FF503A0DC4097B671835905EA10E8274DF89687ED185D048688935F4187752D2122CC1E7D45B4CB5B6DC54F7BA98AC73D717BA3DA1B25E95A78AFF6014D355F614BE753CD921AD2D3F4C8AE146030B79AEA094F8B169259280EB39FFD4E358E144197EB352AA230BB4A2DA8CE961FC2F85F2C60794B335D4888E9DD476A70472AB263057DBA8CBB1F69BCAC15C1E99DFEB3E3748C1206589116FC6E762C59F661AFDD0D6FAF1F7735C68E18CBF340C949F382C070BFF3DAD1C40291A400CA01199FCF1DDFE3DEBB18C9E8E2D7F578B2E412F7A71439B9EC54ED15B640E3B92D3DCD7F377A4BCDAA43104713D405C7825AFFA46AAF43FECC01D73362138213FEE17C68EF7AA9B5AC6E414A49641AC2C7775E299D51861F1C57C9B66687DC0BB7E3E4D4EB110D6D29C59B1DE07EB68EE4DDD02884719D7B4C1D9C5064DB743EC4E85859CC391DA78737969C040D8F0B0ACBD6A4B2B31F6622834E3D20E721147F49CE5129EFA45F8EE800B3A23CF4CF14C61F6C79AD35B1D04B503AC678825481F26EF4C9A5041A9AFAA1925228A41C6B94ABB5833B356299621E0EA368932784BC8F55F860963928C07F454350E43926BF68F1CE330409A9D0C288F1276FDA7D13020A2930358A6EC6425DD93188256B0DC2F55E69F30F3631E9BE7086B02BB2B40F5ED670ECC96B31E3A4B5B1B84288BE0EDE0B2FEF33BB017B7941D5F2109D1958C5EA5F6259551A44C94B157EEE065FA369DEF66B88C8200B6919FD7B029C7DB6BF11A0884AF868EE5097796A39789C64DFFD55288917F0F3E81F507C2B9869E80074AD288F15968F7A60492B3647D2B0D9FD367B1F7BD082F545A263A76E2E0667EE76C844FD8A2F4E4E07EBF88D3FEFD355B888867EFE94EB2A0B231489C07FFBE204451B45709E012B47590D9770B22E23FE7CB02430466FA08A1CFF9FBECD6A8C6FF7CDA75C10C121B06E88F4DD0BF42BB96EA58AFAA087028050C3CC10FD3575CB0F7B85EE8B5A0B4F1F8798FDB493EEE3FA942DFB21585ECE878E3C433337BD6C93FB4B98EA24C4CE10A92254952220B4C7281E5C4381D53CCD20D18F45C51A661FDB2D3312B79B85E3E07A0DE6646855872C815038CFC2887B0E48417175CD781D4E358778A3E8BAAA2BE570E1B93349F70123E0332B70C6C1811867485D2F321BF41674AC91688880D36BA4D1A8A0C89C8A2D7F204B4809EA1CD137F0DB45CE1B17247F7C6A68BF9736F561FA3A86440AF1E520CE8ABCD40BA68D796C2EF57B1DFB2105A84C604DF0B93FED3E1E662A495BCE63B51E8349E58D191B2E527E0F8F04CD75CB475291F3AF974D1239AE146D292338F5F320F3541159CC8D3A1D87D20D5790808595F12626030A497091DD2D53AF680B16599D91B111BFB97FA95FD5B3FEEA0682AF563D5962DCC70132FDE4889ED1CA30FCC65EB1F326360528C0F0408C40722DF988C58B6B8A5EC596AB9CB87689BBBD5F7D7A4D00031586D6D748B601A957BCA8E07939FBE70BA777382311F4F34A584B0851CEFE2BD660E32A232866DF1EF1461CBA9FF3F38B1F81443DC3DA352B835743CB7CBAFB499F497BB1C9D7A5E94EDD028EE8F118AD75BDC09650D04FB4DD249B931E006AF78C280BD2A6A7254735758EAC8DF3AA7B9354656D9C5A0379F5508D4B5FD0C975D00623AFF22AD79AB9BC2BACB8444B59BBC1369EE8E481C4E6E17A539869277114086FB4501292C1B739777F4EBF133BF02ADE2CFB53BFFE94358CEC5F3F1D6443AC849ADC78969556DF43FD41ADAEA15139C2411860487AFA0109872E912BFE1DEFF84F6F372F4D63B2C09E1B944898601BAA48628C4E64D7B5AB419F6409C6874D0697472F4A925F2869130BB09D105514DFDC48EE5C8D2598B867A38C959E79CE2323FA5042B0C9FC0A85021C933ECC4AE071F942D8FAE5610A44DE177644117F160BFC66306C418273FDB41D695B569B17CB79F96317D0BA86F789282C6629EAD3D031840F2731D090AFB611335BB5D4FEBAB9B7508F4EB555B82F7F5E892ABB3EBE72E84B6B837E228CAB77B268837CAED768DF367E9057201C1059CF5DEE84B3B280E71CBDB087C7391B4D9FBD0B9927B1FCB5D590CA8F7B1BF0BA75862D38ED3A5D3825C9600E55BD5EC54D34ECDDE23B3398EFAED143E31658D820181566AE658A41FB9286EE39BDFB13DD427037D67C1D41888FBD0E7799974D776C0123CC7D77DBDD1C9CCD9AB827C042AC52E1014CC87452780DD6D2CD3B98EDB688D6980EC454FBA5F8DE9A32EA313F7547495921B7F5E29078751C1F7C777C53543003103501F9CE50DEFCA040A592858EF9A87B314060465FC99007AA8BAF2194A9385DD8F165071BC2636CE33BAEF71D19DDD3FDDAD96C197F9245540FE1778C9CE4506A990D21805712EB91EE5C8ED84EB27ADE8A1E2E1261C6AD7CEDDCF17097E2B87544096AA9642F8B9D2E28D5DA7A344F58F0FF77532E30E41F25AE98E022E15A654C775914198A5FF2E7A7216B6AC733E2B498DDD533CA2D779878B2A27D5194FB445EE28FAC9206BF0142365CA403453B074896EE6706151EB706948D8D1C5795E595384E66545146D0865CCEF3BD43C43C45ABC3AF288A664BFB6D49D1A4705F7CBBE796E72230E085AD6C90367B9B9E02E4228A65B2B6F50E66669D5E3A0AC47B3B618571409AFE7A0AA1503971F85549594BD165F5F25289B648768F0C15A365B815A894240CF2A9607852C62A835B8010616191C48496A6E929FA0B2CBD1D2E622232F353C4A51585A5C647291A3ACBDC1E5EAEE04132930315C6676ACD4D8DBE80D13182228343C42477C87909AA8C8E5EE0215161935454650718690969CABBFC3CCD5E8E900000000000000000011253243570D1420A265006023101014006A50808010011830D00804524095000006C64243BADBDC8E1C015A0DD81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8 diff --git a/tests/KATs/sig/DILITHIUM_4.kat b/tests/KATs/sig/DILITHIUM_4.kat new file mode 100644 index 000000000..b462cd0b4 --- /dev/null +++ b/tests/KATs/sig/DILITHIUM_4.kat @@ -0,0 +1,8 @@ +count = 0 +seed = 061550234D158C5EC95595FE04EF7A25767F2E24CC2BC479D09D86DC9ABCFDE7056A8C266F9EF97ED08541DBD2E1FFA1 +mlen = 33 +msg = D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8 +pk = 7C9935A0B07694AA0C6D10E4DB6B1ADD2FD81A25CCB148032DCD739936737F2D6859F64C663916795E9D42A628F7A11FB6CAD6BE5A229206F38EC3E87E7487C6512745FED6D0B64F605507C043E25D103D19673493730473CDC0EF780A83F23A5C6C3875BC10B6A053B13AAD6FD7FF1ECF8F725F460181460C5C75E05052FEA0DBC4992EE04322BB21AF25D784CBD434DF2A87AA486AE7057FA04287DA5FC0D0088C1682E09E47ABF30836C38242C8A4BA58FA4B7A172D3B0032516563FE46B72E49DFACD0033E444F5CEF0FF497D4D9D9E5B9886F4B47299D635241A6DCF069F1ED1C815A51A6F7C755D3FB2CF0D619F848C35C5A61419A53CBA51930974383828DAD667C4B8901F7DF68F49F7FA2069F2AA5C7FDC85D37D0663565711DD1C5E65356DDFBE34A675C6F55A185CBEC69747D3F248CC81D1FB7D4BC6E3F785AD02170017D2A985C5CC9E105CB5DFB8786D4578013E793B0AF057565B5FAA4F41C3EA710C019F87D7E39BBBC093201F76ECB19B4E4BE14908639E446C3D1B135048B72D3863093921CE60C51C70813F6E8F0B06938B4AFA796D16FB65F0C1BE6F215A4E3F0846FC39BD6D2C33BCADFFF2A9ECD9640DC3CBFEE6F251FC53A5350BF1BBC12C94B263CD589B56AEE8AED891D342B76BD6215D93211EFED7C4A86BAEC77BBE118CAC74DB9BA4241F119FB7F1115DD0AEA465A83BFB07D7F595B66A7EB257B395E804581C258854BF7643F2BBC4AC2D2112070C3E67BAB0D406759EAE6EB90BE54EF9227D4B166AD28834222685765711877A7827B2BDBD7F5F8F219924ADD54CC3024924182C542C81011021D851B397286F5211C82DEF9B520F56464805AD65DBD8C6039BE9486C072C0430805131BE1C1EA43CC08E6BE9CEB94ABEB48C8DD39A9DE0BF0A332CC25EF1B36A36B06F80D559B46E24D0302E82B81F1ADD48849EED87C3E3BEE7AF5CBCC96017E32E8BE0C3EBC6F19874358CE70C851ADA6BA8685392C69B9062CF74DB3C53CBBE8E7782BE79E09100DE3211DF2A57208314B632ED8799E4226F7BD087902ABFD1F3BE729F8608513326F3F4142D5A9CF3C196180A23CBBBD37DE01C6064A75CBAC5DC7731576366F3C706EC29E0E15BEC348A607E2CFD42A392AF0E8C49D4B89CE0579D186F0C22D84C5066F1A3DF60EED663DFAF6A35A7440D4C76853D744FE186D989F271F15C70AD7A86091B77867DD2C4FE5E2AD843D7C99A60B70768F3844F5CC3555F8191B56C8B5C62D54D3DE7BED980134F151D7E2CE982F192C010842BD4AB440EEE9836E872C8AEF5E2B86578B368CDE15968614EADECCEDE72179D4CC1272EA35BB7CB092508C722D6DB8E8CC9E52C0E707E44AA0237153AE20DE9D7ED57980C1B819F7B3A859402B1CDDFD0C49184B9A1204A1D3DB63FF9D6AB79B18CFED0BDB76CCAA24A3F7B6E77CA73D63F15B2E986765D86855BCEF5D453DEADA48C30F48BD33E8E135112798FEC744EAD8338A7787FE59E3B90889ED8963509F68020F436192E95441127E03F76432845476FF284EE6F1628C0FEC65EBBD9B48F2025F1434E5A2235F8FCE873D8CCAEF94C3BAEB200A0800A60B9B1FFE7278FD5A3AE30C893436C9AF57D7E0D62580D45F2DA7770E4994A1031E7BA1F33CAA2E20EC8396605FBD4C7B32A1D460B87BBDC1934698E7F571DA5608DC1DA58054BAA0B983E03484CFBC32D01CCA13BCF0CA0CEFB74803B9FDBECA4C7042B728D2B7B3F43C47B0A42AD0C6D5262BC398E716448BB68FAE542A0D5F46820BD78A61C3E833FD7BEE3E398F7C91B89F89E5EB12298ECC7BCA64F99F0A5F48F53F1677EE13A1E1F37C1A8DD2855816459B3F14A10CAE3D7F19E0412AEEA53B4305F0D022885060DA5F2B46652DE2F5AFA8BF7E6CE5A6E40466C792D31750AD2840651A442B673537A76EF45FA1D38FF77E470521773992D56994126EC9EC780473A0FD5A7EC9F3CF781256F4F1A969301522193FD8CB8CCD5F94124F2C39CAE45574761BD76F64153934BD220B48FBD0FCB5D739833B203D554357C8B1919A46FD84FA39643F5E059EB74D13F8B9D0E773285FE9DB5D9856C14D76E285CFB7F1E00CB216CFDAA91F6844DC0813F3ECB53631B1CD94194A6926B01B35A316169A672BCB96F3D3504CAAF4C08132C177FD4738512823849147197C873DF3C6DD2ACBCCD2557DD964344AA115C9472F38BD98964A4226EF913B64B5405DEFCA1F008CBACEDE3F6326BF43663EDDB7E5FCCA8EADA886BC9DF42EDE4CC1429CD7FF4C9EEDB2A210BC28AE73D6233F6F6570739A0C53726C32E2E95FCA8C34E36093726A87013A3512D88EA92A6B957BF10A6AEE6E976ABCC95C14A8EFE60A2C1AF0ABBE6BF789D4F69738092AE3E62AF1773ED6A42F1AAABCFB98731CE2701F42E4BA9E128B67261C598D3189D06024F01E25354D60327FB6570BF7E163FA04324B32E7EBF8B78AC2ECFA3D36B13A59A3A727029B +sk = 7C9935A0B07694AA0C6D10E4DB6B1ADD2FD81A25CCB148032DCD739936737F2D3E784CCB7EBCDCFD45542B7F6AF778742E0F4479175084AA488B3B74340678AA73FD5E3FE6FB80FA8471C08C6882F71D862184C35F5576C06597D8DCFA36A80B2C255A599A55B074AF36E8DB7923F76891B47909C5154E10B20D120D98660B08AB6CE8EA09A63614ACE0C041381311C9D5146A71C0DA41A249916E6D12F2C26AD24C558C86616201D83212C30424264BB2A2ADE6DA2E36A9E8288E2CD3CD5D226D66C6BA020C31196943E4046E7167891314744A47B050C3618D01222A5A6B6A346026000168A6890D95102004820C6B709489507326D4B50B4048823112C2020DE278D0202E4A0741582C479CBB152E8D247310D6E86601B31CA575B9D4D5844E08B9C946C48426E99AAE6B3394207935169058D4B25E46C7290947A019B0162AC6E1C04270046243E1CD6E522586CA8A15512C69B1621289C989152C8DB1012C1CB214055B1B95CC412927C34AC851CC651952135E3844808C322B56CF1A680D80D3DA6DB1D5F59850853830426A739A4BCD50350D5B4B869022D84E55A8239D15255035089131DA08CF2AB3154333C85D415943D499309445D43C6016B21445ABD1D5147B85C88A1B6C6640490269AA4583B266748168952D51196B90AB228455C971AA44001C43A96247930EA6D2A2C638A5172F4A253A04B754913807429445F3A245E836C6488A08824D971BDD36AC4385D6D24D5D88699BD44E8C0CC3A556B3540A266C216B5D3D529E5D0D9A00144D32085809D3D938351DD0B16929571A43C932D385A8900C6D1A2B743AB916A765551C111E956C9030798B678E0A3672CA502798E5466CA214163302112CC3A96DA386A9AEA110275008D9B3B9C0511D139E5A66E00C767685A60B128F93D04802282C1E9D8C5B011474606643C20D421BA38A442592449041068AA92441A681D5053AD46C93455D8C1888D45A203DAACDA0A6AC5445B30B13B1611A08566D6D8DA6DAC08D0D33CE9996B48BDB8DC88C856E03B2C12CAA43602760C19554CA2E8D021983803A431DCCD182398190D1C240C6286CB58C6A15EAC818426A6B010593B15315AACD96CDC47900648A24B62EC610B03238BA66A26AD9122C74C9155844D145D4C9846D97555C39DC40C283DA468248331402A6B15878A365538D2507DC145B7339B228B6D1B65402859C009537D16BB4A932B9D50B44B4036A0CA9214E8195360CC0726559C40942399348D203449BA542A4D99A19E46C1AAAC4111B412DF3B0CCAC39A5190547A0515651578C5BEDD662DA5A75506C1311633452232546782C93C5202080592AC2A4E67A4E9C70CEA48E865D7361CAD113D2C5F6EA952AB86C906923ABD559005293515937342BBAB0B41493E1AAA820080EA9CA3051B160AAA840C13A5AC5B0021AAE1E2C9B6CD70E3239065092A97192560226CE9C416E501C964CA07A136199010B72814545521A0A6C3157136A71428D92E560C89992429A91A6E94A94A258338E8AAA80C88923313B6E3376441B57121037ADA6360E43D619BB58EDE291831A100AB7B90BD32A435C4F341853E4E294DEE4C18AA50AA5914E45B96CE4C64CAA640063DD1A33DC8142C70D4B80825829937881962F23E65B5C42DDCE0B7D97D3536BA3D90BB36F47DB3FB138A03A8DCE079071658BBBF2557E54D6FD7C88FBBDBD7371033C865F24821CB686C724A075F234EBAF37AB7CDC57ABFBE37AA60A44291C66008F224E3B1A0E5E17C5F3ECE3112344499031B21F50ED5BB5FF840C1316456BDC825EB9039A8F627E81A3BC3954F4A4FFF57371B46B17F5B684532CFDFA647C73242C82C1244CC141D3972B2CAD8814FE61EC80F0783CE0C419B6736EA6D7FAB2189501FF3778115603D94ABFFF5D61E281D8C1AF332B63F9CA134CD00BB94F6B33672E92D421EFDA706E4704D38976E339124A7BFC218561D3B9325C0969EA0D0FD83C38D8F98416DB585BF16CAA1E11D8CF2B9A9147A114342D6A40AF35CB145CF62855AD3196BE6CA9B88C88E3036B33007B831067EE4608FD38F11F102ACB3090FE7C1124F8164F99E75FF97EA0DBAA2078F59058DD9F4D1573FEA0E728600ABB63A9B999D1D915271CE75B1205A62025691FA4F8AD8A83749465258134131C01BF3D436A829EA4FF36A406A8912AB60413CB67E127E6A1F3B6CF3D8C70F2B56FE457816E17308C60053724D0970F7F41CD4CB4F440BFE4E60DF688B536CA57C8F015D8FD8DFDC4564BF17940711DA724A9B986530058C42137D5CE52401C26FA5992939660DC652DF1DD919959C7D115CD1964B04EF03C30D1EA2947DC2E945DB878B4D7302798AFB93F26EA9A95BF20EF05837DF6DCC0D9624BF0D4DF28E0B6AF9D98C221961AFE1E728C35AF7C6B42CC1870AC27AE90DB78CB488507E8561E13D5B172B2DE086644B39C1944715D26318E72F3219179186A9FE02E41FE64A955CA044D1DC797D48A8F74DFF4177539020E52207F018D07A5ED88D72DC6F1E92B3672594AEEF37EAE5EF5E1BFC87F4A9836B2642A4C8ADEDCC51CF070EA4FF8BFD8121B5D43ADE5E17EAF2C60B20D3611FDC3DFFF3214E3C654ACB97E0EE72F416A5083A34C44B6E6C44BC10E925F61370F1806DF77CFC68D4080285229087AB6B1115CABDE982F1163A0B240AF6A5B9457CCED75D21B72C728BA904D07394193DD596D75E32133DF3EAF89DA68AD8AD116C00F54D551BE762982A22A3DEAE62D34D204D2CB06C1A84EB47AC9495513C1726020D88213509CC8F012FA704D2FFBE6FCB8D80D947CFBD20FEF290AD627185437D024A9A15E4366249610BB752D4A86F5472C23467895F3AD79F23717D12FA1AFE1694D6A4B518E7E030A2144D82CAC6503BE53560648D6EAC3AA194701765B2BD9EE9B2AAA5362BC79A02C2BF73AA5411CBD04B916B138FC7B0D550E705E503A42D30B220D608C83CF2EEF627950B829DF3344A6A957B297184BA669C2250AD42938E4F922925F22887DF79E954336A3C0B7462284B4F380115CE7C32537644789F42A31DB5C847CC065A3DF0354789A2E184975151DFB96A9592697DEC9F9A8DDDE895163BCFA4831485D2C98FDA5C83C7EEAEDC1BB1C038127E792915AC53D47628AF38B30FC3BB914FD7A4C29833C949EF1C0AC5FF3BF3C76C9F659359652145ABCBED47BCF3BD54FF682452ED751E298629364D8633D248B3000967C75847C617653CB44C57CCF34F4D9EED83FD287A11AB86FFB4CA01FD82B0496E6FCED8DC6D1F6C7DD1E2A8FF3C31A361C779DE76F009D18EF19743F1FFFA60492BE1D0146E6AD13C381870E6CDBDE7E5E71121A892626E2EBB89F6F0C55C04F9BCBAFB3F905D46D0544108C58497D44C640BCBFE391DCDFEEEE3D8159E97353FE1B42F8D7099E16D73A44F3A707D048B19C6F84B37044131456F6CF52694C5F391EE3DDFD7CBE360B7299BC99FADFF692BEADBB31394333C1FA8DEB490FB654EA0C0EA9CA798DF28656ED4C60F6BD0CB2419B87A9149FC8EA236DB08D5CB5B7DC6E61A9ECB0000602AF03B449E7ABD92A9DF6420C049124D76484C922926891057174FCDEEA072F7DE38EA3CFAB50AC5BD4AAD7CAC3589772A132B2510B627A9EE160ACB7A35524DEE9498B71FF65E962930693AB8CD25484A50843FEE484D6B6C1CA9D85F97D807DFE9E3962C1F0EEFC001707644BE2522CFA0426737393936D2FE1E2897579A068FE2965DE40214B94A51608FFF6DF2D15DCE9A5B30A11014ED90C44466FDFE05C084C3C7247DF2C7274F1879F39111F61BB98BBDB03458DFABA7DEBC744DB04CD84E879BBB0C070E54B6296AB48D5117F91700128C786B01C891CC081896D40BF876A5D1822DDC3F06BCA942D46D849389655C8DEC2AAC2EAF61D11C7F71523367ED4564C0F98D5B03866618C3DE37D566E8C0F8F7A5665688739861F784292578B72803F7A4B8D031830E0EF9447009C839FD694EB4F2B4908B84D11CC2DF447A1C7B484A6142534D5623E86E6FAD178A4A60D4C8FE11EE15385AC791B69084896C1F150D50C24F5078F80FEAD9B4F518649B6B409502B38E07BEF587735E8CBA9FF4D96850763A47437B2DA8F40725EC646DEC727A8811D4E668EA97BC0237F4E4A25A2FA198C3A774B57917B72075A421A73900B7561EE436F07753109F922C0551F591FB546A881B11C8C836BF83EC42FF7451BF3E0CBC87C97297D8FD11E53441E4B744AFEE4AA0B723B806C3485BBFB6731069205101CFFCC2CE263F3ECFE8D930BF49AD28A7E6CEA75C569906B5F9355971DF4033D008665DDD0628811990B13047A6B2EECE18C625582D60E087B134737BBC926039CFA9CABAB8E3BD631907A331F1B08C09DCA05CEB149A0DF0E9A4306A049C90647C0EEE7BF84CAF91C1BE71DF4A32369896DF8BB3DA8E8544DD5C1D5CBA1340B56B6B518AA62F983A271BA389204E19536AC988687A2DC0C5DECC1F01433B701CE27B5CA70273822FC8A3F58E522EE8B8BD0B75642729D9D4CEEDBE3E8F900691ACA096C927AC34E94E2C7B85D18745E4263A160FCC7873681F0DCC036C18DD00F521A8B88D48F71D2C5E769D6E4443570E98C8CF670C6AF9746A8C287F75CC26BD336BEEC5AD8CA35D16770CF093FAC7881E822AF2DADB72779AB3ED8BC7999957C0D8ABD71B204F0FDBBAC658217E883CABB6ABAC80CF4BA090B05711BB37B140DBB374DA289D7A93434497DA9F81671345704EC03BB86825289373F723C838313C8787C1FAD5729B9E66DDA710DD9FEB8B5BA241A0BC402DD9C300068F50F94475EF2F4ADD6671192075AD24202F8D773665CDA7D2979656EFC489418FD679929D5EB584A6C184DFFE3F99F2671D54EC348322FA1AEC467F55791229F030353AF0F633A34596EC04CEC58C250E09940D489EF4BB54734F764699A453C43764D1CFD4A618FC9EDE9E345663E9B208954B5918C610DB7F5BAD1C5DB8A4BCCA1D64392C7380536F09C0ACC61AAC4629944DC6442E2308C5AD7426E1FAE75E8A3A0BBB7F34FB40F414AC797E0B70F6965FCD3E0ED07DA8B752F992D3CD2C05887848577A028127228694A8DD5573A736EA7F87506F932B2F14B5386BD071704305482813CF11AD4250EC579E8FF734E0795C503B62D6E447BEDFDD14344E18DD3FB95F072ECF7C0E5517C18C0A63526DADDC9BCAF8B8B6A2675581B9D46563ADA1C93AA27F7A2F2C4B5EE8AED3D925C6A6547F6672C058E5D959B6B9E326AFC36E89C14E6812B5CDDAB386B13F5D1441A78987BD19EBEEA91EFE472C2F8C20DE21173ADB5AAF917C60376C2776DD0C658E948F346C2CA2B77DC6B8B84C396787E62DF470E94D8AB87CA4537CE65070DA5A1BA4D224D2107FF604B1D142545958C11A3FFEF368554694F2BFA6BFF57F549988CA91E87C9DFC47476 +smlen = 3399 +sm = D78758C8992B2D0FC51A03D76B071796F915D6B2415F610758D188AC94048C530D81B2C1BC7B9519B3EB4F0CFA97DA66B8D14470711D1A851A52B372C2BEB4A3FEA33A293BC18347D151477D197BD9397AB2741AA65E37C172EF29DDA2700ECFB9DF478FF94CAC216BDDD67E2A52A283312A2B09927BA1737FBDEC1385978371A1A199543B8B369110EBE2B6DF441AEE27B5207CDD3AF2F77109F2A3DB89D300E27D9A484733F6085D21A3C4D7D27F243789FEBE361DE4829C20441CD1938ED9F283AC3C9A2D1FE8FE6055ED3C511C8307411B65DECDFC6DDFB5EB0E1BDFC70AD909EB11B3897DF70E40656E8D869C24C4393153F38C7F5851EFDB40D8023F6D37518FBAFE3444A884D6D76E8E995422A28CA13C223200F3B51DD4A06234A69FAB90F3380A125A632459E489D9214E837A16A82D5F289DD60006034AD2C2A82C7E684ECED1584E95E6625507B1A659C0B3463B9A11BB7C0AB60433A785C9CCB7941DEACB0BEB510B39500A4C6E36DF964C8236481E73BD5642CB1012DD5E91D2DA28BD293058B8C49E8168AA9F16EA459387314CB61665CA621D42D682A3489323F472844BE5EB6DD17A0BE4A1181B5557B3B42F9020DC3A7D1E550C85B1B2A85F02312C0103BA75B7092CC13A9CA68A7B56A55828FD70356481D4BA156BAFFCE3EA26C5914882F55AB3FA73B4BF18330DB548200D7DFE0FE7E84FBE50B99B37EABE3250B9458ABBA6019EA54A49190DCA0B627C3D4FE443CEFD8528E493AABFF8493267581FECF80274BEE4DC5BDF954FB03EA8F0963FEDA3D1A1AEAE115FA297576A12F9F2390C9CAB869B225437642360724F3F0A9F71979AE4E3031E83B2765263F491400E9B908854B916A12F67465A4601F4932FA711F1B097C13B886E0DDED9E7AAEE74FADCDDF38D610649555E7A13A4DD0284703A6D147FDCE86FC1F35DD70DF9B69BB4C3A076BFA46B05743DE63DB337D20C143C647B86CF8FF2E2267CC95E0AC5575DEFCDD2A5692EB88450B3498778CA1F48FA2A590321D57B76D53C2A1129A3F20B42B3DDC7B5DC5FFCB4C5EEE0E3DD629E381CE8A95A65D8C5AD29E786DAA58EA2C12905EAD9C10406EC50E9EB9FB3682F1C33AD48730CDB6D4773DEFE7D07D3C9ACF7B40F0E3D572C0A102D28B52DBEBBAF403A25411964F35552B0DA4280EA60A68C29A31FD499FF48987BD8328E843DEBEA22219BAB0807D14F783460847034F4AC3881CA7CA674D44998E0AC04E9042AAA1FA674495FA08B0D43E035CD6F18981D7B96BE617C2FFF3F3B7750749460A4BA1752FB71375B10D9BEA55BBE86AD9D9DE254DB42D76838FA813A4D765D1A6F29024DFCA613F618BA263E97DBD0F472FA5C0114BE0E57BA50586DB31B6858A6261E11EB08AE66EC3BF97007D60B3731A13A60E6BAB149C1FD1FD660BB113C502ECF67653DB1E280EBCB15221CED2C2ECF94C229AD50394DD7CCFCE9B1F6402D49B7AFE37EF3270B19A728D45BE7DB716C86A6843FB964FDEBD7A6FE30E8F30F1F3A7931F68529C0CE9BA4750232E052FE8B61221AED890BF49D15BDA3368F096A9E088F9475D5403CCD267B9C5BE52A54BA818BC6D99B4D383F1ADB5889CCBD29E2268C3526E5853195DE86119F2176EF1A25906E8E74B046E6FA42B466BA0D5B217C1474F6756C8F874469CD9F1D41151BAC70620884D3354F22F7441453590A6B934F1BC6B56139830DAB8EE971EFD0C161A9D0F283F344A42327FA532D1E4523C5C2A12A801E0F923513FD7CB735E3B2B250CF541444515ECE10F6ED7C3AA41DBAB0F4E2D00F6A32B2B2FFD86FD5F4FE1A10C7DD10BEA31BE8EB9B82CF72C200156FE53737BF003174FFBC72A09C10B4A435135DCDE575B056229CCBD26A111AB45E3F864ABFEF431486C8A471A227F514819B0B139C4C7298B5D807953E8640FEDE284F1A96A832ABA11000AB726D30D3CB0CB779E5504572F2DAFAF82E59B819380B4CECD17BC7C33BBA1E64521DB2D238743C5A6375817829415B97DAD134AC400AA0E41B8B27364756AEF832E88E5A2971DB85792852DF55A7E8527D42B4C1AB8F80A384A8F37C0950415BE715795C884C882FDEA111F667D4656C10A5CF5AF6BEB5BE27FAB2D6DDC481EFA74AA78FA566E837EFDE77BCCF785ED7CAD64B1E1FD519F3826074B4D28677B0B1B99A1D46E7FF7075D24478D37EA5430C6EE8C501BFF4E8703F065B83601B31B90DE5014AD4558BF8806990EDDCC85084A0ACCDC1497C8C699F8B0C75743B66FB4E2AE799A0BD3A9C3F2297487B86334A73A909FDD788E9CC02FAAB7757EEE597896C9CD310BE5F3E4FFDA80447EB4C4E58EFCB00908BAAB3F3645223196973439AFAAF533985AB813B2E1978B3AD7A1900D9CB644F7E28995DCE47C879BA1DC27B3B14832288C908CA10D72599176B1558C8CA1AF9514416A760F3F7462159EF9579563EF6E3BE10B854CDD7E824DAE13CEE70C871FB6F9BCC2C62AA416FCF57A4DC22CAC3198AE5ADF6E957635C95A8C1F8EDE8F5B514D681CA9BF96443958DDC00F06E38D8B495864D5DF56C32D23EA93D721C66E649B25F5B0244684B58B1012605550894A28DAD1892966A560E89AD7C1E4BD1766E637A4FFF642C8B14FEB7AE5241AA4C9035EC02F17888737ADE490FA792E7F7625E141F9595E9F262ADF418AB6B31FBFE3B2E974AB6F52C960B8F729CF5E8497860125CA6229952C071DB258EFADC6DBA70A102D5B0847B166F21466EBAACF5199A8A9B68933DED39B64487130F9C33B51FA7BD533A1704E48342D6A5C0BB53972AD9F7E63B53915B3D87949EDC6C344338DA7B15E07E18FFF55BE25D8ABB06822CD95FB1A326C7B5D0FD0C97104BEF067AA30016A133254D02BA56523E80E3B6BAF9216E0B1CEF65E2B8E46D85697FCAF03EAB80C77445CB10366BD0B8B1C3B4DF32EDC06CF3AF70FE2995517E69FD2AE0BAF9585F21F925504ADF8E8C91FBF2101CBBE797A26640D08CD1F8C64181E3828EF2EE46208B93123536D06EAB4A29CE334F43D471EA157FF7A8F31A387ACD03EA4B5296B4971420E1830EA0EDE81C8B96543A9FE28763FCF56B9AF43F777BCACBECC8AE13C3D41266558BEA428EAA10BBACDEA944CDA59A1AEFB482548171C42FF9C0E9D246935BB80B3E347EA1EF9D1C51EF455DA2DE90C87CDBBCE13D2FBAC8B4D4624C36F613490FE5F97E44F91DAE674B09C278A00A952523993E92C60396E99F916726A9B7115FE9E2495BD7102D9B61961AEE0254B327BFC0644655A85D35918CA7D5667EAFAE113A121280504EAC122C041DB2141AA0853815C149962B4D9C5599ACC72A9E15F006A2519609800AB4EB116D7B36BEB2597E15A554263BD3B0E78CE38B7F608311AB7BC3CAF438C506B3231743FE3E29F93DF35B34401087041CEE3B75AEFA0AFEAF09A6EBF6D2FE4185BCC6B39AED79F3389212FDC09FA48A71FE6A2DE33D40ACB6EB59E199B1CD7619AFE96ED546EEC564395FAC3B49A5E7AC20606806F19127C6381EE347936B35E3074E23EB9EB0B0872D673054BF4FAB46D9C3C27582318A0556AA6F5DCF79259FF847C0A6B528D049EE85E5E2D0572349438912515AA946CD2AD7F893A9C4D0160A24EFAAE9E2891AD962B962080A0665FCF54BA3E37A830A1E595ECBD0E0AC37012E97DE3D4DAE2CA84275259988FC839E0D59C159A51853DF57C622CA74CB71FDC2D52001D4F804734EC09B090CDE8371E26BC57F768C5FA02BC66C6AECB044DA59F2CF5293B8D86E61B86E84EB6BA4DE6F44ACC5662E347BE838EAB6A03B3F1EA990A322B0CB13092287E7FF52F93510455DD2AF811FBAE2194801A90DCC2D6990591FF90AF81730C7DD1391E78D9B0E42646155EF4C53FCF6239CAE7CADEC2E8DB1FBAA911524454C49184CC1A77E572A0167E291C0A1ECBD9D31709C277CE541D325563C2EC31E0A8B542CAE34DC134F667996D8271CA6E90BB8446FB66DBE61D2742C38CAB4064D2B40B653725B976D37D266AA6FA8B29963058E06EFAD9907359DE3DBC22705FE6AB7D5FDAEB90233EB94CB20400B5A68C9CEAB1A16BBBD5F1B90556AC93850ADFCCA90588A1AAD3E7167EE2690EE58C1DE36D27BDEEAB9D819D69DFAF9EAE55E1CD3A97A5FB3FD10BBA29D84C69C14B22EDDD991CD4EF29FA35DDBDEE6C9A0096D4E7FDFCF7E283C89917310C890BEEC2C8C6CC0E6EE4AB5C28FAACB2E00BB93D97E5CFBFAF8F78BDF902D25DFB506A3B10C0648AABBC5D4CA8B1A466F041BF7E10EF51E0D7A3FF5B180ACBAF236A38151B956CB56357565D71E4260F2F63512DCDBD3C35E540F87726326AF2A3CD6EED2DA8E519F9F60581A582013BC93BE25A01371DC8C34BE1E8824A2D2120339D6E287EC0CC43D586A04F80875B3766483B884A9202C1CDB4DF4C11B1D79B1E4F2AE886E81A1FF7BCAC8988953214DAFE779A79DF51A651A512DB2562B7C1D4671D52C517081D53A792270B1C305515FB7B6C461BD4CD0D7C3175B146FE962A4C9A9081E394960689BA9BCC6CAD5EAEDF81E345361646E9EAFB8BAECF1FC01121C293D58687D7E81A4A8AEC90F161D738797ACAEBEC1181958679DA1A7AAB0EBEEF0F1FF18323C475D6A727F808293ADBDCCDFE6ECF0FD00000000000000000000000000000000000000000000000000000000000000000000000F1C2A3442558016150078782C25100C02018208D8808202C40201202780844A001282020050644AB2B416BF7C04D81C4D8D734FCBFBEADE3D3F8A039FAA2A2C9957E835AD55B22E75BF57BB556AC8 diff --git a/tests/kat_sig.c b/tests/kat_sig.c index 73574f1b0..9380c2d73 100644 --- a/tests/kat_sig.c +++ b/tests/kat_sig.c @@ -35,7 +35,9 @@ void fprintBstr(FILE *fp, const char *S, const uint8_t *A, size_t L) { OQS_STATUS combine_message_signature(uint8_t **signed_msg, size_t *signed_msg_len, const uint8_t *msg, size_t msg_len, const uint8_t *signature, size_t signature_len, const OQS_SIG *sig) { if (0) { + ///// OQS_COPY_FROM_PQCLEAN_FRAGMENT_COMBINE_MESSAGE_SIGNATURE_START } else if (0 == strcmp(sig->method_name, "DILITHIUM_2")) { + // signed_msg = signature || msg *signed_msg_len = signature_len + msg_len; *signed_msg = malloc(*signed_msg_len); if (*signed_msg == NULL) { @@ -44,6 +46,168 @@ OQS_STATUS combine_message_signature(uint8_t **signed_msg, size_t *signed_msg_le memcpy(*signed_msg, signature, signature_len); memcpy(*signed_msg + signature_len, msg, msg_len); return OQS_SUCCESS; + } else if (0 == strcmp(sig->method_name, "DILITHIUM_3")) { + // signed_msg = signature || msg + *signed_msg_len = signature_len + msg_len; + *signed_msg = malloc(*signed_msg_len); + if (*signed_msg == NULL) { + return OQS_ERROR; + } + memcpy(*signed_msg, signature, signature_len); + memcpy(*signed_msg + signature_len, msg, msg_len); + return OQS_SUCCESS; + } else if (0 == strcmp(sig->method_name, "DILITHIUM_4")) { + // signed_msg = signature || msg + *signed_msg_len = signature_len + msg_len; + *signed_msg = malloc(*signed_msg_len); + if (*signed_msg == NULL) { + return OQS_ERROR; + } + memcpy(*signed_msg, signature, signature_len); + memcpy(*signed_msg + signature_len, msg, msg_len); + return OQS_SUCCESS; + } else if (0 == strcmp(sig->method_name, "MQDSS-31-48")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "MQDSS-31-64")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "Rainbow-Ia-Classic")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "Rainbow-Ia-Cyclic")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "Rainbow-Ia-Cyclic-Compressed")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "Rainbow-IIIc-Classic")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "Rainbow-IIIc-Cyclic")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "Rainbow-IIIc-Cyclic-Compressed")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "Rainbow-Vc-Classic")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "Rainbow-Vc-Cyclic")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "Rainbow-Vc-Cyclic-Compressed")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-128f-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-128f-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-128s-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-128s-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-192f-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-192f-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-192s-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-192s-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-256f-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-256f-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-256s-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-Haraka-256s-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-128f-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-128f-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-128s-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-128s-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-192f-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-192f-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-192s-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-192s-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-256f-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-256f-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-256s-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHA256-256s-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-128f-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-128f-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-128s-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-128s-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-192f-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-192f-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-192s-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-192s-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-256f-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-256f-simple")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-256s-robust")) { + // not yet implemented + return OQS_ERROR; + } else if (0 == strcmp(sig->method_name, "SPHINCS+-SHAKE256-256s-simple")) { + // not yet implemented + return OQS_ERROR; + ///// OQS_COPY_FROM_PQCLEAN_FRAGMENT_COMBINE_MESSAGE_SIGNATURE_END } else { return OQS_ERROR; } @@ -90,7 +254,7 @@ OQS_STATUS sig_kat(const char *method_name) { msg_len = 33 * (0 + 1); fprintf(fh, "mlen = %zu\n", msg_len); - + msg = malloc(msg_len); OQS_randombytes(msg, msg_len); fprintBstr(fh, "msg = ", msg, msg_len); @@ -104,7 +268,7 @@ OQS_STATUS sig_kat(const char *method_name) { fprintf(stderr, "[kat_sig] %s ERROR: malloc failed!\n", method_name); goto err; } - + rc = OQS_SIG_keypair(sig, public_key, secret_key); if (rc != OQS_SUCCESS) { fprintf(stderr, "[kat_sig] %s ERROR: OQS_SIG_keypair failed!\n", method_name); @@ -112,7 +276,7 @@ OQS_STATUS sig_kat(const char *method_name) { } fprintBstr(fh, "pk = ", public_key, sig->length_public_key); fprintBstr(fh, "sk = ", secret_key, sig->length_secret_key); - + rc = OQS_SIG_sign(sig, signature, &signature_len, msg, msg_len, secret_key); if (rc != OQS_SUCCESS) { fprintf(stderr, "[kat_sig] %s ERROR: OQS_SIG_sign failed!\n", method_name); @@ -125,7 +289,7 @@ OQS_STATUS sig_kat(const char *method_name) { } fprintf(fh, "smlen = %zu\n", signed_msg_len); fprintBstr(fh, "sm = ", signed_msg, signed_msg_len); - + rc = OQS_SIG_verify(sig, msg, msg_len, signature, signature_len, public_key); if (rc != OQS_SUCCESS) { fprintf(stderr, "[kat_sig] %s ERROR: OQS_SIG_verify failed!\n", method_name);