Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
a200a817
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
接近 2 年 前同步成功
通知
12
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看板
提交
a200a817
编写于
10月 28, 2015
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Top level ECDSA sign/verify redirection.
Reviewed-by:
N
Richard Levitte
<
levitte@openssl.org
>
上级
7d711cbc
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
73 addition
and
32 deletion
+73
-32
crypto/ec/ec_kmeth.c
crypto/ec/ec_kmeth.c
+2
-0
crypto/ec/ec_lcl.h
crypto/ec/ec_lcl.h
+11
-0
crypto/ec/ecdsa_ossl.c
crypto/ec/ecdsa_ossl.c
+48
-0
crypto/ec/ecdsa_sign.c
crypto/ec/ecdsa_sign.c
+6
-12
crypto/ec/ecdsa_vrf.c
crypto/ec/ecdsa_vrf.c
+6
-20
未找到文件。
crypto/ec/ec_kmeth.c
浏览文件 @
a200a817
...
...
@@ -66,8 +66,10 @@ static const EC_KEY_METHOD openssl_ec_key_method = {
0
,
0
,
0
,
0
,
0
,
0
,
ossl_ec_key_gen
,
ossl_ecdh_compute_key
,
ossl_ecdsa_sign
,
ossl_ecdsa_sign_setup
,
ossl_ecdsa_sign_sig
,
ossl_ecdsa_verify
,
ossl_ecdsa_verify_sig
};
...
...
crypto/ec/ec_lcl.h
浏览文件 @
a200a817
...
...
@@ -572,11 +572,17 @@ struct ec_key_method_st {
void
*
(
*
KDF
)
(
const
void
*
in
,
size_t
inlen
,
void
*
out
,
size_t
*
outlen
));
int
(
*
sign
)(
int
type
,
const
unsigned
char
*
dgst
,
int
dlen
,
unsigned
char
*
sig
,
unsigned
int
*
siglen
,
const
BIGNUM
*
kinv
,
const
BIGNUM
*
r
,
EC_KEY
*
eckey
);
int
(
*
sign_setup
)(
EC_KEY
*
eckey
,
BN_CTX
*
ctx_in
,
BIGNUM
**
kinvp
,
BIGNUM
**
rp
);
ECDSA_SIG
*
(
*
sign_sig
)(
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
BIGNUM
*
in_kinv
,
const
BIGNUM
*
in_r
,
EC_KEY
*
eckey
);
int
(
*
verify
)(
int
type
,
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
unsigned
char
*
sigbuf
,
int
sig_len
,
EC_KEY
*
eckey
);
int
(
*
verify_sig
)(
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
ECDSA_SIG
*
sig
,
EC_KEY
*
eckey
);
}
/* EC_KEY_METHOD */
;
...
...
@@ -596,8 +602,13 @@ struct ECDSA_SIG_st {
int
ossl_ecdsa_sign_setup
(
EC_KEY
*
eckey
,
BN_CTX
*
ctx_in
,
BIGNUM
**
kinvp
,
BIGNUM
**
rp
);
int
ossl_ecdsa_sign
(
int
type
,
const
unsigned
char
*
dgst
,
int
dlen
,
unsigned
char
*
sig
,
unsigned
int
*
siglen
,
const
BIGNUM
*
kinv
,
const
BIGNUM
*
r
,
EC_KEY
*
eckey
);
ECDSA_SIG
*
ossl_ecdsa_sign_sig
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
BIGNUM
*
in_kinv
,
const
BIGNUM
*
in_r
,
EC_KEY
*
eckey
);
int
ossl_ecdsa_verify
(
int
type
,
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
unsigned
char
*
sigbuf
,
int
sig_len
,
EC_KEY
*
eckey
);
int
ossl_ecdsa_verify_sig
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
ECDSA_SIG
*
sig
,
EC_KEY
*
eckey
);
crypto/ec/ecdsa_ossl.c
浏览文件 @
a200a817
...
...
@@ -56,6 +56,7 @@
*
*/
#include <string.h>
#include <openssl/err.h>
#include <openssl/obj_mac.h>
#include <openssl/bn.h>
...
...
@@ -63,6 +64,22 @@
#include <openssl/ec.h>
#include "ec_lcl.h"
int
ossl_ecdsa_sign
(
int
type
,
const
unsigned
char
*
dgst
,
int
dlen
,
unsigned
char
*
sig
,
unsigned
int
*
siglen
,
const
BIGNUM
*
kinv
,
const
BIGNUM
*
r
,
EC_KEY
*
eckey
)
{
ECDSA_SIG
*
s
;
RAND_seed
(
dgst
,
dlen
);
s
=
ECDSA_do_sign_ex
(
dgst
,
dlen
,
kinv
,
r
,
eckey
);
if
(
s
==
NULL
)
{
*
siglen
=
0
;
return
0
;
}
*
siglen
=
i2d_ECDSA_SIG
(
s
,
&
sig
);
ECDSA_SIG_free
(
s
);
return
1
;
}
static
int
ecdsa_sign_setup
(
EC_KEY
*
eckey
,
BN_CTX
*
ctx_in
,
BIGNUM
**
kinvp
,
BIGNUM
**
rp
,
const
unsigned
char
*
dgst
,
int
dlen
)
...
...
@@ -326,6 +343,37 @@ ECDSA_SIG *ossl_ecdsa_sign_sig(const unsigned char *dgst, int dgst_len,
return
ret
;
}
/*-
* returns
* 1: correct signature
* 0: incorrect signature
* -1: error
*/
int
ossl_ecdsa_verify
(
int
type
,
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
unsigned
char
*
sigbuf
,
int
sig_len
,
EC_KEY
*
eckey
)
{
ECDSA_SIG
*
s
;
const
unsigned
char
*
p
=
sigbuf
;
unsigned
char
*
der
=
NULL
;
int
derlen
=
-
1
;
int
ret
=
-
1
;
s
=
ECDSA_SIG_new
();
if
(
s
==
NULL
)
return
(
ret
);
if
(
d2i_ECDSA_SIG
(
&
s
,
&
p
,
sig_len
)
==
NULL
)
goto
err
;
/* Ensure signature uses DER and doesn't have trailing garbage */
derlen
=
i2d_ECDSA_SIG
(
s
,
&
der
);
if
(
derlen
!=
sig_len
||
memcmp
(
sigbuf
,
der
,
derlen
))
goto
err
;
ret
=
ECDSA_do_verify
(
dgst
,
dgst_len
,
s
,
eckey
);
err:
OPENSSL_clear_free
(
der
,
derlen
);
ECDSA_SIG_free
(
s
);
return
(
ret
);
}
int
ossl_ecdsa_verify_sig
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
ECDSA_SIG
*
sig
,
EC_KEY
*
eckey
)
{
...
...
crypto/ec/ecdsa_sign.c
浏览文件 @
a200a817
...
...
@@ -82,20 +82,14 @@ int ECDSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char
return
ECDSA_sign_ex
(
type
,
dgst
,
dlen
,
sig
,
siglen
,
NULL
,
NULL
,
eckey
);
}
int
ECDSA_sign_ex
(
int
type
,
const
unsigned
char
*
dgst
,
int
dlen
,
unsigned
char
*
sig
,
unsigned
int
*
siglen
,
const
BIGNUM
*
kinv
,
int
ECDSA_sign_ex
(
int
type
,
const
unsigned
char
*
dgst
,
int
dlen
,
unsigned
char
*
sig
,
unsigned
int
*
siglen
,
const
BIGNUM
*
kinv
,
const
BIGNUM
*
r
,
EC_KEY
*
eckey
)
{
ECDSA_SIG
*
s
;
RAND_seed
(
dgst
,
dlen
);
s
=
ECDSA_do_sign_ex
(
dgst
,
dlen
,
kinv
,
r
,
eckey
);
if
(
s
==
NULL
)
{
*
siglen
=
0
;
return
0
;
}
*
siglen
=
i2d_ECDSA_SIG
(
s
,
&
sig
);
ECDSA_SIG_free
(
s
);
return
1
;
if
(
eckey
->
meth
->
sign
)
return
eckey
->
meth
->
sign
(
type
,
dgst
,
dlen
,
sig
,
siglen
,
kinv
,
r
,
eckey
);
ECerr
(
EC_F_ECDSA_SIGN_EX
,
EC_R_OPERATION_NOT_SUPPORTED
);
return
0
;
}
int
ECDSA_sign_setup
(
EC_KEY
*
eckey
,
BN_CTX
*
ctx_in
,
BIGNUM
**
kinvp
,
...
...
crypto/ec/ecdsa_vrf.c
浏览文件 @
a200a817
...
...
@@ -88,24 +88,10 @@ int ECDSA_do_verify(const unsigned char *dgst, int dgst_len,
int
ECDSA_verify
(
int
type
,
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
unsigned
char
*
sigbuf
,
int
sig_len
,
EC_KEY
*
eckey
)
{
ECDSA_SIG
*
s
;
const
unsigned
char
*
p
=
sigbuf
;
unsigned
char
*
der
=
NULL
;
int
derlen
=
-
1
;
int
ret
=
-
1
;
s
=
ECDSA_SIG_new
();
if
(
s
==
NULL
)
return
(
ret
);
if
(
d2i_ECDSA_SIG
(
&
s
,
&
p
,
sig_len
)
==
NULL
)
goto
err
;
/* Ensure signature uses DER and doesn't have trailing garbage */
derlen
=
i2d_ECDSA_SIG
(
s
,
&
der
);
if
(
derlen
!=
sig_len
||
memcmp
(
sigbuf
,
der
,
derlen
))
goto
err
;
ret
=
ECDSA_do_verify
(
dgst
,
dgst_len
,
s
,
eckey
);
err:
OPENSSL_clear_free
(
der
,
derlen
);
ECDSA_SIG_free
(
s
);
return
(
ret
);
if
(
eckey
->
meth
->
verify
)
return
eckey
->
meth
->
verify
(
type
,
dgst
,
dgst_len
,
sigbuf
,
sig_len
,
eckey
);
ECerr
(
EC_F_ECDSA_VERIFY
,
EC_R_OPERATION_NOT_SUPPORTED
);
return
0
;
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录