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