Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
btwise
openssl
提交
c10e3f0c
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,发现更多精彩内容 >>
提交
c10e3f0c
编写于
11月 03, 2013
作者:
B
Ben Laurie
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
PBKDF2 should be efficient. Contributed by Christian Heimes
<christian@python.org>.
上级
d519f083
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
29 addition
and
8 deletion
+29
-8
crypto/evp/p5_crpt2.c
crypto/evp/p5_crpt2.c
+29
-8
未找到文件。
crypto/evp/p5_crpt2.c
浏览文件 @
c10e3f0c
...
...
@@ -85,7 +85,7 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
unsigned
char
digtmp
[
EVP_MAX_MD_SIZE
],
*
p
,
itmp
[
4
];
int
cplen
,
j
,
k
,
tkeylen
,
mdlen
;
unsigned
long
i
=
1
;
HMAC_CTX
hctx
;
HMAC_CTX
hctx
_tpl
,
hctx
;
mdlen
=
EVP_MD_size
(
digest
);
if
(
mdlen
<
0
)
...
...
@@ -98,6 +98,11 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
passlen
=
0
;
else
if
(
passlen
==
-
1
)
passlen
=
strlen
(
pass
);
if
(
!
HMAC_Init_ex
(
&
hctx_tpl
,
pass
,
passlen
,
digest
,
NULL
))
{
HMAC_CTX_cleanup
(
&
hctx_tpl
);
return
0
;
}
while
(
tkeylen
)
{
if
(
tkeylen
>
mdlen
)
...
...
@@ -111,19 +116,35 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
itmp
[
1
]
=
(
unsigned
char
)((
i
>>
16
)
&
0xff
);
itmp
[
2
]
=
(
unsigned
char
)((
i
>>
8
)
&
0xff
);
itmp
[
3
]
=
(
unsigned
char
)(
i
&
0xff
);
if
(
!
HMAC_Init_ex
(
&
hctx
,
pass
,
passlen
,
digest
,
NULL
)
||
!
HMAC_Update
(
&
hctx
,
salt
,
saltlen
)
||
!
HMAC_Update
(
&
hctx
,
itmp
,
4
)
||
!
HMAC_Final
(
&
hctx
,
digtmp
,
NULL
))
if
(
!
HMAC_CTX_copy
(
&
hctx
,
&
hctx_tpl
))
{
HMAC_CTX_cleanup
(
&
hctx_tpl
);
return
0
;
}
if
(
!
HMAC_Update
(
&
hctx
,
salt
,
saltlen
)
||
!
HMAC_Update
(
&
hctx
,
itmp
,
4
)
||
!
HMAC_Final
(
&
hctx
,
digtmp
,
NULL
))
{
HMAC_CTX_cleanup
(
&
hctx_tpl
);
HMAC_CTX_cleanup
(
&
hctx
);
return
0
;
}
memcpy
(
p
,
digtmp
,
cplen
);
for
(
j
=
1
;
j
<
iter
;
j
++
)
{
HMAC
(
digest
,
pass
,
passlen
,
digtmp
,
mdlen
,
digtmp
,
NULL
);
if
(
!
HMAC_CTX_copy
(
&
hctx
,
&
hctx_tpl
))
{
HMAC_CTX_cleanup
(
&
hctx_tpl
);
return
0
;
}
if
(
!
HMAC_Update
(
&
hctx
,
digtmp
,
mdlen
)
||
!
HMAC_Final
(
&
hctx
,
digtmp
,
NULL
))
{
HMAC_CTX_cleanup
(
&
hctx_tpl
);
HMAC_CTX_cleanup
(
&
hctx
);
return
0
;
}
HMAC_CTX_cleanup
(
&
hctx
);
for
(
k
=
0
;
k
<
cplen
;
k
++
)
p
[
k
]
^=
digtmp
[
k
];
}
...
...
@@ -131,7 +152,7 @@ int PKCS5_PBKDF2_HMAC(const char *pass, int passlen,
i
++
;
p
+=
cplen
;
}
HMAC_CTX_cleanup
(
&
hctx
);
HMAC_CTX_cleanup
(
&
hctx
_tpl
);
#ifdef DEBUG_PKCS5V2
fprintf
(
stderr
,
"Password:
\n
"
);
h__dump
(
pass
,
passlen
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录