Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
c98a4545
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
c98a4545
编写于
2月 08, 2013
作者:
A
Andy Polyakov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
s3_cbc.c: get rid of expensive divisions.
上级
0e4f7045
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
13 deletion
+20
-13
ssl/s3_cbc.c
ssl/s3_cbc.c
+20
-13
未找到文件。
ssl/s3_cbc.c
浏览文件 @
c98a4545
...
...
@@ -76,6 +76,13 @@
#define DUPLICATE_MSB_TO_ALL(x) ( (unsigned)( (int)(x) >> (sizeof(int)*8-1) ) )
#define DUPLICATE_MSB_TO_ALL_8(x) ((unsigned char)(DUPLICATE_MSB_TO_ALL(x)))
/* constant_time_lt returns 0xff if a<b and 0x00 otherwise. */
static
unsigned
constant_time_lt
(
unsigned
a
,
unsigned
b
)
{
a
-=
b
;
return
DUPLICATE_MSB_TO_ALL
(
a
);
}
/* constant_time_ge returns 0xff if a>=b and 0x00 otherwise. */
static
unsigned
constant_time_ge
(
unsigned
a
,
unsigned
b
)
{
...
...
@@ -285,16 +292,13 @@ void ssl3_cbc_copy_mac(unsigned char* out,
rotate_offset
=
(
div_spoiler
+
mac_start
-
scan_start
)
%
md_size
;
memset
(
rotated_mac
,
0
,
md_size
);
for
(
i
=
scan_start
;
i
<
rec
->
orig_len
;
)
for
(
i
=
scan_start
,
j
=
0
;
i
<
rec
->
orig_len
;
i
++
)
{
for
(
j
=
0
;
j
<
md_size
&&
i
<
rec
->
orig_len
;
i
++
,
j
++
)
{
unsigned
char
mac_started
=
constant_time_ge
(
i
,
mac_start
);
unsigned
char
mac_ended
=
constant_time_ge
(
i
,
mac_end
);
unsigned
char
b
=
0
;
b
=
rec
->
data
[
i
];
rotated_mac
[
j
]
|=
b
&
mac_started
&
~
mac_ended
;
}
unsigned
char
mac_started
=
constant_time_ge
(
i
,
mac_start
);
unsigned
char
mac_ended
=
constant_time_ge
(
i
,
mac_end
);
unsigned
char
b
=
rec
->
data
[
i
];
rotated_mac
[
j
++
]
|=
b
&
mac_started
&
~
mac_ended
;
j
&=
constant_time_lt
(
j
,
md_size
);
}
/* Now rotate the MAC */
...
...
@@ -302,16 +306,19 @@ void ssl3_cbc_copy_mac(unsigned char* out,
j
=
0
;
for
(
i
=
0
;
i
<
md_size
;
i
++
)
{
unsigned
offset
=
(
div_spoiler
+
rotate_offset
+
i
)
%
md_size
;
out
[
j
++
]
=
rotated_mac
[
offset
]
;
out
[
j
++
]
=
rotated_mac
[
rotate_offset
++
]
;
rotate_offset
&=
constant_time_lt
(
rotate_offset
,
md_size
)
;
}
#else
memset
(
out
,
0
,
md_size
);
rotate_offset
=
md_size
-
rotate_offset
;
rotate_offset
&=
constant_time_lt
(
rotate_offset
,
md_size
);
for
(
i
=
0
;
i
<
md_size
;
i
++
)
{
unsigned
offset
=
(
div_spoiler
+
md_size
-
rotate_offset
+
i
)
%
md_size
;
for
(
j
=
0
;
j
<
md_size
;
j
++
)
out
[
j
]
|=
rotated_mac
[
i
]
&
constant_time_eq_8
(
j
,
offset
);
out
[
j
]
|=
rotated_mac
[
i
]
&
constant_time_eq_8
(
j
,
rotate_offset
);
rotate_offset
++
;
rotate_offset
&=
constant_time_lt
(
rotate_offset
,
md_size
);
}
#endif
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录