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