/* $Id: test_haval.c 154 2010-04-26 17:00:24Z tp $ */ /* * Unit tests for the HAVAL hash function. * * ==========================(LICENSE BEGIN)============================ * * Copyright (c) 2007-2010 Projet RNRT SAPHIR * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * ===========================(LICENSE END)============================= * * @author Thomas Pornin */ #include "sph_haval.h" #include "test_digest_helper.c" TEST_DIGEST_INTERNAL(HAVAL-128/3, haval128_3, 16) TEST_DIGEST_INTERNAL(HAVAL-160/3, haval160_3, 20) TEST_DIGEST_INTERNAL(HAVAL-192/3, haval192_3, 24) TEST_DIGEST_INTERNAL(HAVAL-224/3, haval224_3, 28) TEST_DIGEST_INTERNAL(HAVAL-256/3, haval256_3, 32) TEST_DIGEST_INTERNAL(HAVAL-128/4, haval128_4, 16) TEST_DIGEST_INTERNAL(HAVAL-160/4, haval160_4, 20) TEST_DIGEST_INTERNAL(HAVAL-192/4, haval192_4, 24) TEST_DIGEST_INTERNAL(HAVAL-224/4, haval224_4, 28) TEST_DIGEST_INTERNAL(HAVAL-256/4, haval256_4, 32) TEST_DIGEST_INTERNAL(HAVAL-128/5, haval128_5, 16) TEST_DIGEST_INTERNAL(HAVAL-160/5, haval160_5, 20) TEST_DIGEST_INTERNAL(HAVAL-192/5, haval192_5, 24) TEST_DIGEST_INTERNAL(HAVAL-224/5, haval224_5, 28) TEST_DIGEST_INTERNAL(HAVAL-256/5, haval256_5, 32) static void test_haval3(void) { test_haval128_3_internal("", "C68F39913F901F3DDF44C707357A7D70"); test_haval128_3_internal("a", "0CD40739683E15F01CA5DBCEEF4059F1"); test_haval128_3_internal("HAVAL", "DC1F3C893D17CC4EDD9AE94AF76A0AF0"); test_haval128_3_internal("0123456789", "D4BE2164EF387D9F4D46EA8EFB180CF5"); test_haval128_3_internal("abcdefghijklmnopqrstuvwxyz", "DC502247FB3EB8376109EDA32D361D82"); test_haval128_3_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "DE5EB3F7D9EB08FAE7A07D68E3047EC6"); TEST_COLLISION(HAVAL-128/3, haval128_3, 16, "8b447763189fe5d9bb3caaf2ba92cbd6444a54ee76a59f873346a31c4" "f5dca76428a7aa68bdc3a8d14d8e3b68d993056cd5dea867bae39a732" "8efd54362bbbac9a3c183889927ab6b29972c4e59e0327145e55ddd81" "89083c9d9bbaa32c68fd7a7b3f4ff96000040ac6a467fc0fbffffd216" "405fd016405fb0e21200877f30f4", "8b487763189fe5d9bb3caaf2ba92cbd6444a54ee76a59f873346a31c4" "f5dca76428a7aa68bdc3a8d14d8e3b68d9930d6cd5dea867bae39a732" "8efd54362bbbac9a3c183889927ab6ba9972c4e59e0327145e55ddd81" "89083c9d9bbaa32c68fd7a7b3f4ff96000040ac6a467fc0fbffffd216" "405fd016405fb0e21200877f30f4"); TEST_COLLISION(HAVAL-128/3, haval128_3, 16, "8b447763189fe5d9bb3caaf2ba92cbd6444a54ee76a59f873346a31c4" "f5dca76428a7aa68bdc3a8d14d8e3b68d993056cd5dea867bae39a732" "8efd54362bbbac9a3c183889927ab6b29972c4e59e0327145e55ddd81" "89083c9d9bbaa32c68fd7a7b3f4ff96000040ac6a467fc0fbffffd216" "405fd016405fb0e212006369b1f5", "8b487763189fe5d9bb3caaf2ba92cbd6444a54ee76a59f873346a31c4" "f5dca76428a7aa68bdc3a8d14d8e3b68d9930d6cd5dea867bae39a732" "8efd54362bbbac9a3c183889927ab6ba9972c4e59e0327145e55ddd81" "89083c9d9bbaa32c68fd7a7b3f4ff96000040ac6a467fc0fbffffd216" "405fd016405fb0e212006369b1f5"); test_haval160_3_internal("", "D353C3AE22A25401D257643836D7231A9A95F953"); test_haval160_3_internal("a", "4DA08F514A7275DBC4CECE4A347385983983A830"); test_haval160_3_internal("HAVAL", "8822BC6F3E694E73798920C77CE3245120DD8214"); test_haval160_3_internal("0123456789", "BE68981EB3EBD3F6748B081EE5D4E1818F9BA86C"); test_haval160_3_internal("abcdefghijklmnopqrstuvwxyz", "EBA9FA6050F24C07C29D1834A60900EA4E32E61B"); test_haval160_3_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "97DC988D97CAAE757BE7523C4E8D4EA63007A4B9"); test_haval192_3_internal("", "E9C48D7903EAF2A91C5B350151EFCB175C0FC82DE2289A4E"); test_haval192_3_internal("a", "B359C8835647F5697472431C142731FF6E2CDDCACC4F6E08"); test_haval192_3_internal("HAVAL", "8DA26DDAB4317B392B22B638998FE65B0FBE4610D345CF89"); test_haval192_3_internal("0123456789", "DE561F6D818A760D65BDD2823ABE79CDD97E6CFA4021B0C8"); test_haval192_3_internal("abcdefghijklmnopqrstuvwxyz", "A25E1456E6863E7D7C74017BB3E098E086AD4BE0580D7056"); test_haval192_3_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "DEF6653091E3005B43A61681014A066CD189009D00856EE7"); test_haval224_3_internal("", "C5AAE9D47BFFCAAF84A8C6E7CCACD60A0DD1932BE7B1A192B9214B6D"); test_haval224_3_internal("a", "731814BA5605C59B673E4CAAE4AD28EEB515B3ABC2B198336794E17B"); test_haval224_3_internal("HAVAL", "AD33E0596C575D7175E9F72361CA767C89E46E2609D88E719EE69AAA"); test_haval224_3_internal("0123456789", "EE345C97A58190BF0F38BF7CE890231AA5FCF9862BF8E7BEBBF76789"); test_haval224_3_internal("abcdefghijklmnopqrstuvwxyz", "06AE38EBC43DB58BD6B1D477C7B4E01B85A1E7B19B0BD088E33B58D1"); test_haval224_3_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "939F7ED7801C1CE4B32BC74A4056EEE6081C999ED246907ADBA880A7"); test_haval256_3_internal("", "4F6938531F0BC8991F62DA7BBD6F7DE3FAD44562B8C6F4EBF146D5B4E46F7C17"); test_haval256_3_internal("a", "47C838FBB4081D9525A0FF9B1E2C05A98F625714E72DB289010374E27DB021D8"); test_haval256_3_internal("HAVAL", "91850C6487C9829E791FC5B58E98E372F3063256BB7D313A93F1F83B426AEDCC"); test_haval256_3_internal("0123456789", "63238D99C02BE18C3C5DB7CCE8432F51329012C228CCC17EF048A5D0FD22D4AE"); test_haval256_3_internal("abcdefghijklmnopqrstuvwxyz", "72FAD4BDE1DA8C8332FB60561A780E7F504F21547B98686824FC33FC796AFA76"); test_haval256_3_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "899397D96489281E9E76D5E65ABAB751F312E06C06C07C9C1D42ABD31BB6A404"); } static void test_haval4(void) { test_haval128_4_internal("", "EE6BBF4D6A46A679B3A856C88538BB98"); test_haval128_4_internal("a", "5CD07F03330C3B5020B29BA75911E17D"); test_haval128_4_internal("HAVAL", "958195D3DAC591030EAA0292A37A0CF2"); test_haval128_4_internal("0123456789", "2215D3702A80025C858062C53D76CBE5"); test_haval128_4_internal("abcdefghijklmnopqrstuvwxyz", "B2A73B99775FFB17CD8781B85EC66221"); test_haval128_4_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "CAD57C0563BDA208D66BB89EB922E2A2"); test_haval160_4_internal("", "1D33AAE1BE4146DBAACA0B6E70D7A11F10801525"); test_haval160_4_internal("a", "E0A5BE29627332034D4DD8A910A1A0E6FE04084D"); test_haval160_4_internal("HAVAL", "221BA4DD206172F12C2EBA3295FDE08D25B2F982"); test_haval160_4_internal("0123456789", "E387C743D14DF304CE5C7A552F4C19CA9B8E741C"); test_haval160_4_internal("abcdefghijklmnopqrstuvwxyz", "1C7884AF86D11AC120FE5DF75CEE792D2DFA48EF"); test_haval160_4_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "148334AAD24B658BDC946C521CDD2B1256608C7B"); test_haval192_4_internal("", "4A8372945AFA55C7DEAD800311272523CA19D42EA47B72DA"); test_haval192_4_internal("a", "856C19F86214EA9A8A2F0C4B758B973CCE72A2D8FF55505C"); test_haval192_4_internal("HAVAL", "0C1396D7772689C46773F3DAACA4EFA982ADBFB2F1467EEA"); test_haval192_4_internal("0123456789", "C3A5420BB9D7D82A168F6624E954AAA9CDC69FB0F67D785E"); test_haval192_4_internal("abcdefghijklmnopqrstuvwxyz", "2E2E581D725E799FDA1948C75E85A28CFE1CF0C6324A1ADA"); test_haval192_4_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "E5C9F81AE0B31FC8780FC37CB63BB4EC96496F79A9B58344"); test_haval224_4_internal("", "3E56243275B3B81561750550E36FCD676AD2F5DD9E15F2E89E6ED78E"); test_haval224_4_internal("a", "742F1DBEEAF17F74960558B44F08AA98BDC7D967E6C0AB8F799B3AC1"); test_haval224_4_internal("HAVAL", "85538FFC06F3B1C693C792C49175639666F1DDE227DA8BD000C1E6B4"); test_haval224_4_internal("0123456789", "BEBD7816F09BAEECF8903B1B9BC672D9FA428E462BA699F814841529"); test_haval224_4_internal("abcdefghijklmnopqrstuvwxyz", "A0AC696CDB2030FA67F6CC1D14613B1962A7B69B4378A9A1B9738796"); test_haval224_4_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "3E63C95727E0CD85D42034191314401E42AB9063A94772647E3E8E0F"); test_haval256_4_internal("", "C92B2E23091E80E375DADCE26982482D197B1A2521BE82DA819F8CA2C579B99B"); test_haval256_4_internal("a", "E686D2394A49B44D306ECE295CF9021553221DB132B36CC0FF5B593D39295899"); test_haval256_4_internal("HAVAL", "E20643CFA66F5BE2145D13ED09C2FF622B3F0DA426A693FA3B3E529CA89E0D3C"); test_haval256_4_internal("0123456789", "ACE5D6E5B155F7C9159F6280327B07CBD4FF54143DC333F0582E9BCEB895C05D"); test_haval256_4_internal("abcdefghijklmnopqrstuvwxyz", "124F6EB645DC407637F8F719CC31250089C89903BF1DB8FAC21EA4614DF4E99A"); test_haval256_4_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "46A3A1DFE867EDE652425CCD7FE8006537EAD26372251686BEA286DA152DC35A"); } static void test_haval5(void) { test_haval128_5_internal("", "184B8482A0C050DCA54B59C7F05BF5DD"); test_haval128_5_internal("a", "F23FBE704BE8494BFA7A7FB4F8AB09E5"); test_haval128_5_internal("HAVAL", "C97990F4FCC8FBA76AF935C405995355"); test_haval128_5_internal("0123456789", "466FDCD81C3477CAC6A31FFA1C999CA8"); test_haval128_5_internal("abcdefghijklmnopqrstuvwxyz", "0EFFF71D7D14344CBA1F4B25F924A693"); test_haval128_5_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "4B27D04DDB516BDCDFEB96EB8C7C8E90"); test_haval160_5_internal("", "255158CFC1EED1A7BE7C55DDD64D9790415B933B"); test_haval160_5_internal("a", "F5147DF7ABC5E3C81B031268927C2B5761B5A2B5"); test_haval160_5_internal("HAVAL", "7730CA184CEA2272E88571A7D533E035F33B1096"); test_haval160_5_internal("0123456789", "41CC7C1267E88CEF0BB93697D0B6C8AFE59061E6"); test_haval160_5_internal("abcdefghijklmnopqrstuvwxyz", "917836A9D27EED42D406F6002E7D11A0F87C404C"); test_haval160_5_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "6DDBDE98EA1C4F8C7F360FB9163C7C952680AA70"); test_haval192_5_internal("", "4839D0626F95935E17EE2FC4509387BBE2CC46CB382FFE85"); test_haval192_5_internal("a", "5FFA3B3548A6E2CFC06B7908CEB5263595DF67CF9C4B9341"); test_haval192_5_internal("HAVAL", "794A896D1780B76E2767CC4011BAD8885D5CE6BD835A71B8"); test_haval192_5_internal("0123456789", "A0B635746E6CFFFFD4B4A503620FEF1040C6C0C5C326476E"); test_haval192_5_internal("abcdefghijklmnopqrstuvwxyz", "85F1F1C0ECA04330CF2DE5C8C83CF85A611B696F793284DE"); test_haval192_5_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "D651C8AC45C9050810D9FD64FC919909900C4664BE0336D0"); test_haval224_5_internal("", "4A0513C032754F5582A758D35917AC9ADF3854219B39E3AC77D1837E"); test_haval224_5_internal("a", "67B3CB8D4068E3641FA4F156E03B52978B421947328BFB9168C7655D"); test_haval224_5_internal("HAVAL", "9D7AE77B8C5C8C1C0BA854EBE3B2673C4163CFD304AD7CD527CE0C82"); test_haval224_5_internal("0123456789", "59836D19269135BC815F37B2AEB15F894B5435F2C698D57716760F2B"); test_haval224_5_internal("abcdefghijklmnopqrstuvwxyz", "1B360ACFF7806502B5D40C71D237CC0C40343D2000AE2F65CF487C94"); test_haval224_5_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "180AED7F988266016719F60148BA2C9B4F5EC3B9758960FC735DF274"); test_haval256_5_internal("", "BE417BB4DD5CFB76C7126F4F8EEB1553A449039307B1A3CD451DBFDC0FBBE330"); test_haval256_5_internal("a", "DE8FD5EE72A5E4265AF0A756F4E1A1F65C9B2B2F47CF17ECF0D1B88679A3E22F"); test_haval256_5_internal("HAVAL", "153D2C81CD3C24249AB7CD476934287AF845AF37F53F51F5C7E2BE99BA28443F"); test_haval256_5_internal("0123456789", "357E2032774ABBF5F04D5F1DEC665112EA03B23E6E00425D0DF75EA155813126"); test_haval256_5_internal("abcdefghijklmnopqrstuvwxyz", "C9C7D8AFA159FD9E965CB83FF5EE6F58AEDA352C0EFF005548153A61551C38EE"); test_haval256_5_internal("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz0123456789", "B45CB6E62F2B1320E4F8F1B0B273D45ADD47C321FD23999DCF403AC37636D963"); } static void test_haval(void) { test_haval3(); test_haval4(); test_haval5(); } UTEST_MAIN("HAVAL", test_haval)