Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
6dad7bd6
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看板
提交
6dad7bd6
编写于
6月 07, 2000
作者:
B
Bodo Möller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Speed up DH with small generator.
上级
208f3688
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
116 addition
and
52 deletion
+116
-52
CHANGES
CHANGES
+5
-0
crypto/bn/bn.h
crypto/bn/bn.h
+3
-0
crypto/bn/bn_err.c
crypto/bn/bn_err.c
+1
-0
crypto/bn/bn_exp.c
crypto/bn/bn_exp.c
+93
-45
crypto/dh/dh_key.c
crypto/dh/dh_key.c
+14
-7
未找到文件。
CHANGES
浏览文件 @
6dad7bd6
...
...
@@ -4,6 +4,11 @@
Changes between 0.9.5a and 0.9.6 [xx XXX 2000]
*) New function BN_mod_exp_mont_word for small bases (roughly 20%
faster than BN_mod_exp_mont even though it does not use
windowing).
[Bodo Moeller]
*) CygWin32 support.
[John Jarvie <jjarvie@newsguy.com>]
...
...
crypto/bn/bn.h
浏览文件 @
6dad7bd6
...
...
@@ -364,6 +364,8 @@ int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p,
const
BIGNUM
*
m
,
BN_CTX
*
ctx
);
int
BN_mod_exp_mont
(
BIGNUM
*
r
,
BIGNUM
*
a
,
const
BIGNUM
*
p
,
const
BIGNUM
*
m
,
BN_CTX
*
ctx
,
BN_MONT_CTX
*
m_ctx
);
int
BN_mod_exp_mont_word
(
BIGNUM
*
r
,
BN_ULONG
a
,
const
BIGNUM
*
p
,
const
BIGNUM
*
m
,
BN_CTX
*
ctx
,
BN_MONT_CTX
*
m_ctx
);
int
BN_mod_exp2_mont
(
BIGNUM
*
r
,
BIGNUM
*
a1
,
BIGNUM
*
p1
,
BIGNUM
*
a2
,
BIGNUM
*
p2
,
BIGNUM
*
m
,
BN_CTX
*
ctx
,
BN_MONT_CTX
*
m_ctx
);
int
BN_mod_exp_simple
(
BIGNUM
*
r
,
BIGNUM
*
a
,
BIGNUM
*
p
,
...
...
@@ -484,6 +486,7 @@ BN_ULONG bn_sub_words(BN_ULONG *rp, BN_ULONG *ap, BN_ULONG *bp,int num);
#define BN_F_BN_DIV 107
#define BN_F_BN_EXPAND2 108
#define BN_F_BN_MOD_EXP_MONT 109
#define BN_F_BN_MOD_EXP_MONT_WORD 117
#define BN_F_BN_MOD_INVERSE 110
#define BN_F_BN_MOD_MUL_RECIPROCAL 111
#define BN_F_BN_MPI2BN 112
...
...
crypto/bn/bn_err.c
浏览文件 @
6dad7bd6
...
...
@@ -77,6 +77,7 @@ static ERR_STRING_DATA BN_str_functs[]=
{
ERR_PACK
(
0
,
BN_F_BN_DIV
,
0
),
"BN_div"
},
{
ERR_PACK
(
0
,
BN_F_BN_EXPAND2
,
0
),
"bn_expand2"
},
{
ERR_PACK
(
0
,
BN_F_BN_MOD_EXP_MONT
,
0
),
"BN_mod_exp_mont"
},
{
ERR_PACK
(
0
,
BN_F_BN_MOD_EXP_MONT_WORD
,
0
),
"BN_MOD_EXP_MONT_WORD"
},
{
ERR_PACK
(
0
,
BN_F_BN_MOD_INVERSE
,
0
),
"BN_mod_inverse"
},
{
ERR_PACK
(
0
,
BN_F_BN_MOD_MUL_RECIPROCAL
,
0
),
"BN_mod_mul_reciprocal"
},
{
ERR_PACK
(
0
,
BN_F_BN_MPI2BN
,
0
),
"BN_mpi2bn"
},
...
...
crypto/bn/bn_exp.c
浏览文件 @
6dad7bd6
...
...
@@ -66,6 +66,7 @@
# include <dlfcn.h>
#endif
#define TABLE_SIZE 16
/* slow but works */
...
...
@@ -91,42 +92,6 @@ err:
return
(
r
);
}
#if 0
/* this one works - simple but works */
int BN_mod_exp(BIGNUM *r, BIGNUM *a, BIGNUM *p, BIGNUM *m, BN_CTX *ctx)
{
int i,bits,ret=0;
BIGNUM *v,*tmp;
BN_CTX_start(ctx);
v = BN_CTX_get(ctx);
tmp = BN_CTX_get(ctx);
if (v == NULL || tmp == NULL) goto err;
if (BN_copy(v,a) == NULL) goto err;
bits=BN_num_bits(p);
if (BN_is_odd(p))
{ if (BN_copy(r,a) == NULL) goto err; }
else { if (!BN_one(r)) goto err; }
for (i=1; i<bits; i++)
{
if (!BN_sqr(tmp,v,ctx)) goto err;
if (!BN_mod(v,tmp,m,ctx)) goto err;
if (BN_is_bit_set(p,i))
{
if (!BN_mul(tmp,r,v,ctx)) goto err;
if (!BN_mod(r,tmp,m,ctx)) goto err;
}
}
ret=1;
err:
BN_CTX_end(ctx);
return(ret);
}
#endif
/* this one works - simple but works */
int
BN_exp
(
BIGNUM
*
r
,
BIGNUM
*
a
,
BIGNUM
*
p
,
BN_CTX
*
ctx
)
...
...
@@ -163,6 +128,7 @@ err:
return
(
ret
);
}
#ifdef ATALLA
/*
...
...
@@ -330,6 +296,7 @@ int BN_mod_exp_atalla(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m)
}
#endif
/* def ATALLA */
int
BN_mod_exp
(
BIGNUM
*
r
,
BIGNUM
*
a
,
const
BIGNUM
*
p
,
const
BIGNUM
*
m
,
BN_CTX
*
ctx
)
{
...
...
@@ -354,7 +321,15 @@ int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m,
/* if ((m->d[m->top-1]&BN_TBIT) && BN_is_odd(m)) */
if
(
BN_is_odd
(
m
))
{
ret
=
BN_mod_exp_mont
(
r
,
a
,
p
,
m
,
ctx
,
NULL
);
}
{
if
(
a
->
top
==
1
)
{
BN_ULONG
A
=
a
->
d
[
0
];
ret
=
BN_mod_exp_mont_word
(
r
,
A
,
p
,
m
,
ctx
,
NULL
);
}
else
ret
=
BN_mod_exp_mont
(
r
,
a
,
p
,
m
,
ctx
,
NULL
);
}
else
#endif
#ifdef RECP_MUL_MOD
...
...
@@ -370,7 +345,7 @@ int BN_mod_exp(BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m,
return
(
ret
);
}
/* #ifdef RECP_MUL_MOD */
int
BN_mod_exp_recp
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
p
,
const
BIGNUM
*
m
,
BN_CTX
*
ctx
)
{
...
...
@@ -485,9 +460,8 @@ err:
BN_RECP_CTX_free
(
&
recp
);
return
(
ret
);
}
/* #endif */
/* #ifdef MONT_MUL_MOD */
int
BN_mod_exp_mont
(
BIGNUM
*
rr
,
BIGNUM
*
a
,
const
BIGNUM
*
p
,
const
BIGNUM
*
m
,
BN_CTX
*
ctx
,
BN_MONT_CTX
*
in_mont
)
{
...
...
@@ -527,11 +501,9 @@ int BN_mod_exp_mont(BIGNUM *rr, BIGNUM *a, const BIGNUM *p,
/* If this is not done, things will break in the montgomery
* part */
#if 1
if
(
in_mont
!=
NULL
)
mont
=
in_mont
;
else
#endif
{
if
((
mont
=
BN_MONT_CTX_new
())
==
NULL
)
goto
err
;
if
(
!
BN_MONT_CTX_set
(
mont
,
m
,
ctx
))
goto
err
;
...
...
@@ -541,7 +513,8 @@ int BN_mod_exp_mont(BIGNUM *rr, BIGNUM *a, const BIGNUM *p,
ts
=
1
;
if
(
BN_ucmp
(
a
,
m
)
>=
0
)
{
BN_mod
(
&
(
val
[
0
]),
a
,
m
,
ctx
);
if
(
!
BN_mod
(
&
(
val
[
0
]),
a
,
m
,
ctx
))
goto
err
;
aa
=
&
(
val
[
0
]);
}
else
...
...
@@ -574,7 +547,7 @@ int BN_mod_exp_mont(BIGNUM *rr, BIGNUM *a, const BIGNUM *p,
wstart
=
bits
-
1
;
/* The top bit of the window */
wend
=
0
;
/* The bottom bit of the window */
if
(
!
BN_to_montgomery
(
r
,
BN_value_one
(),
mont
,
ctx
))
goto
err
;
if
(
!
BN_to_montgomery
(
r
,
BN_value_one
(),
mont
,
ctx
))
goto
err
;
for
(;;)
{
if
(
BN_is_bit_set
(
p
,
wstart
)
==
0
)
...
...
@@ -635,7 +608,82 @@ err:
BN_clear_free
(
&
(
val
[
i
]));
return
(
ret
);
}
/* #endif */
int
BN_mod_exp_mont_word
(
BIGNUM
*
rr
,
BN_ULONG
a
,
const
BIGNUM
*
p
,
const
BIGNUM
*
m
,
BN_CTX
*
ctx
,
BN_MONT_CTX
*
in_mont
)
/* if we had BN_mod_exp_mont_2, we could even use windowing in it */
{
int
b
,
bits
,
ret
=
0
;
BIGNUM
*
d
,
*
r
,
*
t
;
BN_MONT_CTX
*
mont
=
NULL
;
bn_check_top
(
p
);
bn_check_top
(
m
);
if
(
!
(
m
->
d
[
0
]
&
1
))
{
BNerr
(
BN_F_BN_MOD_EXP_MONT_WORD
,
BN_R_CALLED_WITH_EVEN_MODULUS
);
return
(
0
);
}
bits
=
BN_num_bits
(
p
);
if
(
bits
==
0
)
{
BN_one
(
rr
);
return
(
1
);
}
BN_CTX_start
(
ctx
);
d
=
BN_CTX_get
(
ctx
);
r
=
BN_CTX_get
(
ctx
);
t
=
BN_CTX_get
(
ctx
);
if
(
d
==
NULL
||
r
==
NULL
||
t
==
NULL
)
goto
err
;
#ifdef ATALLA
if
(
!
tried_atalla
)
{
BN_set_word
(
t
,
a
);
if
(
BN_mod_exp_word_atalla
(
rr
,
t
,
p
,
m
))
return
1
;
}
/* If it fails, try the other methods */
#endif
if
(
in_mont
!=
NULL
)
mont
=
in_mont
;
else
{
if
((
mont
=
BN_MONT_CTX_new
())
==
NULL
)
goto
err
;
if
(
!
BN_MONT_CTX_set
(
mont
,
m
,
ctx
))
goto
err
;
}
if
(
!
BN_to_montgomery
(
r
,
BN_value_one
(),
mont
,
ctx
))
goto
err
;
for
(
b
=
bits
-
1
;
b
>=
0
;
b
--
)
{
if
(
BN_is_bit_set
(
p
,
b
))
{
if
(
!
BN_mul_word
(
r
,
a
))
goto
err
;
if
(
BN_ucmp
(
r
,
m
)
>=
0
)
{
if
(
!
BN_mod
(
t
,
r
,
m
,
ctx
))
goto
err
;
{
BIGNUM
*
swap_tmp
=
r
;
r
=
t
;
t
=
swap_tmp
;
}
}
}
if
(
b
>
0
)
{
if
(
!
BN_mod_mul_montgomery
(
r
,
r
,
r
,
mont
,
ctx
))
goto
err
;
}
}
BN_from_montgomery
(
rr
,
r
,
mont
,
ctx
);
ret
=
1
;
err:
if
((
in_mont
==
NULL
)
&&
(
mont
!=
NULL
))
BN_MONT_CTX_free
(
mont
);
BN_CTX_end
(
ctx
);
return
(
ret
);
}
/* The old fallback, simple version :-) */
int
BN_mod_exp_simple
(
BIGNUM
*
r
,
BIGNUM
*
a
,
BIGNUM
*
p
,
BIGNUM
*
m
,
...
...
crypto/dh/dh_key.c
浏览文件 @
6dad7bd6
...
...
@@ -193,19 +193,26 @@ err:
static
int
dh_bn_mod_exp
(
DH
*
dh
,
BIGNUM
*
r
,
BIGNUM
*
a
,
const
BIGNUM
*
p
,
const
BIGNUM
*
m
,
BN_CTX
*
ctx
,
BN_MONT_CTX
*
m_ctx
)
{
return
BN_mod_exp_mont
(
r
,
a
,
p
,
m
,
ctx
,
m_ctx
);
}
{
if
(
a
->
top
==
1
)
{
BN_ULONG
A
=
a
->
d
[
0
];
return
BN_mod_exp_mont_word
(
r
,
A
,
p
,
m
,
ctx
,
m_ctx
);
}
else
return
BN_mod_exp_mont
(
r
,
a
,
p
,
m
,
ctx
,
m_ctx
);
}
static
int
dh_init
(
DH
*
dh
)
{
{
dh
->
flags
|=
DH_FLAG_CACHE_MONT_P
;
return
(
1
);
}
}
static
int
dh_finish
(
DH
*
dh
)
{
{
if
(
dh
->
method_mont_p
)
BN_MONT_CTX_free
((
BN_MONT_CTX
*
)
dh
->
method_mont_p
);
return
(
1
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录