Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
682b112a
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看板
提交
682b112a
编写于
10月 04, 2005
作者:
A
Andy Polyakov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Reserve for SMALL_FOOTPRINT bn_asm.c. Currently OPENSSL_SMALL_FOOTPRINT
is defined on Windows CE targets.
上级
e7382805
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
84 addition
and
75 deletion
+84
-75
crypto/bn/bn.h
crypto/bn/bn.h
+2
-0
crypto/bn/bn_asm.c
crypto/bn/bn_asm.c
+82
-75
未找到文件。
crypto/bn/bn.h
浏览文件 @
682b112a
...
...
@@ -94,9 +94,11 @@ extern "C" {
/* #define BN_DEBUG */
/* #define BN_DEBUG_RAND */
#ifndef OPENSSL_SMALL_FOOTPRINT
#define BN_MUL_COMBA
#define BN_SQR_COMBA
#define BN_RECURSION
#endif
/* This next option uses the C libraries (2 word)/(1 word) function.
* If it is not defined, I use my C version (which is slower).
...
...
crypto/bn/bn_asm.c
浏览文件 @
682b112a
...
...
@@ -75,6 +75,7 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)
assert
(
num
>=
0
);
if
(
num
<=
0
)
return
(
c1
);
#ifndef OPENSSL_SMALL_FOOTPRINT
while
(
num
&~
3
)
{
mul_add
(
rp
[
0
],
ap
[
0
],
w
,
c1
);
...
...
@@ -83,11 +84,11 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)
mul_add
(
rp
[
3
],
ap
[
3
],
w
,
c1
);
ap
+=
4
;
rp
+=
4
;
num
-=
4
;
}
if
(
num
)
#endif
while
(
num
)
{
mul_add
(
rp
[
0
],
ap
[
0
],
w
,
c1
);
if
(
--
num
==
0
)
return
c1
;
mul_add
(
rp
[
1
],
ap
[
1
],
w
,
c1
);
if
(
--
num
==
0
)
return
c1
;
mul_add
(
rp
[
2
],
ap
[
2
],
w
,
c1
);
return
c1
;
mul_add
(
rp
[
0
],
ap
[
0
],
w
,
c1
);
ap
++
;
rp
++
;
num
--
;
}
return
(
c1
);
...
...
@@ -100,6 +101,7 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)
assert
(
num
>=
0
);
if
(
num
<=
0
)
return
(
c1
);
#ifndef OPENSSL_SMALL_FOOTPRINT
while
(
num
&~
3
)
{
mul
(
rp
[
0
],
ap
[
0
],
w
,
c1
);
...
...
@@ -108,11 +110,11 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)
mul
(
rp
[
3
],
ap
[
3
],
w
,
c1
);
ap
+=
4
;
rp
+=
4
;
num
-=
4
;
}
if
(
num
)
#endif
while
(
num
)
{
mul
(
rp
[
0
],
ap
[
0
],
w
,
c1
);
if
(
--
num
==
0
)
return
c1
;
mul
(
rp
[
1
],
ap
[
1
],
w
,
c1
);
if
(
--
num
==
0
)
return
c1
;
mul
(
rp
[
2
],
ap
[
2
],
w
,
c1
);
mul
(
rp
[
0
],
ap
[
0
],
w
,
c1
);
ap
++
;
rp
++
;
num
--
;
}
return
(
c1
);
}
...
...
@@ -121,6 +123,8 @@ void bn_sqr_words(BN_ULONG *r, const BN_ULONG *a, int n)
{
assert
(
n
>=
0
);
if
(
n
<=
0
)
return
;
#ifndef OPENSSL_SMALL_FOOTPRINT
while
(
n
&~
3
)
{
sqr
(
r
[
0
],
r
[
1
],
a
[
0
]);
...
...
@@ -129,11 +133,11 @@ void bn_sqr_words(BN_ULONG *r, const BN_ULONG *a, int n)
sqr
(
r
[
6
],
r
[
7
],
a
[
3
]);
a
+=
4
;
r
+=
8
;
n
-=
4
;
}
if
(
n
)
#endif
while
(
n
)
{
sqr
(
r
[
0
],
r
[
1
],
a
[
0
]);
if
(
--
n
==
0
)
return
;
sqr
(
r
[
2
],
r
[
3
],
a
[
1
]);
if
(
--
n
==
0
)
return
;
sqr
(
r
[
4
],
r
[
5
],
a
[
2
]);
sqr
(
r
[
0
],
r
[
1
],
a
[
0
]);
a
++
;
r
+=
2
;
n
--
;
}
}
...
...
@@ -150,18 +154,20 @@ BN_ULONG bn_mul_add_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)
bl
=
LBITS
(
w
);
bh
=
HBITS
(
w
);
for
(;;)
#ifndef OPENSSL_SMALL_FOOTPRINT
while
(
num
&~
3
)
{
mul_add
(
rp
[
0
],
ap
[
0
],
bl
,
bh
,
c
);
if
(
--
num
==
0
)
break
;
mul_add
(
rp
[
1
],
ap
[
1
],
bl
,
bh
,
c
);
if
(
--
num
==
0
)
break
;
mul_add
(
rp
[
2
],
ap
[
2
],
bl
,
bh
,
c
);
if
(
--
num
==
0
)
break
;
mul_add
(
rp
[
3
],
ap
[
3
],
bl
,
bh
,
c
);
if
(
--
num
==
0
)
break
;
ap
+=
4
;
rp
+=
4
;
ap
+=
4
;
rp
+=
4
;
num
-=
4
;
}
#endif
while
(
num
)
{
mul_add
(
rp
[
0
],
ap
[
0
],
bl
,
bh
,
c
);
ap
++
;
rp
++
;
num
--
;
}
return
(
c
);
}
...
...
@@ -177,18 +183,20 @@ BN_ULONG bn_mul_words(BN_ULONG *rp, const BN_ULONG *ap, int num, BN_ULONG w)
bl
=
LBITS
(
w
);
bh
=
HBITS
(
w
);
for
(;;)
#ifndef OPENSSL_SMALL_FOOTPRINT
while
(
num
&~
3
)
{
mul
(
rp
[
0
],
ap
[
0
],
bl
,
bh
,
carry
);
if
(
--
num
==
0
)
break
;
mul
(
rp
[
1
],
ap
[
1
],
bl
,
bh
,
carry
);
if
(
--
num
==
0
)
break
;
mul
(
rp
[
2
],
ap
[
2
],
bl
,
bh
,
carry
);
if
(
--
num
==
0
)
break
;
mul
(
rp
[
3
],
ap
[
3
],
bl
,
bh
,
carry
);
if
(
--
num
==
0
)
break
;
ap
+=
4
;
rp
+=
4
;
ap
+=
4
;
rp
+=
4
;
num
-=
4
;
}
#endif
while
(
num
)
{
mul
(
rp
[
0
],
ap
[
0
],
bl
,
bh
,
carry
);
ap
++
;
rp
++
;
num
--
;
}
return
(
carry
);
}
...
...
@@ -197,22 +205,21 @@ void bn_sqr_words(BN_ULONG *r, const BN_ULONG *a, int n)
{
assert
(
n
>=
0
);
if
(
n
<=
0
)
return
;
for
(;;)
#ifndef OPENSSL_SMALL_FOOTPRINT
while
(
n
&~
3
)
{
sqr64
(
r
[
0
],
r
[
1
],
a
[
0
]);
if
(
--
n
==
0
)
break
;
sqr64
(
r
[
2
],
r
[
3
],
a
[
1
]);
if
(
--
n
==
0
)
break
;
sqr64
(
r
[
4
],
r
[
5
],
a
[
2
]);
if
(
--
n
==
0
)
break
;
sqr64
(
r
[
6
],
r
[
7
],
a
[
3
]);
if
(
--
n
==
0
)
break
;
a
+=
4
;
r
+=
8
;
a
+=
4
;
r
+=
8
;
n
-=
4
;
}
#endif
while
(
n
)
{
sqr64
(
r
[
0
],
r
[
1
],
a
[
0
]);
a
++
;
r
+=
2
;
n
--
;
}
}
...
...
@@ -303,31 +310,30 @@ BN_ULONG bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, int n)
assert
(
n
>=
0
);
if
(
n
<=
0
)
return
((
BN_ULONG
)
0
);
for
(;;)
#ifndef OPENSSL_SMALL_FOOTPRINT
while
(
n
&~
3
)
{
ll
+=
(
BN_ULLONG
)
a
[
0
]
+
b
[
0
];
r
[
0
]
=
(
BN_ULONG
)
ll
&
BN_MASK2
;
ll
>>=
BN_BITS2
;
if
(
--
n
<=
0
)
break
;
ll
+=
(
BN_ULLONG
)
a
[
1
]
+
b
[
1
];
r
[
1
]
=
(
BN_ULONG
)
ll
&
BN_MASK2
;
ll
>>=
BN_BITS2
;
if
(
--
n
<=
0
)
break
;
ll
+=
(
BN_ULLONG
)
a
[
2
]
+
b
[
2
];
r
[
2
]
=
(
BN_ULONG
)
ll
&
BN_MASK2
;
ll
>>=
BN_BITS2
;
if
(
--
n
<=
0
)
break
;
ll
+=
(
BN_ULLONG
)
a
[
3
]
+
b
[
3
];
r
[
3
]
=
(
BN_ULONG
)
ll
&
BN_MASK2
;
ll
>>=
BN_BITS2
;
if
(
--
n
<=
0
)
break
;
a
+=
4
;
b
+=
4
;
r
+=
4
;
a
+=
4
;
b
+=
4
;
r
+=
4
;
n
-=
4
;
}
#endif
while
(
n
)
{
ll
+=
(
BN_ULLONG
)
a
[
0
]
+
b
[
0
];
r
[
0
]
=
(
BN_ULONG
)
ll
&
BN_MASK2
;
ll
>>=
BN_BITS2
;
a
++
;
b
++
;
r
++
;
n
--
;
}
return
((
BN_ULONG
)
ll
);
}
...
...
@@ -340,7 +346,8 @@ BN_ULONG bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, int n)
if
(
n
<=
0
)
return
((
BN_ULONG
)
0
);
c
=
0
;
for
(;;)
#ifndef OPENSSL_SMALL_FOOTPRINT
while
(
n
&~
3
)
{
t
=
a
[
0
];
t
=
(
t
+
c
)
&
BN_MASK2
;
...
...
@@ -348,35 +355,36 @@ BN_ULONG bn_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, int n)
l
=
(
t
+
b
[
0
])
&
BN_MASK2
;
c
+=
(
l
<
t
);
r
[
0
]
=
l
;
if
(
--
n
<=
0
)
break
;
t
=
a
[
1
];
t
=
(
t
+
c
)
&
BN_MASK2
;
c
=
(
t
<
c
);
l
=
(
t
+
b
[
1
])
&
BN_MASK2
;
c
+=
(
l
<
t
);
r
[
1
]
=
l
;
if
(
--
n
<=
0
)
break
;
t
=
a
[
2
];
t
=
(
t
+
c
)
&
BN_MASK2
;
c
=
(
t
<
c
);
l
=
(
t
+
b
[
2
])
&
BN_MASK2
;
c
+=
(
l
<
t
);
r
[
2
]
=
l
;
if
(
--
n
<=
0
)
break
;
t
=
a
[
3
];
t
=
(
t
+
c
)
&
BN_MASK2
;
c
=
(
t
<
c
);
l
=
(
t
+
b
[
3
])
&
BN_MASK2
;
c
+=
(
l
<
t
);
r
[
3
]
=
l
;
if
(
--
n
<=
0
)
break
;
a
+=
4
;
b
+=
4
;
r
+=
4
;
a
+=
4
;
b
+=
4
;
r
+=
4
;
n
-=
4
;
}
#endif
while
(
n
)
{
t
=
a
[
0
];
t
=
(
t
+
c
)
&
BN_MASK2
;
c
=
(
t
<
c
);
l
=
(
t
+
b
[
0
])
&
BN_MASK2
;
c
+=
(
l
<
t
);
r
[
0
]
=
l
;
a
++
;
b
++
;
r
++
;
n
--
;
}
return
((
BN_ULONG
)
c
);
}
...
...
@@ -390,36 +398,35 @@ BN_ULONG bn_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, int n)
assert
(
n
>=
0
);
if
(
n
<=
0
)
return
((
BN_ULONG
)
0
);
for
(;;)
#ifndef OPENSSL_SMALL_FOOTPRINT
while
(
n
&~
3
)
{
t1
=
a
[
0
];
t2
=
b
[
0
];
r
[
0
]
=
(
t1
-
t2
-
c
)
&
BN_MASK2
;
if
(
t1
!=
t2
)
c
=
(
t1
<
t2
);
if
(
--
n
<=
0
)
break
;
t1
=
a
[
1
];
t2
=
b
[
1
];
r
[
1
]
=
(
t1
-
t2
-
c
)
&
BN_MASK2
;
if
(
t1
!=
t2
)
c
=
(
t1
<
t2
);
if
(
--
n
<=
0
)
break
;
t1
=
a
[
2
];
t2
=
b
[
2
];
r
[
2
]
=
(
t1
-
t2
-
c
)
&
BN_MASK2
;
if
(
t1
!=
t2
)
c
=
(
t1
<
t2
);
if
(
--
n
<=
0
)
break
;
t1
=
a
[
3
];
t2
=
b
[
3
];
r
[
3
]
=
(
t1
-
t2
-
c
)
&
BN_MASK2
;
if
(
t1
!=
t2
)
c
=
(
t1
<
t2
);
if
(
--
n
<=
0
)
break
;
a
+=
4
;
b
+=
4
;
r
+=
4
;
a
+=
4
;
b
+=
4
;
r
+=
4
;
n
-=
4
;
}
#endif
while
(
n
)
{
t1
=
a
[
0
];
t2
=
b
[
0
];
r
[
0
]
=
(
t1
-
t2
-
c
)
&
BN_MASK2
;
if
(
t1
!=
t2
)
c
=
(
t1
<
t2
);
a
++
;
b
++
;
r
++
;
n
--
;
}
return
(
c
);
}
#if
def BN_MUL_COMBA
#if
defined(BN_MUL_COMBA) && !defined(OPENSSL_SMALL_FOOTPRINT)
#undef bn_mul_comba8
#undef bn_mul_comba4
...
...
@@ -826,7 +833,7 @@ void bn_sqr_comba4(BN_ULONG *r, const BN_ULONG *a)
* This is essentially reference implementation, which may or may not
* result in performance improvement. E.g. on IA-32 this does give 40%
* faster rsa1024 private key operations and 10% faster rsa4096 ones,
* while on AMD64 it improves rsa1024 sign only by 10%
, but
*worsens*
* while on AMD64 it improves rsa1024 sign only by 10%
and
*worsens*
* rsa4096 sign by 15%. Once again, it's a reference implementation,
* one to be used as start-point for platform-specific assembler.
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录