]> www.wagner.pp.ru Git - openssl-gost/engine.git/blob - tcl_tests/dgst.try
tcl_tests: Add TCL tests files
[openssl-gost/engine.git] / tcl_tests / dgst.try
1 #!/usr/bin/tclsh
2 # -*- coding: cp1251 -*-
3 lappend auto_path [file dirname [info script]]
4 package require ossltest
5 cd $::test::dir
6 start_tests "Тесты на команду dgst"
7
8 switch -exact [engine_name] {
9         "ccore" {set signalg { gost2001:A gost2012_256:A gost2012_512:A}}
10         "open" {set signalg { gost2001:A gost2012_256:A gost2012_512:A}}
11 }
12
13 if {[info exists env(ALG_LIST)]} {
14         set alg_list $env(ALG_LIST)
15 } else {
16         set alg_list $signalg
17 }
18
19 set hash_alg_list { md5 hash_94 hash_12_256 hash_12_512 }
20
21 # ===============
22 # GOST 34.11-2012
23 # ===============
24
25 test -createsfiles {dgst.dat dgst0.dat dgst2.dat dgst8.dat dgst63.dat dgst_CF.dat} "Формирование тестовых данных" {
26         makeFile dgst.dat [string repeat "Test data to digest.\n" 100] binary
27         makeFile dgst0.dat "" binary
28         makeFile dgst63.dat "012345678901234567890123456789012345678901234567890123456789012" binary
29         file copy -force ../dgst_CF.dat ../dgst_ex1.dat ../dgst_ex2.dat .
30 } 0 ""
31
32 test "Вычисление дайджеста алгоритмом md_gost12_256" {
33         grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst63.dat"]
34 } 0 "md_gost12_256\(dgst63.dat)= 9d151eefd8590b89daa6ba6cb74af9275dd051026bb149a452fd84e5e57b5500\n"
35
36 test "Два дайджеста алгоритмом md_gost12_256" {
37         grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst63.dat dgst63.dat"]
38 } 0 "md_gost12_256\(dgst63.dat)= 9d151eefd8590b89daa6ba6cb74af9275dd051026bb149a452fd84e5e57b5500\nmd_gost12_256\(dgst63.dat)= 9d151eefd8590b89daa6ba6cb74af9275dd051026bb149a452fd84e5e57b5500\n" 
39
40 test "Дайджест от данных нулевой длины алгоритмом md_gost12_256" {
41         grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst0.dat"]
42 } 0 "md_gost12_256\(dgst0.dat)= 3f539a213e97c802cc229d474c6aa32a825a360b2a933a949fd925208d9ce1bb\n"
43
44 test "Дайджест от спец.данных алгоритмом md_gost12_256" {
45         grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst_CF.dat"]
46 } 0 "md_gost12_256\(dgst_CF.dat)= 81bb632fa31fcc38b4c379a662dbc58b9bed83f50d3a1b2ce7271ab02d25babb\n"
47
48 test "Дайджест от контрольного примера 1 алгоритмом md_gost12_256" {
49         grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst_ex1.dat"]
50 } 0 "md_gost12_256\(dgst_ex1.dat)= 9d151eefd8590b89daa6ba6cb74af9275dd051026bb149a452fd84e5e57b5500\n"
51
52 test "Дайджест от контрольного примера 2 алгоритмом md_gost12_256" {
53         grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst_ex2.dat"]
54 } 0 "md_gost12_256\(dgst_ex2.dat)= 9dd2fe4e90409e5da87f53976d7405b0c0cac628fc669a741d50063c557e8f50\n"
55
56 test "Вычисление дайджеста алгоритмом md_gost12_512" {
57         grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst63.dat"]
58 } 0 "md_gost12_512\(dgst63.dat)= 1b54d01a4af5b9d5cc3d86d68d285462b19abc2475222f35c085122be4ba1ffa00ad30f8767b3a82384c6574f024c311e2a481332b08ef7f41797891c1646f48\n"
59
60 test "Два дайджеста алгоритмом md_gost12_512" {
61         grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst63.dat dgst63.dat"]
62 } 0 "md_gost12_512\(dgst63.dat)= 1b54d01a4af5b9d5cc3d86d68d285462b19abc2475222f35c085122be4ba1ffa00ad30f8767b3a82384c6574f024c311e2a481332b08ef7f41797891c1646f48\nmd_gost12_512\(dgst63.dat)= 1b54d01a4af5b9d5cc3d86d68d285462b19abc2475222f35c085122be4ba1ffa00ad30f8767b3a82384c6574f024c311e2a481332b08ef7f41797891c1646f48\n" 
63
64 test "Дайджест от данных нулевой длины алгоритмом md_gost12_512" {
65         grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst0.dat"]
66 } 0 "md_gost12_512\(dgst0.dat)= 8e945da209aa869f0455928529bcae4679e9873ab707b55315f56ceb98bef0a7362f715528356ee83cda5f2aac4c6ad2ba3a715c1bcd81cb8e9f90bf4c1c1a8a\n"
67
68 test "Дайджест от спец.данных алгоритмом md_gost12_512" {
69         grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst_CF.dat"]
70 } 0 "md_gost12_512\(dgst_CF.dat)= 8b06f41e59907d9636e892caf5942fcdfb71fa31169a5e70f0edb873664df41c2cce6e06dc6755d15a61cdeb92bd607cc4aaca6732bf3568a23a210dd520fd41\n"
71
72 test "Дайджест от контрольного примера 1 алгоритмом md_gost12_512" {
73         grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst_ex1.dat"]
74 } 0 "md_gost12_512\(dgst_ex1.dat)= 1b54d01a4af5b9d5cc3d86d68d285462b19abc2475222f35c085122be4ba1ffa00ad30f8767b3a82384c6574f024c311e2a481332b08ef7f41797891c1646f48\n"
75
76 test "Дайджест от контрольного примера 2 алгоритмом md_gost12_512" {
77         grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst_ex2.dat"]
78 } 0 "md_gost12_512\(dgst_ex2.dat)= 1e88e62226bfca6f9994f1f2d51569e0daf8475a3b0fe61a5300eee46d961376035fe83549ada2b8620fcd7c496ce5b33f0cb9dddc2b6460143b03dabac9fb28\n"
79
80 test "Вычисление дайджеста алгоритмом md_gost94" {
81         grep "md_gost94\\(" [openssl "dgst -md_gost94 dgst.dat"]
82 } 0 "md_gost94\(dgst.dat)= 42e462ce1c2b4bf72a4815b7b4877c601f05e5781a71eaa36f63f836c021865c\n"
83
84 test  "Вычисление двух дайджестов алгоритмом md_gost94" {
85         grep "md_gost94\\(" [openssl "dgst -md_gost94 dgst.dat dgst.dat"]
86 } 0 "md_gost94\(dgst.dat)= 42e462ce1c2b4bf72a4815b7b4877c601f05e5781a71eaa36f63f836c021865c\nmd_gost94\(dgst.dat)= 42e462ce1c2b4bf72a4815b7b4877c601f05e5781a71eaa36f63f836c021865c\n" 
87
88 test "Вычисление дайджеста от данных нулевой длины алгоритмом md_gost94" {
89         grep "md_gost94\\(" [openssl "dgst -md_gost94 dgst0.dat"]
90 } 0 "md_gost94\(dgst0.dat)= 3f25bc1fbbce27ca10fb1958f319473ae7e17482c3b53ecf47a7e2de8aabe4c8\n"
91
92
93 foreach alg $alg_list {
94   set alg_fn [string map {":" "_"} $alg]
95   set username dgst_$alg_fn
96
97   test -createsfiles $username/seckey.pem "Секретный ключ, алгоритм $alg" {
98     makeSecretKey $username $alg
99   } 0 1
100
101
102   foreach hash_alg $hash_alg_list {
103
104     if { ($alg eq "rsa:") || ($hash_alg eq [alg_hash $alg]) } {
105
106       test -skip {![file exists $username/seckey.pem]||![file exists dgst.dat]} -createsfiles $username/sig.bin  "Подпись дайджеста $hash_alg алгоритмом $alg" {
107         openssl "dgst -[hash_short_name $hash_alg] -sign $username/seckey.pem -out $username/sig.bin dgst.dat"
108         expr {[file size $username/sig.bin] > 0}
109       } 0 1
110
111       test -skip {![file exists $username/seckey.pem]||![file exists $username/sig.bin]} "Проверка подписи под дайджестом $hash_alg на алгоритме $alg" {
112         grep Verif [openssl "dgst -[hash_short_name $hash_alg] -prverify $username/seckey.pem -signature $username/sig.bin dgst.dat"]   
113       } 0 "Verified OK
114 "
115
116     } else {
117       test -skip {![file exists $username/seckey.pem]||![file exists dgst.dat]} -createsfiles "testmd5.bin"  "Подпись несовместимого дайджеста $hash_alg c подписью $alg" {
118         grep Error [openssl "dgst -[hash_short_name $hash_alg] -sign $username/seckey.pem -out testmd5.bin dgst.dat"]
119       } 1 {invalid digest type}
120     }
121
122   }
123
124 }
125
126 end_tests