Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
btwise
openssl
提交
a9164153
O
openssl
项目概览
btwise
/
openssl
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a9164153
编写于
4月 08, 2006
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Reformat pkeyutl.c, add support for verify operation but nothing actually
supports it (yet).
上级
8795d389
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
132 addition
and
29 deletion
+132
-29
apps/apps.c
apps/apps.c
+37
-0
apps/apps.h
apps/apps.h
+1
-0
apps/pkeyutl.c
apps/pkeyutl.c
+94
-29
未找到文件。
apps/apps.c
浏览文件 @
a9164153
...
...
@@ -2267,6 +2267,43 @@ int args_verify(char ***pargs, int *pargc,
}
/* Read whole contents of a BIO into an allocated memory buffer and
* return it.
*/
int
bio_to_mem
(
unsigned
char
**
out
,
int
maxlen
,
BIO
*
in
)
{
BIO
*
mem
;
int
len
,
ret
;
unsigned
char
tbuf
[
1024
];
mem
=
BIO_new
(
BIO_s_mem
());
if
(
!
mem
)
return
-
1
;
for
(;;)
{
if
((
maxlen
!=
-
1
)
&&
maxlen
<
1024
)
len
=
maxlen
;
else
len
=
1024
;
len
=
BIO_read
(
in
,
tbuf
,
len
);
if
(
len
<=
0
)
break
;
if
(
BIO_write
(
mem
,
tbuf
,
len
)
!=
len
)
{
BIO_free
(
mem
);
return
-
1
;
}
maxlen
-=
len
;
if
(
maxlen
==
0
)
break
;
}
ret
=
BIO_get_mem_data
(
mem
,
(
char
**
)
out
);
BIO_set_flags
(
mem
,
BIO_FLAGS_MEM_RDONLY
);
BIO_free
(
mem
);
return
ret
;
}
static
void
nodes_print
(
BIO
*
out
,
const
char
*
name
,
STACK_OF
(
X509_POLICY_NODE
)
*
nodes
)
{
...
...
apps/apps.h
浏览文件 @
a9164153
...
...
@@ -285,6 +285,7 @@ X509_NAME *parse_name(char *str, long chtype, int multirdn);
int
args_verify
(
char
***
pargs
,
int
*
pargc
,
int
*
badarg
,
BIO
*
err
,
X509_VERIFY_PARAM
**
pm
);
void
policies_print
(
BIO
*
out
,
X509_STORE_CTX
*
ctx
);
int
bio_to_mem
(
unsigned
char
**
out
,
int
maxlen
,
BIO
*
in
);
#define FORMAT_UNDEF 0
#define FORMAT_ASN1 1
...
...
apps/pkeyutl.c
浏览文件 @
a9164153
...
...
@@ -81,7 +81,7 @@ int MAIN(int argc, char **);
int
MAIN
(
int
argc
,
char
**
argv
)
{
BIO
*
in
=
NULL
,
*
out
=
NULL
;
char
*
infile
=
NULL
,
*
outfile
=
NULL
;
char
*
infile
=
NULL
,
*
outfile
=
NULL
,
*
sigfile
=
NULL
;
char
*
engine
=
NULL
;
int
pkey_op
=
EVP_PKEY_OP_SIGN
,
key_type
=
KEY_PRIVKEY
;
int
keyform
=
FORMAT_PEM
;
...
...
@@ -89,12 +89,12 @@ int MAIN(int argc, char **argv)
char
hexdump
=
0
,
asn1parse
=
0
;
EVP_PKEY_CTX
*
ctx
=
NULL
;
char
*
passargin
=
NULL
;
int
keysize
;
int
keysize
=
-
1
;
unsigned
char
*
buf_in
=
NULL
,
*
buf_out
=
NULL
;
int
buf_inlen
,
buf_outlen
;
unsigned
char
*
buf_in
=
NULL
,
*
buf_out
=
NULL
,
*
sig
=
NULL
;
int
buf_inlen
,
buf_outlen
,
siglen
=
-
1
;
int
ret
=
1
,
rv
;
int
ret
=
1
,
rv
=
-
1
;
argc
--
;
argv
++
;
...
...
@@ -118,6 +118,11 @@ int MAIN(int argc, char **argv)
if
(
--
argc
<
1
)
badarg
=
1
;
outfile
=
*
(
++
argv
);
}
else
if
(
!
strcmp
(
*
argv
,
"-sigfile"
))
{
if
(
--
argc
<
1
)
badarg
=
1
;
sigfile
=
*
(
++
argv
);
}
else
if
(
!
strcmp
(
*
argv
,
"-inkey"
))
{
if
(
--
argc
<
1
)
...
...
@@ -163,6 +168,8 @@ int MAIN(int argc, char **argv)
hexdump
=
1
;
else
if
(
!
strcmp
(
*
argv
,
"-sign"
))
pkey_op
=
EVP_PKEY_OP_SIGN
;
else
if
(
!
strcmp
(
*
argv
,
"-verifyr"
))
pkey_op
=
EVP_PKEY_OP_VERIFY
;
else
if
(
!
strcmp
(
*
argv
,
"-verifyrecover"
))
pkey_op
=
EVP_PKEY_OP_VERIFYRECOVER
;
else
if
(
!
strcmp
(
*
argv
,
"-rev"
))
...
...
@@ -187,24 +194,44 @@ int MAIN(int argc, char **argv)
goto
end
;
}
if
(
sigfile
&&
(
pkey_op
!=
EVP_PKEY_OP_VERIFY
))
{
BIO_puts
(
bio_err
,
"Signature file specified for non verify
\n
"
);
goto
end
;
}
if
(
!
sigfile
&&
(
pkey_op
==
EVP_PKEY_OP_VERIFY
))
{
BIO_puts
(
bio_err
,
"No signature file specified for verify
\n
"
);
goto
end
;
}
/* FIXME: seed PRNG only if needed */
app_RAND_load_file
(
NULL
,
bio_err
,
0
);
if
(
infile
)
{
if
(
!
(
in
=
BIO_new_file
(
infile
,
"rb"
)))
{
if
(
infile
)
{
if
(
!
(
in
=
BIO_new_file
(
infile
,
"rb"
)))
{
BIO_printf
(
bio_err
,
"Error Reading Input File
\n
"
);
ERR_print_errors
(
bio_err
);
goto
end
;
}
}
}
else
in
=
BIO_new_fp
(
stdin
,
BIO_NOCLOSE
);
else
in
=
BIO_new_fp
(
stdin
,
BIO_NOCLOSE
);
if
(
outfile
)
{
if
(
!
(
out
=
BIO_new_file
(
outfile
,
"wb"
)))
{
BIO_printf
(
bio_err
,
"Error Reading Output File
\n
"
);
if
(
outfile
)
{
if
(
!
(
out
=
BIO_new_file
(
outfile
,
"wb"
)))
{
BIO_printf
(
bio_err
,
"Error Creating Output File
\n
"
);
ERR_print_errors
(
bio_err
);
goto
end
;
}
}
}
else
{
else
{
out
=
BIO_new_fp
(
stdout
,
BIO_NOCLOSE
);
#ifdef OPENSSL_SYS_VMS
{
...
...
@@ -214,24 +241,44 @@ int MAIN(int argc, char **argv)
#endif
}
buf_in
=
OPENSSL_malloc
(
keysize
*
2
);
if
(
sigfile
)
{
BIO
*
sigbio
=
BIO_new_file
(
sigfile
,
"rb"
);
if
(
!
sigbio
)
{
BIO_printf
(
bio_err
,
"Can't open signature file %s
\n
"
,
sigfile
);
goto
end
;
}
siglen
=
bio_to_mem
(
&
sig
,
keysize
*
10
,
sigbio
);
BIO_free
(
sigbio
);
if
(
siglen
<=
0
)
{
BIO_printf
(
bio_err
,
"Error reading signature data
\n
"
);
goto
end
;
}
}
buf_out
=
OPENSSL_malloc
(
keysize
);
/* Read the input data */
buf_inlen
=
BIO_read
(
in
,
buf_in
,
keysize
*
2
);
if
(
buf_inlen
<=
0
)
{
buf_inlen
=
bio_to_mem
(
&
buf_in
,
keysize
*
10
,
in
);
if
(
buf_inlen
<=
0
)
{
BIO_printf
(
bio_err
,
"Error reading input Data
\n
"
);
exit
(
1
);
}
if
(
rev
)
{
}
if
(
rev
)
{
int
i
;
unsigned
char
ctmp
;
for
(
i
=
0
;
i
<
buf_inlen
/
2
;
i
++
)
{
for
(
i
=
0
;
i
<
buf_inlen
/
2
;
i
++
)
{
ctmp
=
buf_in
[
i
];
buf_in
[
i
]
=
buf_in
[
buf_inlen
-
1
-
i
];
buf_in
[
buf_inlen
-
1
-
i
]
=
ctmp
;
}
}
}
switch
(
pkey_op
)
{
case
EVP_PKEY_OP_VERIFYRECOVER
:
...
...
@@ -252,30 +299,48 @@ int MAIN(int argc, char **argv)
case
EVP_PKEY_OP_DECRYPT
:
rv
=
EVP_PKEY_decrypt
(
ctx
,
buf_out
,
&
buf_outlen
,
buf_in
,
buf_inlen
);
break
;
break
;
case
EVP_PKEY_OP_VERIFY
:
rv
=
EVP_PKEY_verify
(
ctx
,
sig
,
siglen
,
buf_in
,
buf_inlen
);
if
(
rv
==
0
)
BIO_puts
(
out
,
"Signature Verification Failure
\n
"
);
else
if
(
rv
==
1
)
BIO_puts
(
out
,
"Signature Verified Successfully
\n
"
);
if
(
rv
>=
0
)
goto
end
;
break
;
}
if
(
rv
<=
0
)
{
if
(
rv
<=
0
)
{
BIO_printf
(
bio_err
,
"Public Key operation error
\n
"
);
ERR_print_errors
(
bio_err
);
goto
end
;
}
}
ret
=
0
;
if
(
asn1parse
)
{
if
(
!
ASN1_parse_dump
(
out
,
buf_out
,
buf_outlen
,
1
,
-
1
))
{
if
(
asn1parse
)
{
if
(
!
ASN1_parse_dump
(
out
,
buf_out
,
buf_outlen
,
1
,
-
1
))
ERR_print_errors
(
bio_err
);
}
}
else
if
(
hexdump
)
BIO_dump
(
out
,
(
char
*
)
buf_out
,
buf_outlen
);
else
BIO_write
(
out
,
buf_out
,
buf_outlen
);
else
if
(
hexdump
)
BIO_dump
(
out
,
(
char
*
)
buf_out
,
buf_outlen
);
else
BIO_write
(
out
,
buf_out
,
buf_outlen
);
end:
if
(
ctx
)
EVP_PKEY_CTX_free
(
ctx
);
BIO_free
(
in
);
BIO_free_all
(
out
);
if
(
buf_in
)
OPENSSL_free
(
buf_in
);
if
(
buf_out
)
OPENSSL_free
(
buf_out
);
if
(
buf_in
)
OPENSSL_free
(
buf_in
);
if
(
buf_out
)
OPENSSL_free
(
buf_out
);
if
(
sig
)
OPENSSL_free
(
sig
);
return
ret
;
}
...
...
@@ -309,7 +374,7 @@ static EVP_PKEY_CTX *init_ctx(int *pkeysize,
EVP_PKEY
*
pkey
=
NULL
;
EVP_PKEY_CTX
*
ctx
=
NULL
;
char
*
passin
=
NULL
;
int
rv
;
int
rv
=
-
1
;
X509
*
x
;
if
(((
pkey_op
==
EVP_PKEY_OP_SIGN
)
||
(
pkey_op
==
EVP_PKEY_OP_DECRYPT
))
&&
(
key_type
!=
KEY_PRIVKEY
))
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录