#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir start_tests "Тесты на команду dgst с MAC" test -createsfiles {dgst.dat dgst0.dat dgst2.dat dgst8.dat dgst63.dat mac-grasshopper.dat mac-magma.dat} "Формирование тестовых данных" { makeFile dgst.dat [string repeat "Test data to digest.\n" 100] binary makeFile dgst0.dat "" binary makeFile dgst2.dat [string repeat "1\n" 1] binary makeFile dgst8.dat [string repeat "1\n" 4] binary makeFile dgst63.dat "012345678901234567890123456789012345678901234567890123456789012" binary file copy -force ../mac-grasshopper.dat ../mac-magma.dat . } 0 "" test "Вычисление HMAC(md_gost12_512)" { grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 -hmac 123456901234567890123456789012 dgst63.dat"] } 0 "HMAC-md_gost12_512(dgst63.dat)= 3767bcbe31de0965a6cd2613d99cc8cda922e7b288478389ed9bd433abfc08ff61d9bd0257b2d14dd0648d04ebf056180b3c8739a7cd7f8a78dac856359fe26f\n" test "Вычисление двух HMAC(md_gost12_512)" { grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 -hmac 123456901234567890123456789012 dgst63.dat dgst63.dat"] } 0 "HMAC-md_gost12_512(dgst63.dat)= 3767bcbe31de0965a6cd2613d99cc8cda922e7b288478389ed9bd433abfc08ff61d9bd0257b2d14dd0648d04ebf056180b3c8739a7cd7f8a78dac856359fe26f\nHMAC-md_gost12_512(dgst63.dat)= 3767bcbe31de0965a6cd2613d99cc8cda922e7b288478389ed9bd433abfc08ff61d9bd0257b2d14dd0648d04ebf056180b3c8739a7cd7f8a78dac856359fe26f\n" test "Вычисление HMAC(md_gost94)" { grep "md_gost94\\(" [openssl "dgst -md_gost94 -hmac 123456901234567890123456789012 dgst.dat"] } 0 "HMAC-md_gost94(dgst.dat)= 25434aa4b59b9749d3716ac188762b6c92b47d552aeb556f74b9c357b2b7c8c6\n" test "Вычисление двух HMAC(md_gost94)" { grep "md_gost94\\(" [openssl "dgst -md_gost94 -hmac 123456901234567890123456789012 dgst.dat dgst.dat"] } 0 "HMAC-md_gost94(dgst.dat)= 25434aa4b59b9749d3716ac188762b6c92b47d552aeb556f74b9c357b2b7c8c6\nHMAC-md_gost94(dgst.dat)= 25434aa4b59b9749d3716ac188762b6c92b47d552aeb556f74b9c357b2b7c8c6\n" test "Попытка вычислить MAC с ключом неправильной длины" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:123456789012345678901234567890 dgst.dat"] } 1 "invalid mac key length" test "Попытка вычислить MAC с hex ключом неправильной длины" { grep gost-mac [openssl "dgst -mac gost-mac -macopt hexkey:414243444546474849404142434445464748494041424344454647484940 dgst.dat"] } 1 "invalid mac key length" test "Вычисление MAC gost89" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:12345678901234567890123456789012 dgst.dat"] } 0 "GOST-MAC-gost-mac(dgst.dat)= 37f646d2\n" test "Вычисление двух MAC gost89" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:12345678901234567890123456789012 dgst.dat dgst.dat"] } 0 "GOST-MAC-gost-mac(dgst.dat)= 37f646d2\nGOST-MAC-gost-mac(dgst.dat)= 37f646d2\n" test "Вычислиение MAC gost89 с шестнацатиричным ключом" { grep gost-mac [openssl "dgst -mac gost-mac -macopt hexkey:3132333435363738393031323334353637383930313233343536373839303132 dgst.dat"] } 0 "GOST-MAC-gost-mac(dgst.dat)= 37f646d2\n" test "Вычисление MAC gost89 от файла нулевой длины" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:12345678901234567890123456789012 dgst0.dat"] } 0 "GOST-MAC-gost-mac(dgst0.dat)= 00000000\n" test "Вычисление MAC gost89 от файла длины 2" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:12345678901234567890123456789012 dgst2.dat"] } 0 "GOST-MAC-gost-mac(dgst2.dat)= 87ea321f\n" test "Вычисление MAC gost89 от файла длины 8" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:12345678901234567890123456789012 dgst8.dat"] } 0 "GOST-MAC-gost-mac(dgst8.dat)= ad9aeae0\n" test "Вычисление MAC gost8912" { grep gost-mac [openssl "dgst -mac gost-mac-12 -macopt key:12345678901234567890123456789012 dgst8.dat"] } 0 "GOST-MAC-12-gost-mac-12(dgst8.dat)= be70ba5e\n" test "Вычисление MAC gost89 со сменой параметров на параметры от gost8912 (symbolic)" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:12345678901234567890123456789012 -macopt paramset:id-tc26-gost-28147-param-Z dgst8.dat"] } 0 "GOST-MAC-gost-mac(dgst8.dat)= be70ba5e\n" test "Вычисление MAC gost8912 со сменой параметров на параметры от gost89 (OID)" { grep gost-mac [openssl "dgst -mac gost-mac-12 -macopt key:12345678901234567890123456789012 -macopt paramset:1.2.643.2.2.31.1 dgst8.dat"] } 0 "GOST-MAC-12-gost-mac-12(dgst8.dat)= ad9aeae0\n" test "Вычисление MAC gost89 со сменой параметров на параметры 1.2.643.2.2.31.2" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:12345678901234567890123456789012 -macopt paramset:1.2.643.2.2.31.2 dgst8.dat"] } 0 "GOST-MAC-gost-mac(dgst8.dat)= c7fdc644\n" test "Вычисление MAC gost8912 со сменой параметров на параметры id-Gost28147-89-CryptoPro-B-ParamSet" { grep gost-mac [openssl "dgst -mac gost-mac-12 -macopt key:12345678901234567890123456789012 -macopt paramset:id-Gost28147-89-CryptoPro-B-ParamSet dgst8.dat"] } 0 "GOST-MAC-12-gost-mac-12(dgst8.dat)= c7fdc644\n" test "Вычисление MAC gost89 с изменение длины имитовставки (8)" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:12345678901234567890123456789012 -sigopt size:8 dgst8.dat"] } 0 "GOST-MAC-gost-mac(dgst8.dat)= ad9aeae05a7f6f71\n" test "Вычисление MAC gost8912 с изменение длины имитовставки (6)" { grep gost-mac [openssl "dgst -mac gost-mac-12 -macopt key:12345678901234567890123456789012 -sigopt size:6 dgst8.dat"] } 0 "GOST-MAC-12-gost-mac-12(dgst8.dat)= be70ba5ed6b0\n" test "Вычисление MAC gost89 с изменение длины имитовставки (2)" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:12345678901234567890123456789012 -sigopt size:3 dgst8.dat"] } 0 "GOST-MAC-gost-mac(dgst8.dat)= ad9aea\n" test "Вычисление MAC gost89 с изменение длины имитовставки через macopt" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:12345678901234567890123456789012 -macopt size:3 dgst8.dat"] } 0 "GOST-MAC-gost-mac(dgst8.dat)= ad9aea\n" test "Вычисление MAC gost8912 с изменение длины имитовставки через macopt" { grep gost-mac [openssl "dgst -mac gost-mac-12 -macopt key:12345678901234567890123456789012 -macopt size:6 dgst8.dat"] } 0 "GOST-MAC-12-gost-mac-12(dgst8.dat)= be70ba5ed6b0\n" test "Вычисление MAC gost8912 с изменение длины имитовставки:sigopt переписывает macopt " { grep gost-mac [openssl "dgst -mac gost-mac-12 -macopt key:12345678901234567890123456789012 -macopt size:2 -sigopt size:6 dgst8.dat"] } 0 "GOST-MAC-12-gost-mac-12(dgst8.dat)= be70ba5ed6b0\n" test "Вычисление MAC gost8912 с изменение длины имитовставки:sigopt переписывает macopt " { grep gost-mac [openssl "dgst -mac gost-mac-12 -macopt key:12345678901234567890123456789012 -macopt size:2 -sigopt size:6 dgst8.dat"] } 0 "GOST-MAC-12-gost-mac-12(dgst8.dat)= be70ba5ed6b0\n" test "Вычисление MAC magma-mac (пример из ГОСТ 2015 34.13)" { grep magma-mac [openssl "dgst -mac magma-mac -macopt hexkey:ffeeddccbbaa99887766554433221100f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff mac-magma.dat"] } 0 "MAGMA-MAC-magma-mac(mac-magma.dat)= 154e72102030c5bb\n" #FIXME my regression test "Вычисление MAC grasshopper-mac (пример из ГОСТ 2015 34.13)" { grep kuznyechik-mac [openssl "dgst -mac kuznyechik-mac -macopt hexkey:8899aabbccddeeff0011223344556677fedcba98765432100123456789abcdef mac-grasshopper.dat"] } 0 "KUZNYECHIK-MAC-kuznyechik-mac(mac-grasshopper.dat)= 336f4d296059fbe34ddeb35b37749c67\n" end_tests