Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
6535eb17
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看板
提交
6535eb17
编写于
2月 05, 2000
作者:
U
Ulf Möller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use MONT_WORD macro to control if the word-based or the bignum
algorithm is used.
上级
9b141126
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
95 addition
and
116 deletion
+95
-116
crypto/bn/bn.h
crypto/bn/bn.h
+0
-1
crypto/bn/bn_mont.c
crypto/bn/bn_mont.c
+95
-114
doc/crypto/BN_mod_mul_montgomery.pod
doc/crypto/BN_mod_mul_montgomery.pod
+0
-1
未找到文件。
crypto/bn/bn.h
浏览文件 @
6535eb17
...
...
@@ -260,7 +260,6 @@ typedef struct bn_blinding_st
/* Used for montgomery multiplication */
typedef
struct
bn_mont_ctx_st
{
int
use_word
;
/* 0 for word form, 1 for bignum form */
int
ri
;
/* number of bits in R */
BIGNUM
RR
;
/* used to convert to montgomery form */
BIGNUM
N
;
/* The modulus */
...
...
crypto/bn/bn_mont.c
浏览文件 @
6535eb17
...
...
@@ -67,6 +67,8 @@
#include "cryptlib.h"
#include "bn_lcl.h"
#define MONT_WORD
/* use the faster word-based algorithm */
int
BN_mod_mul_montgomery
(
BIGNUM
*
r
,
BIGNUM
*
a
,
BIGNUM
*
b
,
BN_MONT_CTX
*
mont
,
BN_CTX
*
ctx
)
{
...
...
@@ -105,22 +107,17 @@ err:
return
(
0
);
}
#define BN_RECURSION_MONT
int
BN_from_montgomery
(
BIGNUM
*
ret
,
BIGNUM
*
a
,
BN_MONT_CTX
*
mont
,
BN_CTX
*
ctx
)
{
int
retn
=
0
;
BN_CTX_start
(
ctx
);
#ifdef BN_RECURSION_MONT
if
(
mont
->
use_word
)
#endif
{
#ifdef MONT_WORD
BIGNUM
*
n
,
*
r
;
BN_ULONG
*
ap
,
*
np
,
*
rp
,
n0
,
v
,
*
nrp
;
int
al
,
nl
,
max
,
i
,
x
,
ri
;
BN_CTX_start
(
ctx
);
if
((
r
=
BN_CTX_get
(
ctx
))
==
NULL
)
goto
err
;
if
(
!
BN_copy
(
r
,
a
))
goto
err
;
...
...
@@ -155,7 +152,7 @@ int BN_from_montgomery(BIGNUM *ret, BIGNUM *a, BN_MONT_CTX *mont,
n0
=
mont
->
n0
;
#ifdef BN_COUNT
printf
(
"word BN_from_montgomery %d * %d
\n
"
,
nl
,
nl
);
printf
(
"word BN_from_montgomery %d * %d
\n
"
,
nl
,
nl
);
#endif
for
(
i
=
0
;
i
<
nl
;
i
++
)
{
...
...
@@ -203,18 +200,10 @@ printf("word BN_from_montgomery %d * %d\n",nl,nl);
for
(;
i
<
al
;
i
++
)
rp
[
i
]
=
ap
[
i
];
#endif
if
(
BN_ucmp
(
ret
,
&
(
mont
->
N
))
>=
0
)
{
BN_usub
(
ret
,
ret
,
&
(
mont
->
N
));
/* XXX */
}
retn
=
1
;
}
#ifdef BN_RECURSION_MONT
else
/* bignum version */
{
#else
/* !MONT_WORD */
BIGNUM
*
t1
,
*
t2
;
BN_CTX_start
(
ctx
);
t1
=
BN_CTX_get
(
ctx
);
t2
=
BN_CTX_get
(
ctx
);
if
(
t1
==
NULL
||
t2
==
NULL
)
goto
err
;
...
...
@@ -228,12 +217,13 @@ printf("word BN_from_montgomery %d * %d\n",nl,nl);
if
(
!
BN_mul
(
t1
,
t2
,
&
mont
->
N
,
ctx
))
goto
err
;
if
(
!
BN_add
(
t2
,
a
,
t1
))
goto
err
;
BN_rshift
(
ret
,
t2
,
mont
->
ri
);
#endif
/* MONT_WORD */
if
(
BN_ucmp
(
ret
,
&
mont
->
N
)
>=
0
)
BN_usub
(
ret
,
ret
,
&
mont
->
N
);
retn
=
1
;
if
(
BN_ucmp
(
ret
,
&
(
mont
->
N
)
)
>=
0
)
{
BN_usub
(
ret
,
ret
,
&
(
mont
->
N
))
;
}
#endif
retn
=
1
;
err:
BN_CTX_end
(
ctx
);
return
(
retn
);
...
...
@@ -253,7 +243,6 @@ BN_MONT_CTX *BN_MONT_CTX_new(void)
void
BN_MONT_CTX_init
(
BN_MONT_CTX
*
ctx
)
{
ctx
->
use_word
=
0
;
ctx
->
ri
=
0
;
BN_init
(
&
(
ctx
->
RR
));
BN_init
(
&
(
ctx
->
N
));
...
...
@@ -281,16 +270,11 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx)
R
=
&
(
mont
->
RR
);
/* grab RR as a temp */
BN_copy
(
&
(
mont
->
N
),
mod
);
/* Set N */
#ifdef BN_RECURSION_MONT
/* the word-based algorithm is faster */
if
(
mont
->
N
.
top
>
BN_MONT_CTX_SET_SIZE_WORD
)
#endif
#ifdef MONT_WORD
{
BIGNUM
tmod
;
BN_ULONG
buf
[
2
];
mont
->
use_word
=
1
;
mont
->
ri
=
(
BN_num_bits
(
mod
)
+
(
BN_BITS2
-
1
))
/
BN_BITS2
*
BN_BITS2
;
BN_zero
(
R
);
BN_set_bit
(
R
,
BN_BITS2
);
/* R */
...
...
@@ -314,10 +298,8 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx)
mont
->
n0
=
Ri
.
d
[
0
];
BN_free
(
&
Ri
);
}
#ifdef BN_RECURSION_MONT
else
#else
/* !MONT_WORD */
{
/* bignum version */
mont
->
use_word
=
0
;
mont
->
ri
=
BN_num_bits
(
mod
);
BN_zero
(
R
);
BN_set_bit
(
R
,
mont
->
ri
);
/* R = 2^ri */
...
...
@@ -349,7 +331,6 @@ BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from)
BN_copy
(
&
(
to
->
RR
),
&
(
from
->
RR
));
BN_copy
(
&
(
to
->
N
),
&
(
from
->
N
));
BN_copy
(
&
(
to
->
Ni
),
&
(
from
->
Ni
));
to
->
use_word
=
from
->
use_word
;
to
->
ri
=
from
->
ri
;
to
->
n0
=
from
->
n0
;
return
(
to
);
...
...
doc/crypto/BN_mod_mul_montgomery.pod
浏览文件 @
6535eb17
...
...
@@ -58,7 +58,6 @@ The B<BN_MONT_CTX> structure is defined as follows:
typedef struct bn_mont_ctx_st
{
int use_word; /* 0 for word form, 1 for bignum form */
int ri; /* number of bits in R */
BIGNUM RR; /* R^2 (used to convert to Montgomery form) */
BIGNUM N; /* The modulus */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录