Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
3f3504bd
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
1 年多 前同步成功
通知
10
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看板
提交
3f3504bd
编写于
12月 15, 2015
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add ECDH/DH utility functions.
Reviewed-by:
N
Richard Levitte
<
levitte@openssl.org
>
上级
44d4f8f2
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
73 addition
and
0 deletion
+73
-0
ssl/s3_lib.c
ssl/s3_lib.c
+71
-0
ssl/ssl_locl.h
ssl/ssl_locl.h
+2
-0
未找到文件。
ssl/s3_lib.c
浏览文件 @
3f3504bd
...
...
@@ -4985,3 +4985,74 @@ int ssl_generate_master_secret(SSL *s, unsigned char *pms, size_t pmslen,
s
->
s3
->
tmp
.
pms
=
NULL
;
return
s
->
session
->
master_key_length
>=
0
;
}
/* Generate a private key from parameters or a curve NID */
EVP_PKEY
*
ssl_generate_pkey
(
EVP_PKEY
*
pm
,
int
nid
)
{
EVP_PKEY_CTX
*
pctx
=
NULL
;
EVP_PKEY
*
pkey
=
NULL
;
if
(
pm
!=
NULL
)
{
pctx
=
EVP_PKEY_CTX_new
(
pm
,
NULL
);
}
else
{
/* Generate a new key for this curve */
pctx
=
EVP_PKEY_CTX_new_id
(
EVP_PKEY_EC
,
NULL
);
}
if
(
pctx
==
NULL
)
goto
err
;
if
(
EVP_PKEY_keygen_init
(
pctx
)
<=
0
)
goto
err
;
if
(
pm
==
NULL
&&
EVP_PKEY_CTX_set_ec_paramgen_curve_nid
(
pctx
,
nid
)
<=
0
)
goto
err
;
if
(
EVP_PKEY_keygen
(
pctx
,
&
pkey
)
<=
0
)
{
EVP_PKEY_free
(
pkey
);
pkey
=
NULL
;
}
err:
EVP_PKEY_CTX_free
(
pctx
);
return
pkey
;
}
/* Derive premaster or master secret for ECDH/DH */
int
ssl_derive
(
SSL
*
s
,
EVP_PKEY
*
privkey
,
EVP_PKEY
*
pubkey
)
{
int
rv
=
0
;
unsigned
char
*
pms
=
NULL
;
size_t
pmslen
=
0
;
EVP_PKEY_CTX
*
pctx
;
if
(
privkey
==
NULL
||
pubkey
==
NULL
)
return
0
;
pctx
=
EVP_PKEY_CTX_new
(
privkey
,
NULL
);
if
(
EVP_PKEY_derive_init
(
pctx
)
<=
0
||
EVP_PKEY_derive_set_peer
(
pctx
,
pubkey
)
<=
0
||
EVP_PKEY_derive
(
pctx
,
NULL
,
&
pmslen
)
<=
0
)
{
goto
err
;
}
pms
=
OPENSSL_malloc
(
pmslen
);
if
(
pms
==
NULL
)
goto
err
;
if
(
EVP_PKEY_derive
(
pctx
,
pms
,
&
pmslen
)
<=
0
)
goto
err
;
if
(
s
->
server
)
{
/* For server generate master secret and discard premaster */
rv
=
ssl_generate_master_secret
(
s
,
pms
,
pmslen
,
1
);
pms
=
NULL
;
}
else
{
/* For client just save premaster secret */
s
->
s3
->
tmp
.
pms
=
pms
;
s
->
s3
->
tmp
.
pmslen
=
pmslen
;
pms
=
NULL
;
rv
=
1
;
}
err:
OPENSSL_clear_free
(
pms
,
pmslen
);
EVP_PKEY_CTX_free
(
pctx
);
return
rv
;
}
ssl/ssl_locl.h
浏览文件 @
3f3504bd
...
...
@@ -1870,6 +1870,8 @@ void ssl_load_ciphers(void);
__owur
int
ssl_fill_hello_random
(
SSL
*
s
,
int
server
,
unsigned
char
*
field
,
int
len
);
__owur
int
ssl_generate_master_secret
(
SSL
*
s
,
unsigned
char
*
pms
,
size_t
pmslen
,
int
free_pms
);
__owur
EVP_PKEY
*
ssl_generate_pkey
(
EVP_PKEY
*
pm
,
int
nid
);
__owur
int
ssl_derive
(
SSL
*
s
,
EVP_PKEY
*
privkey
,
EVP_PKEY
*
pubkey
);
__owur
const
SSL_CIPHER
*
ssl3_get_cipher_by_char
(
const
unsigned
char
*
p
);
__owur
int
ssl3_put_cipher_by_char
(
const
SSL_CIPHER
*
c
,
unsigned
char
*
p
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录