]> www.wagner.pp.ru Git - openssl-gost/engine.git/blob - tcl_tests/cmsenc_cs.try
3ae497e301b247621bc7fe1bd1ab4340c3af7212
[openssl-gost/engine.git] / tcl_tests / cmsenc_cs.try
1 #!/usr/bin/tclsh
2 # -*- coding: cp1251 -*-
3 lappend auto_path [file dirname [info script]]
4 package require ossltest
5 package require test
6 cd $::test::dir
7 set testname [file rootname [file tail $::argv0]]
8
9 start_tests "Тесты на cms -encrypt с участием эталонных серверов" 
10 proc make_fn {alg} {
11         return [string map {":" "_"} $alg]
12 }
13
14 proc map {str list} {
15         set result {}
16         foreach a $list {
17                 lappend result [subst $str]
18         }
19         return $result
20 }
21         
22 if {![file exist encrypt.dat]} {
23         makeFile encrypt.dat [string repeat "Test data to encrypt.\n" 100] 
24 }
25
26 #if {![info exist env(/NO_RSA)]} {
27 #test "Creating RSA CA" {
28 #       makeCA ${testname}CA-RSA rsa:512
29 #} 0 1
30 #
31
32 set ::test::ca cmsencCA-RSA
33
34 #foreach user {U_cms_enc_rsa_1 U_cms_enc_rsa_2} {
35 #test "Make registered user $user" {
36 #       makeRegisteredUser $user rsa:512 CAname ${testname}CA-RSA
37 #} 0 1
38 #}
39
40 set hosts tls-ref-cp21
41 foreach hstname $hosts {
42
43 #test -createsfiles cms_enc_rsa.msg "RSA User 1 encrypts message for RSA user 2" {
44 #       openssl "cms -encrypt -in encrypt.dat -des -out cms_enc_rsa.msg U_cms_enc_rsa_2/cert.pem"
45 #       file isfile cms_enc_rsa.msg
46 #} 0 1
47
48 test "RSA User 1 cannot decrypt message for RSA user 2" {
49         grep "Error"    [openssl_remote "cms_enc_rsa.msg U_cms_enc_rsa_1" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_rsa.msg -recip TESTPATH/U_cms_enc_rsa_1/cert.pem -inkey TESTPATH/U_cms_enc_rsa_1/seckey.pem" "rsa"]
50 } 1 {Error decrypting CMS}
51
52 test -skip {![file exists cms_decrypt.rsa]} "RSA User 2 (with cert) can decrypt message for RSA user 2" {
53         set expected [getFile encrypt.dat]
54         openssl_remote "U_cms_enc_rsa_2" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_rsa.msg -recip TESTPATH/U_cms_enc_rsa_2/cert.pem -inkey TESTPATH/U_cms_enc_rsa_2/seckey.pem -out TESTPATH/cms_decrypt.rsa" "rsa"
55         set result [getFile cms_decrypt.rsa]
56         string eq $expected $result
57 } 0 1
58
59 test -skip{![file exists cms_decrypt_nocert.rsa]} "RSA User 2 (without cert) can decrypt message for RSA user 2" {
60         set expected [getFile encrypt.dat]
61         openssl_remote "$hstname" "cms -decrypt -in TESTPATH/cms_enc_rsa.msg -inkey TESTPATH/U_cms_enc_rsa_2/seckey.pem -out TESTPATH/cms_decrypt_nocert.rsa" "rsa"
62         set result [getFile cms_decrypt_nocert.rsa]
63         string eq $expected $result
64 } 0 1
65 }
66
67 #test "Creating CA 2001" {
68 #       makeCA ${testname}CA gost2001:A
69 #} 0 1
70
71 #test "Creating CA 2012" {
72 #       makeCA
73 #} 0 1
74 #
75
76 set hosts [list tls-ref-cp21 tls-ref-cp20]
77 foreach hstname $hosts {
78
79 if {[info exist env(ENC_LIST)]} {
80         set enc_list $env(ENC_LIST)
81 } else {
82         switch -exact [engine_name] {
83                 "ccore" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 }}
84                 "open" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 }}
85         }
86 }
87
88 save_env2 {OPENSSL_CONF CRYPT_PARAMS}
89 makeFile cmsenc1.cnf [regsub -all "\n\\s*CRYPT_PARAMS\\s*=\[\^\n]*" [getConfig] ""]
90 set ::env(OPENSSL_CONF) [file join [pwd] cmsenc1.cnf]
91
92 foreach enc_tuple $enc_list {
93         if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} {
94                 set alg $enc_tuple
95                 set crypt_param {}
96         }
97         set alg_fn [make_fn $enc_tuple]
98         set username U_cms_enc_$alg_fn
99         switch -glob $alg {
100                 gost2012* {set ::test::ca cmsCA-2012}
101                 * {set ::test::ca cmsCA}
102         }
103
104 #test "Creating user $username with key $alg" {
105 #       makeRegisteredUser $username $alg
106
107 #       if {![file exists $username/req.pem]&&[file exists $username/cert.pem]} {
108 #               file delete $username/cert.pem
109 #       }       
110 #       file exists $username/cert.pem
111 #} 0 1
112
113 if {[string length $crypt_param]} {
114         set env(CRYPT_PARAMS) $crypt_param
115 } else {
116         if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)}
117 }
118
119 #test -createsfiles cms_enc_$alg_fn.msg "Encrypting for $username" {
120 #       grep "rror" [openssl "cms -encrypt -in encrypt.dat -gost89 -out cms_enc_$alg_fn.msg U_cms_enc_$alg_fn/cert.pem"]
121 #} 0 ""
122
123 if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)}
124
125 #test -createsfiles cms_enc_$alg_fn.pem "Extracting CMS from encrypted structure for $username" {
126 #       openssl "cms -cmsout -out cms_enc_$alg_fn.pem -outform PEM -in cms_enc_$alg_fn.msg"
127 #       file isfile cms_enc_$alg_fn.pem
128 #} 0 1
129
130 #test -skip {![file exists cms_enc_$alg_fn.pem]} "Checking oids in pkcs7 structure for $username" {
131 #       extract_oids cms_enc_$alg_fn.pem PEM
132 #} 0 [mkObjList [alg_id $alg] [param_pubkey $alg] [param_hash $alg] crypt89_cc [param_encr $crypt_param]]
133
134 #test "Decrypting file encrypted for $username" {
135 #       set expected [getFile encrypt.dat]
136 #       openssl_remote "$username U_cms_enc_$alg_fn cms_enc_$alg_fn.msg" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_$alg_fn.msg -recip TESTPATH/U_cms_enc_$alg_fn/cert.pem -inkey TESTPATH/U_cms_enc_$alg_fn/seckey.pem -out TESTPATH/cms_decrypt.$alg_fn" "$testname"
137 #       set result [getRemoteFile "$hstname" "TESTPATH/cms_decrypt.$alg_fn" "$testname"]
138 #       string eq $expected $result
139 #} 0 1
140
141 test "Decrypting file encrypted for $username" {
142     set expected [getFile encrypt.dat]
143     set result [openssl_remote "$username U_cms_enc_$alg_fn cms_enc_$alg_fn.msg" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_$alg_fn.msg -recip TESTPATH/U_cms_enc_$alg_fn/cert.pem -inkey TESTPATH/U_cms_enc_$alg_fn/seckey.pem" "$testname"]
144     string eq $expected $result
145 } 0 1
146
147 if {[string length $crypt_param]} {
148         set env(CRYPT_PARAMS) $crypt_param
149 } else {
150         if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)}
151 }
152
153 #test -createsfiles cms_enc_t_$alg_fn.msg "Encrypting for $username - text format" {
154 #       grep "rror" [openssl "cms -encrypt -text -in encrypt.dat -gost89 -out cms_enc_t_$alg_fn.msg U_cms_enc_$alg_fn/cert.pem"]
155 #} 0 ""
156
157 if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)}
158
159 test -createsfiles cms_decrypt_t.$alg_fn "Decrypting file text-encrypted for $username" {
160         set expected [getFile encrypt.dat]
161         set result [openssl_remote "cms_enc_t_$alg_fn.msg U_cms_enc_$alg_fn" "$hstname" "cms -decrypt -text -in TESTPATH/cms_enc_t_$alg_fn.msg -recip TESTPATH/U_cms_enc_$alg_fn/cert.pem -inkey TESTPATH/U_cms_enc_$alg_fn/seckey.pem" "$testname"]
162         string eq $expected $result
163 } 0 1
164
165 test -createsfiles cms_decrypt_t_nocert.$alg_fn "Decrypting file text-encrypted for $username without cert" {
166         set expected [getFile encrypt.dat]
167         set result [openssl_remote "cms_enc_t_$alg_fn.msg U_cms_enc_$alg_fn" "$hstname" "cms -decrypt -text -in TESTPATH/cms_enc_t_$alg_fn.msg -inkey TESTPATH/U_cms_enc_$alg_fn/seckey.pem" "$testname"]
168         string eq $expected $result
169 } 0 1
170
171 }
172
173
174 #test -createfiles cms_enc_4all_old "Encrypt for all" {
175 #       puts stdout $enc_list
176 #       grep "rror" [openssl "cms -encrypt -in encrypt.dat -gost89 -out cms_enc_4all_old.msg [map {U_cms_enc_[make_fn $a]/cert.pem} $enc_list]"]
177 #} 0 ""
178
179 foreach enc_tuple $enc_list {
180         if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} {
181                 set alg $enc_tuple
182                 set crypt_param {}
183         }
184         set alg_fn [make_fn $enc_tuple]
185         set username U_cms_enc_$alg_fn
186
187 if {[string length $crypt_param]} {
188         set env(CRYPT_PARAMS) $crypt_param
189 } else {
190         if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)}
191 }
192
193 test -createfiles cms_enc_4all_old "Encrypt for all" {
194         grep "rror" [openssl "cms -encrypt -in encrypt.dat -gost89 -out cms_enc_4all_old.msg [map {U_cms_enc_[make_fn $a]/cert.pem} $enc_list]"]
195 } 0 ""
196         
197 test -skip {![file exists cms_enc_4all_old.msg]} "Decrypting gost-encrypted file, recipient $alg_fn" {
198         set expected [getFile encrypt.dat]
199         set result [openssl_remote "cms_enc_4all_old.msg $username" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_4all_old.msg -recip TESTPATH/$username/cert.pem -inkey TESTPATH/$username/seckey.pem" "$testname"]
200         string eq $expected $result
201 } 0 1
202
203 test -skip {![file exists cms_enc_4all_old.msg]} -createsfiles cms_decrypt_4all_nocert.$alg_fn "Decrypting gost-encrypted file without cert, recipient $alg_fn" {
204         set expected [getFile encrypt.dat]
205         set result [openssl_remote "cms_enc_4all_old.msg $username" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_4all_old.msg -inkey TESTPATH/$username/seckey.pem" "$testname"]
206         string eq $expected $result
207 } 0 1
208
209 }
210
211 restore_env2 {OPENSSL_CONF CRYPT_PARAMS}
212 }
213
214
215 end_tests