Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
4ec3d785
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
1 年多 前同步成功
通知
9
Star
18
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
4ec3d785
编写于
9月 07, 2004
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Reformat smime.c
上级
5d7c222d
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
331 addition
and
167 deletion
+331
-167
apps/smime.c
apps/smime.c
+331
-167
未找到文件。
apps/smime.c
浏览文件 @
4ec3d785
...
@@ -82,7 +82,7 @@ static int smime_cb(int ok, X509_STORE_CTX *ctx);
...
@@ -82,7 +82,7 @@ static int smime_cb(int ok, X509_STORE_CTX *ctx);
int
MAIN
(
int
,
char
**
);
int
MAIN
(
int
,
char
**
);
int
MAIN
(
int
argc
,
char
**
argv
)
int
MAIN
(
int
argc
,
char
**
argv
)
{
{
ENGINE
*
e
=
NULL
;
ENGINE
*
e
=
NULL
;
int
operation
=
0
;
int
operation
=
0
;
int
ret
=
0
;
int
ret
=
0
;
...
@@ -119,18 +119,26 @@ int MAIN(int argc, char **argv)
...
@@ -119,18 +119,26 @@ int MAIN(int argc, char **argv)
apps_startup
();
apps_startup
();
if
(
bio_err
==
NULL
)
if
(
bio_err
==
NULL
)
{
if
((
bio_err
=
BIO_new
(
BIO_s_file
()))
!=
NULL
)
if
((
bio_err
=
BIO_new
(
BIO_s_file
()))
!=
NULL
)
BIO_set_fp
(
bio_err
,
stderr
,
BIO_NOCLOSE
|
BIO_FP_TEXT
);
BIO_set_fp
(
bio_err
,
stderr
,
BIO_NOCLOSE
|
BIO_FP_TEXT
);
}
if
(
!
load_config
(
bio_err
,
NULL
))
if
(
!
load_config
(
bio_err
,
NULL
))
goto
end
;
goto
end
;
while
(
!
badarg
&&
*
args
&&
*
args
[
0
]
==
'-'
)
{
while
(
!
badarg
&&
*
args
&&
*
args
[
0
]
==
'-'
)
if
(
!
strcmp
(
*
args
,
"-encrypt"
))
operation
=
SMIME_ENCRYPT
;
{
else
if
(
!
strcmp
(
*
args
,
"-decrypt"
))
operation
=
SMIME_DECRYPT
;
if
(
!
strcmp
(
*
args
,
"-encrypt"
))
else
if
(
!
strcmp
(
*
args
,
"-sign"
))
operation
=
SMIME_SIGN
;
operation
=
SMIME_ENCRYPT
;
else
if
(
!
strcmp
(
*
args
,
"-verify"
))
operation
=
SMIME_VERIFY
;
else
if
(
!
strcmp
(
*
args
,
"-decrypt"
))
else
if
(
!
strcmp
(
*
args
,
"-pk7out"
))
operation
=
SMIME_PK7OUT
;
operation
=
SMIME_DECRYPT
;
else
if
(
!
strcmp
(
*
args
,
"-sign"
))
operation
=
SMIME_SIGN
;
else
if
(
!
strcmp
(
*
args
,
"-verify"
))
operation
=
SMIME_VERIFY
;
else
if
(
!
strcmp
(
*
args
,
"-pk7out"
))
operation
=
SMIME_PK7OUT
;
#ifndef OPENSSL_NO_DES
#ifndef OPENSSL_NO_DES
else
if
(
!
strcmp
(
*
args
,
"-des3"
))
else
if
(
!
strcmp
(
*
args
,
"-des3"
))
cipher
=
EVP_des_ede3_cbc
();
cipher
=
EVP_des_ede3_cbc
();
...
@@ -177,100 +185,187 @@ int MAIN(int argc, char **argv)
...
@@ -177,100 +185,187 @@ int MAIN(int argc, char **argv)
flags
|=
PKCS7_NOOLDMIMETYPE
;
flags
|=
PKCS7_NOOLDMIMETYPE
;
else
if
(
!
strcmp
(
*
args
,
"-crlfeol"
))
else
if
(
!
strcmp
(
*
args
,
"-crlfeol"
))
flags
|=
PKCS7_CRLFEOL
;
flags
|=
PKCS7_CRLFEOL
;
else
if
(
!
strcmp
(
*
args
,
"-rand"
))
{
else
if
(
!
strcmp
(
*
args
,
"-rand"
))
if
(
args
[
1
])
{
{
if
(
args
[
1
])
{
args
++
;
args
++
;
inrand
=
*
args
;
inrand
=
*
args
;
}
else
badarg
=
1
;
}
else
badarg
=
1
;
need_rand
=
1
;
need_rand
=
1
;
}
#ifndef OPENSSL_NO_ENGINE
#ifndef OPENSSL_NO_ENGINE
}
else
if
(
!
strcmp
(
*
args
,
"-engine"
))
{
else
if
(
!
strcmp
(
*
args
,
"-engine"
))
if
(
args
[
1
])
{
{
if
(
args
[
1
])
{
args
++
;
args
++
;
engine
=
*
args
;
engine
=
*
args
;
}
else
badarg
=
1
;
}
else
badarg
=
1
;
}
#endif
#endif
}
else
if
(
!
strcmp
(
*
args
,
"-passin"
))
{
else
if
(
!
strcmp
(
*
args
,
"-passin"
))
if
(
args
[
1
])
{
{
if
(
args
[
1
])
{
args
++
;
args
++
;
passargin
=
*
args
;
passargin
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-to"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-to"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
to
=
*
args
;
to
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-from"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-from"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
from
=
*
args
;
from
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-subject"
))
{
else
badarg
=
1
;
if
(
args
[
1
])
{
}
else
if
(
!
strcmp
(
*
args
,
"-subject"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
subject
=
*
args
;
subject
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-signer"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-signer"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
signerfile
=
*
args
;
signerfile
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-recip"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-recip"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
recipfile
=
*
args
;
recipfile
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-inkey"
))
{
else
badarg
=
1
;
if
(
args
[
1
])
{
}
else
if
(
!
strcmp
(
*
args
,
"-inkey"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
keyfile
=
*
args
;
keyfile
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-keyform"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-keyform"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
keyform
=
str2fmt
(
*
args
);
keyform
=
str2fmt
(
*
args
);
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-certfile"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-certfile"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
certfile
=
*
args
;
certfile
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-CAfile"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-CAfile"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
CAfile
=
*
args
;
CAfile
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-CApath"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-CApath"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
CApath
=
*
args
;
CApath
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-in"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-in"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
infile
=
*
args
;
infile
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-inform"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-inform"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
informat
=
str2fmt
(
*
args
);
informat
=
str2fmt
(
*
args
);
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-outform"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-outform"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
outformat
=
str2fmt
(
*
args
);
outformat
=
str2fmt
(
*
args
);
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-out"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-out"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
outfile
=
*
args
;
outfile
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
!
strcmp
(
*
args
,
"-content"
))
{
else
if
(
args
[
1
])
{
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-content"
))
{
if
(
args
[
1
])
{
args
++
;
args
++
;
contfile
=
*
args
;
contfile
=
*
args
;
}
else
badarg
=
1
;
}
}
else
if
(
args_verify
(
&
args
,
&
badarg
,
bio_err
,
&
vpm
))
else
badarg
=
1
;
}
else
if
(
args_verify
(
&
args
,
&
badarg
,
bio_err
,
&
vpm
))
continue
;
continue
;
else
else
badarg
=
1
;
badarg
=
1
;
...
@@ -278,26 +373,37 @@ int MAIN(int argc, char **argv)
...
@@ -278,26 +373,37 @@ int MAIN(int argc, char **argv)
}
}
if
(
operation
==
SMIME_SIGN
)
{
if
(
operation
==
SMIME_SIGN
)
if
(
!
signerfile
)
{
{
if
(
!
signerfile
)
{
BIO_printf
(
bio_err
,
"No signer certificate specified
\n
"
);
BIO_printf
(
bio_err
,
"No signer certificate specified
\n
"
);
badarg
=
1
;
badarg
=
1
;
}
}
need_rand
=
1
;
need_rand
=
1
;
}
else
if
(
operation
==
SMIME_DECRYPT
)
{
}
if
(
!
recipfile
)
{
else
if
(
operation
==
SMIME_DECRYPT
)
{
if
(
!
recipfile
)
{
BIO_printf
(
bio_err
,
"No recipient certificate and key specified
\n
"
);
BIO_printf
(
bio_err
,
"No recipient certificate and key specified
\n
"
);
badarg
=
1
;
badarg
=
1
;
}
}
}
else
if
(
operation
==
SMIME_ENCRYPT
)
{
}
if
(
!*
args
)
{
else
if
(
operation
==
SMIME_ENCRYPT
)
{
if
(
!*
args
)
{
BIO_printf
(
bio_err
,
"No recipient(s) certificate(s) specified
\n
"
);
BIO_printf
(
bio_err
,
"No recipient(s) certificate(s) specified
\n
"
);
badarg
=
1
;
badarg
=
1
;
}
}
need_rand
=
1
;
need_rand
=
1
;
}
else
if
(
!
operation
)
badarg
=
1
;
}
else
if
(
!
operation
)
badarg
=
1
;
if
(
badarg
)
{
if
(
badarg
)
{
BIO_printf
(
bio_err
,
"Usage smime [options] cert.pem ...
\n
"
);
BIO_printf
(
bio_err
,
"Usage smime [options] cert.pem ...
\n
"
);
BIO_printf
(
bio_err
,
"where options are
\n
"
);
BIO_printf
(
bio_err
,
"where options are
\n
"
);
BIO_printf
(
bio_err
,
"-encrypt encrypt message
\n
"
);
BIO_printf
(
bio_err
,
"-encrypt encrypt message
\n
"
);
...
@@ -358,12 +464,14 @@ int MAIN(int argc, char **argv)
...
@@ -358,12 +464,14 @@ int MAIN(int argc, char **argv)
e
=
setup_engine
(
bio_err
,
engine
,
0
);
e
=
setup_engine
(
bio_err
,
engine
,
0
);
#endif
#endif
if
(
!
app_passwd
(
bio_err
,
passargin
,
NULL
,
&
passin
,
NULL
))
{
if
(
!
app_passwd
(
bio_err
,
passargin
,
NULL
,
&
passin
,
NULL
))
{
BIO_printf
(
bio_err
,
"Error getting password
\n
"
);
BIO_printf
(
bio_err
,
"Error getting password
\n
"
);
goto
end
;
goto
end
;
}
}
if
(
need_rand
)
{
if
(
need_rand
)
{
app_RAND_load_file
(
NULL
,
bio_err
,
(
inrand
!=
NULL
));
app_RAND_load_file
(
NULL
,
bio_err
,
(
inrand
!=
NULL
));
if
(
inrand
!=
NULL
)
if
(
inrand
!=
NULL
)
BIO_printf
(
bio_err
,
"%ld semi-random bytes loaded
\n
"
,
BIO_printf
(
bio_err
,
"%ld semi-random bytes loaded
\n
"
,
...
@@ -372,18 +480,28 @@ int MAIN(int argc, char **argv)
...
@@ -372,18 +480,28 @@ int MAIN(int argc, char **argv)
ret
=
2
;
ret
=
2
;
if
(
operation
!=
SMIME_SIGN
)
flags
&=
~
PKCS7_DETACHED
;
if
(
operation
!=
SMIME_SIGN
)
flags
&=
~
PKCS7_DETACHED
;
if
(
operation
&
SMIME_OP
)
{
if
(
operation
&
SMIME_OP
)
if
(
flags
&
PKCS7_BINARY
)
inmode
=
"rb"
;
{
if
(
outformat
==
FORMAT_ASN1
)
outmode
=
"wb"
;
if
(
flags
&
PKCS7_BINARY
)
}
else
{
inmode
=
"rb"
;
if
(
flags
&
PKCS7_BINARY
)
outmode
=
"wb"
;
if
(
outformat
==
FORMAT_ASN1
)
if
(
informat
==
FORMAT_ASN1
)
inmode
=
"rb"
;
outmode
=
"wb"
;
}
else
{
if
(
flags
&
PKCS7_BINARY
)
outmode
=
"wb"
;
if
(
informat
==
FORMAT_ASN1
)
inmode
=
"rb"
;
}
}
if
(
operation
==
SMIME_ENCRYPT
)
{
if
(
operation
==
SMIME_ENCRYPT
)
if
(
!
cipher
)
{
{
if
(
!
cipher
)
{
#ifndef OPENSSL_NO_RC2
#ifndef OPENSSL_NO_RC2
cipher
=
EVP_rc2_40_cbc
();
cipher
=
EVP_rc2_40_cbc
();
#else
#else
...
@@ -392,9 +510,11 @@ int MAIN(int argc, char **argv)
...
@@ -392,9 +510,11 @@ int MAIN(int argc, char **argv)
#endif
#endif
}
}
encerts
=
sk_X509_new_null
();
encerts
=
sk_X509_new_null
();
while
(
*
args
)
{
while
(
*
args
)
if
(
!
(
cert
=
load_cert
(
bio_err
,
*
args
,
FORMAT_PEM
,
{
NULL
,
e
,
"recipient certificate file"
)))
{
if
(
!
(
cert
=
load_cert
(
bio_err
,
*
args
,
FORMAT_PEM
,
NULL
,
e
,
"recipient certificate file"
)))
{
#if 0 /* An appropriate message is already printed */
#if 0 /* An appropriate message is already printed */
BIO_printf(bio_err, "Can't read recipient certificate file %s\n", *args);
BIO_printf(bio_err, "Can't read recipient certificate file %s\n", *args);
#endif
#endif
...
@@ -406,9 +526,11 @@ int MAIN(int argc, char **argv)
...
@@ -406,9 +526,11 @@ int MAIN(int argc, char **argv)
}
}
}
}
if
(
signerfile
&&
(
operation
==
SMIME_SIGN
))
{
if
(
signerfile
&&
(
operation
==
SMIME_SIGN
))
if
(
!
(
signer
=
load_cert
(
bio_err
,
signerfile
,
FORMAT_PEM
,
NULL
,
{
e
,
"signer certificate"
)))
{
if
(
!
(
signer
=
load_cert
(
bio_err
,
signerfile
,
FORMAT_PEM
,
NULL
,
e
,
"signer certificate"
)))
{
#if 0 /* An appropri message has already been printed */
#if 0 /* An appropri message has already been printed */
BIO_printf(bio_err, "Can't read signer certificate file %s\n", signerfile);
BIO_printf(bio_err, "Can't read signer certificate file %s\n", signerfile);
#endif
#endif
...
@@ -416,9 +538,11 @@ int MAIN(int argc, char **argv)
...
@@ -416,9 +538,11 @@ int MAIN(int argc, char **argv)
}
}
}
}
if
(
certfile
)
{
if
(
certfile
)
if
(
!
(
other
=
load_certs
(
bio_err
,
certfile
,
FORMAT_PEM
,
NULL
,
{
e
,
"certificate file"
)))
{
if
(
!
(
other
=
load_certs
(
bio_err
,
certfile
,
FORMAT_PEM
,
NULL
,
e
,
"certificate file"
)))
{
#if 0 /* An appropriate message has already been printed */
#if 0 /* An appropriate message has already been printed */
BIO_printf(bio_err, "Can't read certificate file %s\n", certfile);
BIO_printf(bio_err, "Can't read certificate file %s\n", certfile);
#endif
#endif
...
@@ -427,9 +551,11 @@ int MAIN(int argc, char **argv)
...
@@ -427,9 +551,11 @@ int MAIN(int argc, char **argv)
}
}
}
}
if
(
recipfile
&&
(
operation
==
SMIME_DECRYPT
))
{
if
(
recipfile
&&
(
operation
==
SMIME_DECRYPT
))
if
(
!
(
recip
=
load_cert
(
bio_err
,
recipfile
,
FORMAT_PEM
,
NULL
,
{
e
,
"recipient certificate file"
)))
{
if
(
!
(
recip
=
load_cert
(
bio_err
,
recipfile
,
FORMAT_PEM
,
NULL
,
e
,
"recipient certificate file"
)))
{
#if 0 /* An appropriate message has alrady been printed */
#if 0 /* An appropriate message has alrady been printed */
BIO_printf(bio_err, "Can't read recipient certificate file %s\n", recipfile);
BIO_printf(bio_err, "Can't read recipient certificate file %s\n", recipfile);
#endif
#endif
...
@@ -438,35 +564,49 @@ int MAIN(int argc, char **argv)
...
@@ -438,35 +564,49 @@ int MAIN(int argc, char **argv)
}
}
}
}
if
(
operation
==
SMIME_DECRYPT
)
{
if
(
operation
==
SMIME_DECRYPT
)
if
(
!
keyfile
)
keyfile
=
recipfile
;
{
}
else
if
(
operation
==
SMIME_SIGN
)
{
if
(
!
keyfile
)
if
(
!
keyfile
)
keyfile
=
signerfile
;
keyfile
=
recipfile
;
}
else
keyfile
=
NULL
;
}
else
if
(
operation
==
SMIME_SIGN
)
{
if
(
!
keyfile
)
keyfile
=
signerfile
;
}
else
keyfile
=
NULL
;
if
(
keyfile
)
{
if
(
keyfile
)
{
key
=
load_key
(
bio_err
,
keyfile
,
keyform
,
0
,
passin
,
e
,
key
=
load_key
(
bio_err
,
keyfile
,
keyform
,
0
,
passin
,
e
,
"signing key file"
);
"signing key file"
);
if
(
!
key
)
{
if
(
!
key
)
goto
end
;
goto
end
;
}
}
}
if
(
infile
)
{
if
(
infile
)
if
(
!
(
in
=
BIO_new_file
(
infile
,
inmode
)))
{
{
if
(
!
(
in
=
BIO_new_file
(
infile
,
inmode
)))
{
BIO_printf
(
bio_err
,
BIO_printf
(
bio_err
,
"Can't open input file %s
\n
"
,
infile
);
"Can't open input file %s
\n
"
,
infile
);
goto
end
;
goto
end
;
}
}
}
else
in
=
BIO_new_fp
(
stdin
,
BIO_NOCLOSE
);
}
else
in
=
BIO_new_fp
(
stdin
,
BIO_NOCLOSE
);
if
(
outfile
)
{
if
(
outfile
)
if
(
!
(
out
=
BIO_new_file
(
outfile
,
outmode
)))
{
{
if
(
!
(
out
=
BIO_new_file
(
outfile
,
outmode
)))
{
BIO_printf
(
bio_err
,
BIO_printf
(
bio_err
,
"Can't open output file %s
\n
"
,
outfile
);
"Can't open output file %s
\n
"
,
outfile
);
goto
end
;
goto
end
;
}
}
}
else
{
}
else
{
out
=
BIO_new_fp
(
stdout
,
BIO_NOCLOSE
);
out
=
BIO_new_fp
(
stdout
,
BIO_NOCLOSE
);
#ifdef OPENSSL_SYS_VMS
#ifdef OPENSSL_SYS_VMS
{
{
...
@@ -476,8 +616,10 @@ int MAIN(int argc, char **argv)
...
@@ -476,8 +616,10 @@ int MAIN(int argc, char **argv)
#endif
#endif
}
}
if
(
operation
==
SMIME_VERIFY
)
{
if
(
operation
==
SMIME_VERIFY
)
if
(
!
(
store
=
setup_verify
(
bio_err
,
CAfile
,
CApath
)))
goto
end
;
{
if
(
!
(
store
=
setup_verify
(
bio_err
,
CAfile
,
CApath
)))
goto
end
;
X509_STORE_set_verify_cb_func
(
store
,
smime_cb
);
X509_STORE_set_verify_cb_func
(
store
,
smime_cb
);
if
(
vpm
)
if
(
vpm
)
X509_STORE_set1_param
(
store
,
vpm
);
X509_STORE_set1_param
(
store
,
vpm
);
...
@@ -486,9 +628,10 @@ int MAIN(int argc, char **argv)
...
@@ -486,9 +628,10 @@ int MAIN(int argc, char **argv)
ret
=
3
;
ret
=
3
;
if
(
operation
==
SMIME_ENCRYPT
)
{
if
(
operation
==
SMIME_ENCRYPT
)
p7
=
PKCS7_encrypt
(
encerts
,
in
,
cipher
,
flags
);
p7
=
PKCS7_encrypt
(
encerts
,
in
,
cipher
,
flags
);
}
else
if
(
operation
==
SMIME_SIGN
)
{
else
if
(
operation
==
SMIME_SIGN
)
{
/* If detached data and SMIME output enable partial
/* If detached data and SMIME output enable partial
* signing.
* signing.
*/
*/
...
@@ -496,75 +639,95 @@ int MAIN(int argc, char **argv)
...
@@ -496,75 +639,95 @@ int MAIN(int argc, char **argv)
flags
|=
PKCS7_STREAM
;
flags
|=
PKCS7_STREAM
;
p7
=
PKCS7_sign
(
signer
,
key
,
other
,
in
,
flags
);
p7
=
PKCS7_sign
(
signer
,
key
,
other
,
in
,
flags
);
/* Don't need to rewind for partial signing */
/* Don't need to rewind for partial signing */
if
(
!
(
flags
&
PKCS7_STREAM
)
&&
(
BIO_reset
(
in
)
!=
0
))
{
if
(
!
(
flags
&
PKCS7_STREAM
)
&&
(
BIO_reset
(
in
)
!=
0
))
{
BIO_printf
(
bio_err
,
"Can't rewind input file
\n
"
);
BIO_printf
(
bio_err
,
"Can't rewind input file
\n
"
);
goto
end
;
goto
end
;
}
}
}
else
{
}
if
(
informat
==
FORMAT_SMIME
)
else
{
if
(
informat
==
FORMAT_SMIME
)
p7
=
SMIME_read_PKCS7
(
in
,
&
indata
);
p7
=
SMIME_read_PKCS7
(
in
,
&
indata
);
else
if
(
informat
==
FORMAT_PEM
)
else
if
(
informat
==
FORMAT_PEM
)
p7
=
PEM_read_bio_PKCS7
(
in
,
NULL
,
NULL
,
NULL
);
p7
=
PEM_read_bio_PKCS7
(
in
,
NULL
,
NULL
,
NULL
);
else
if
(
informat
==
FORMAT_ASN1
)
else
if
(
informat
==
FORMAT_ASN1
)
p7
=
d2i_PKCS7_bio
(
in
,
NULL
);
p7
=
d2i_PKCS7_bio
(
in
,
NULL
);
else
{
else
{
BIO_printf
(
bio_err
,
"Bad input format for PKCS#7 file
\n
"
);
BIO_printf
(
bio_err
,
"Bad input format for PKCS#7 file
\n
"
);
goto
end
;
goto
end
;
}
}
if
(
!
p7
)
{
if
(
!
p7
)
{
BIO_printf
(
bio_err
,
"Error reading S/MIME message
\n
"
);
BIO_printf
(
bio_err
,
"Error reading S/MIME message
\n
"
);
goto
end
;
goto
end
;
}
}
if
(
contfile
)
{
if
(
contfile
)
{
BIO_free
(
indata
);
BIO_free
(
indata
);
if
(
!
(
indata
=
BIO_new_file
(
contfile
,
"rb"
)))
{
if
(
!
(
indata
=
BIO_new_file
(
contfile
,
"rb"
)))
{
BIO_printf
(
bio_err
,
"Can't read content file %s
\n
"
,
contfile
);
BIO_printf
(
bio_err
,
"Can't read content file %s
\n
"
,
contfile
);
goto
end
;
goto
end
;
}
}
}
}
}
}
if
(
!
p7
)
{
if
(
!
p7
)
{
BIO_printf
(
bio_err
,
"Error creating PKCS#7 structure
\n
"
);
BIO_printf
(
bio_err
,
"Error creating PKCS#7 structure
\n
"
);
goto
end
;
goto
end
;
}
}
ret
=
4
;
ret
=
4
;
if
(
operation
==
SMIME_DECRYPT
)
{
if
(
operation
==
SMIME_DECRYPT
)
if
(
!
PKCS7_decrypt
(
p7
,
key
,
recip
,
out
,
flags
))
{
{
if
(
!
PKCS7_decrypt
(
p7
,
key
,
recip
,
out
,
flags
))
{
BIO_printf
(
bio_err
,
"Error decrypting PKCS#7 structure
\n
"
);
BIO_printf
(
bio_err
,
"Error decrypting PKCS#7 structure
\n
"
);
goto
end
;
goto
end
;
}
}
}
else
if
(
operation
==
SMIME_VERIFY
)
{
}
else
if
(
operation
==
SMIME_VERIFY
)
{
STACK_OF
(
X509
)
*
signers
;
STACK_OF
(
X509
)
*
signers
;
if
(
PKCS7_verify
(
p7
,
other
,
store
,
indata
,
out
,
flags
))
{
if
(
PKCS7_verify
(
p7
,
other
,
store
,
indata
,
out
,
flags
))
BIO_printf
(
bio_err
,
"Verification successful
\n
"
);
BIO_printf
(
bio_err
,
"Verification successful
\n
"
);
}
else
{
else
{
BIO_printf
(
bio_err
,
"Verification failure
\n
"
);
BIO_printf
(
bio_err
,
"Verification failure
\n
"
);
goto
end
;
goto
end
;
}
}
signers
=
PKCS7_get0_signers
(
p7
,
other
,
flags
);
signers
=
PKCS7_get0_signers
(
p7
,
other
,
flags
);
if
(
!
save_certs
(
signerfile
,
signers
))
{
if
(
!
save_certs
(
signerfile
,
signers
))
{
BIO_printf
(
bio_err
,
"Error writing signers to %s
\n
"
,
BIO_printf
(
bio_err
,
"Error writing signers to %s
\n
"
,
signerfile
);
signerfile
);
ret
=
5
;
ret
=
5
;
goto
end
;
goto
end
;
}
}
sk_X509_free
(
signers
);
sk_X509_free
(
signers
);
}
else
if
(
operation
==
SMIME_PK7OUT
)
{
}
else
if
(
operation
==
SMIME_PK7OUT
)
PEM_write_bio_PKCS7
(
out
,
p7
);
PEM_write_bio_PKCS7
(
out
,
p7
);
}
else
{
else
if
(
to
)
BIO_printf
(
out
,
"To: %s
\n
"
,
to
);
{
if
(
from
)
BIO_printf
(
out
,
"From: %s
\n
"
,
from
);
if
(
to
)
if
(
subject
)
BIO_printf
(
out
,
"Subject: %s
\n
"
,
subject
);
BIO_printf
(
out
,
"To: %s
\n
"
,
to
);
if
(
outformat
==
FORMAT_SMIME
)
if
(
from
)
BIO_printf
(
out
,
"From: %s
\n
"
,
from
);
if
(
subject
)
BIO_printf
(
out
,
"Subject: %s
\n
"
,
subject
);
if
(
outformat
==
FORMAT_SMIME
)
SMIME_write_PKCS7
(
out
,
p7
,
in
,
flags
);
SMIME_write_PKCS7
(
out
,
p7
,
in
,
flags
);
else
if
(
outformat
==
FORMAT_PEM
)
else
if
(
outformat
==
FORMAT_PEM
)
PEM_write_bio_PKCS7
(
out
,
p7
);
PEM_write_bio_PKCS7
(
out
,
p7
);
else
if
(
outformat
==
FORMAT_ASN1
)
else
if
(
outformat
==
FORMAT_ASN1
)
i2d_PKCS7_bio
(
out
,
p7
);
i2d_PKCS7_bio
(
out
,
p7
);
else
{
else
{
BIO_printf
(
bio_err
,
"Bad output format for PKCS#7 file
\n
"
);
BIO_printf
(
bio_err
,
"Bad output format for PKCS#7 file
\n
"
);
goto
end
;
goto
end
;
}
}
...
@@ -573,7 +736,7 @@ int MAIN(int argc, char **argv)
...
@@ -573,7 +736,7 @@ int MAIN(int argc, char **argv)
end:
end:
if
(
need_rand
)
if
(
need_rand
)
app_RAND_write_file
(
NULL
,
bio_err
);
app_RAND_write_file
(
NULL
,
bio_err
);
if
(
ret
)
ERR_print_errors
(
bio_err
);
if
(
ret
)
ERR_print_errors
(
bio_err
);
sk_X509_pop_free
(
encerts
,
X509_free
);
sk_X509_pop_free
(
encerts
,
X509_free
);
sk_X509_pop_free
(
other
,
X509_free
);
sk_X509_pop_free
(
other
,
X509_free
);
if
(
vpm
)
if
(
vpm
)
...
@@ -587,22 +750,23 @@ end:
...
@@ -587,22 +750,23 @@ end:
BIO_free
(
in
);
BIO_free
(
in
);
BIO_free
(
indata
);
BIO_free
(
indata
);
BIO_free_all
(
out
);
BIO_free_all
(
out
);
if
(
passin
)
OPENSSL_free
(
passin
);
if
(
passin
)
OPENSSL_free
(
passin
);
return
(
ret
);
return
(
ret
);
}
}
static
int
save_certs
(
char
*
signerfile
,
STACK_OF
(
X509
)
*
signers
)
static
int
save_certs
(
char
*
signerfile
,
STACK_OF
(
X509
)
*
signers
)
{
{
int
i
;
int
i
;
BIO
*
tmp
;
BIO
*
tmp
;
if
(
!
signerfile
)
return
1
;
if
(
!
signerfile
)
return
1
;
tmp
=
BIO_new_file
(
signerfile
,
"w"
);
tmp
=
BIO_new_file
(
signerfile
,
"w"
);
if
(
!
tmp
)
return
0
;
if
(
!
tmp
)
return
0
;
for
(
i
=
0
;
i
<
sk_X509_num
(
signers
);
i
++
)
for
(
i
=
0
;
i
<
sk_X509_num
(
signers
);
i
++
)
PEM_write_bio_X509
(
tmp
,
sk_X509_value
(
signers
,
i
));
PEM_write_bio_X509
(
tmp
,
sk_X509_value
(
signers
,
i
));
BIO_free
(
tmp
);
BIO_free
(
tmp
);
return
1
;
return
1
;
}
}
static
void
nodes_print
(
BIO
*
out
,
char
*
name
,
STACK_OF
(
X509_POLICY_NODE
)
*
nodes
)
static
void
nodes_print
(
BIO
*
out
,
char
*
name
,
STACK_OF
(
X509_POLICY_NODE
)
*
nodes
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录