Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
c4e7870a
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
9 个月 前同步成功
通知
8
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,体验更适合开发者的 AI 搜索 >>
提交
c4e7870a
编写于
6月 18, 2006
作者:
B
Bodo Möller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Change array representation of binary polynomials to make GF2m part of
the BN library more generally useful. Submitted by: Douglas Stebila
上级
4584ecce
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
84 addition
and
70 deletion
+84
-70
CHANGES
CHANGES
+8
-0
crypto/bn/bn.h
crypto/bn/bn.h
+10
-10
crypto/bn/bn_gf2m.c
crypto/bn/bn_gf2m.c
+39
-38
crypto/bn/bntest.c
crypto/bn/bntest.c
+16
-16
crypto/ec/ec2_smpl.c
crypto/ec/ec2_smpl.c
+3
-1
crypto/ec/ec_lcl.h
crypto/ec/ec_lcl.h
+8
-5
未找到文件。
CHANGES
浏览文件 @
c4e7870a
...
@@ -4,6 +4,14 @@
...
@@ -4,6 +4,14 @@
Changes between 0.9.8b and 0.9.9 [xx XXX xxxx]
Changes between 0.9.8b and 0.9.9 [xx XXX xxxx]
*) Change the array representation of binary polynomials: the list
of degrees of non-zero coefficients is now terminated with -1.
Previously it was terminated with 0, which was also part of the
value; thus, the array representation was not applicable to
polynomials where t^0 has coefficient zero. This change makes
the array representation useful in a more general context.
[Douglas Stebila]
*) Various modifications and fixes to SSL/TLS cipher string
*) Various modifications and fixes to SSL/TLS cipher string
handling. For ECC, the code now distinguishes between fixed ECDH
handling. For ECC, the code now distinguishes between fixed ECDH
with RSA certificates on the one hand and with ECDSA certificates
with RSA certificates on the one hand and with ECDSA certificates
...
...
crypto/bn/bn.h
浏览文件 @
c4e7870a
...
@@ -558,24 +558,24 @@ int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
...
@@ -558,24 +558,24 @@ int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
* t^p[0] + t^p[1] + ... + t^p[k]
* t^p[0] + t^p[1] + ... + t^p[k]
* where m = p[0] > p[1] > ... > p[k] = 0.
* where m = p[0] > p[1] > ... > p[k] = 0.
*/
*/
int
BN_GF2m_mod_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
unsigned
int
p
[]);
int
BN_GF2m_mod_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
int
p
[]);
/* r = a mod p */
/* r = a mod p */
int
BN_GF2m_mod_mul_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
int
BN_GF2m_mod_mul_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
);
/* r = (a * b) mod p */
const
int
p
[],
BN_CTX
*
ctx
);
/* r = (a * b) mod p */
int
BN_GF2m_mod_sqr_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
unsigned
int
p
[],
int
BN_GF2m_mod_sqr_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
int
p
[],
BN_CTX
*
ctx
);
/* r = (a * a) mod p */
BN_CTX
*
ctx
);
/* r = (a * a) mod p */
int
BN_GF2m_mod_inv_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
b
,
const
unsigned
int
p
[],
int
BN_GF2m_mod_inv_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
b
,
const
int
p
[],
BN_CTX
*
ctx
);
/* r = (1 / b) mod p */
BN_CTX
*
ctx
);
/* r = (1 / b) mod p */
int
BN_GF2m_mod_div_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
int
BN_GF2m_mod_div_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
);
/* r = (a / b) mod p */
const
int
p
[],
BN_CTX
*
ctx
);
/* r = (a / b) mod p */
int
BN_GF2m_mod_exp_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
int
BN_GF2m_mod_exp_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
);
/* r = (a ^ b) mod p */
const
int
p
[],
BN_CTX
*
ctx
);
/* r = (a ^ b) mod p */
int
BN_GF2m_mod_sqrt_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
int
BN_GF2m_mod_sqrt_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
);
/* r = sqrt(a) mod p */
const
int
p
[],
BN_CTX
*
ctx
);
/* r = sqrt(a) mod p */
int
BN_GF2m_mod_solve_quad_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
int
BN_GF2m_mod_solve_quad_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
);
/* r^2 + r = a mod p */
const
int
p
[],
BN_CTX
*
ctx
);
/* r^2 + r = a mod p */
int
BN_GF2m_poly2arr
(
const
BIGNUM
*
a
,
unsigned
int
p
[],
int
max
);
int
BN_GF2m_poly2arr
(
const
BIGNUM
*
a
,
int
p
[],
int
max
);
int
BN_GF2m_arr2poly
(
const
unsigned
int
p
[],
BIGNUM
*
a
);
int
BN_GF2m_arr2poly
(
const
int
p
[],
BIGNUM
*
a
);
/* faster mod functions for the 'NIST primes'
/* faster mod functions for the 'NIST primes'
* 0 <= a < p^2 */
* 0 <= a < p^2 */
...
...
crypto/bn/bn_gf2m.c
浏览文件 @
c4e7870a
...
@@ -258,7 +258,7 @@ int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
...
@@ -258,7 +258,7 @@ int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b)
/* Performs modular reduction of a and store result in r. r could be a. */
/* Performs modular reduction of a and store result in r. r could be a. */
int
BN_GF2m_mod_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
unsigned
int
p
[])
int
BN_GF2m_mod_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
int
p
[])
{
{
int
j
,
k
;
int
j
,
k
;
int
n
,
dN
,
d0
,
d1
;
int
n
,
dN
,
d0
,
d1
;
...
@@ -355,11 +355,11 @@ int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const unsigned int p[])
...
@@ -355,11 +355,11 @@ int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const unsigned int p[])
int
BN_GF2m_mod
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
p
)
int
BN_GF2m_mod
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
p
)
{
{
int
ret
=
0
;
int
ret
=
0
;
const
int
max
=
BN_num_bits
(
p
);
const
int
max
=
BN_num_bits
(
p
)
+
1
;
unsigned
int
*
arr
=
NULL
;
int
*
arr
=
NULL
;
bn_check_top
(
a
);
bn_check_top
(
a
);
bn_check_top
(
p
);
bn_check_top
(
p
);
if
((
arr
=
(
unsigned
int
*
)
OPENSSL_malloc
(
sizeof
(
unsigned
int
)
*
max
))
==
NULL
)
goto
err
;
if
((
arr
=
(
int
*
)
OPENSSL_malloc
(
sizeof
(
int
)
*
max
))
==
NULL
)
goto
err
;
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
if
(
!
ret
||
ret
>
max
)
if
(
!
ret
||
ret
>
max
)
{
{
...
@@ -377,7 +377,7 @@ err:
...
@@ -377,7 +377,7 @@ err:
/* Compute the product of two polynomials a and b, reduce modulo p, and store
/* Compute the product of two polynomials a and b, reduce modulo p, and store
* the result in r. r could be a or b; a could be b.
* the result in r. r could be a or b; a could be b.
*/
*/
int
BN_GF2m_mod_mul_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
)
int
BN_GF2m_mod_mul_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
const
int
p
[],
BN_CTX
*
ctx
)
{
{
int
zlen
,
i
,
j
,
k
,
ret
=
0
;
int
zlen
,
i
,
j
,
k
,
ret
=
0
;
BIGNUM
*
s
;
BIGNUM
*
s
;
...
@@ -433,12 +433,12 @@ err:
...
@@ -433,12 +433,12 @@ err:
int
BN_GF2m_mod_mul
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
const
BIGNUM
*
p
,
BN_CTX
*
ctx
)
int
BN_GF2m_mod_mul
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
const
BIGNUM
*
p
,
BN_CTX
*
ctx
)
{
{
int
ret
=
0
;
int
ret
=
0
;
const
int
max
=
BN_num_bits
(
p
);
const
int
max
=
BN_num_bits
(
p
)
+
1
;
unsigned
int
*
arr
=
NULL
;
int
*
arr
=
NULL
;
bn_check_top
(
a
);
bn_check_top
(
a
);
bn_check_top
(
b
);
bn_check_top
(
b
);
bn_check_top
(
p
);
bn_check_top
(
p
);
if
((
arr
=
(
unsigned
int
*
)
OPENSSL_malloc
(
sizeof
(
unsigned
int
)
*
max
))
==
NULL
)
goto
err
;
if
((
arr
=
(
int
*
)
OPENSSL_malloc
(
sizeof
(
int
)
*
max
))
==
NULL
)
goto
err
;
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
if
(
!
ret
||
ret
>
max
)
if
(
!
ret
||
ret
>
max
)
{
{
...
@@ -454,7 +454,7 @@ err:
...
@@ -454,7 +454,7 @@ err:
/* Square a, reduce the result mod p, and store it in a. r could be a. */
/* Square a, reduce the result mod p, and store it in a. r could be a. */
int
BN_GF2m_mod_sqr_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
)
int
BN_GF2m_mod_sqr_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
int
p
[],
BN_CTX
*
ctx
)
{
{
int
i
,
ret
=
0
;
int
i
,
ret
=
0
;
BIGNUM
*
s
;
BIGNUM
*
s
;
...
@@ -489,12 +489,12 @@ err:
...
@@ -489,12 +489,12 @@ err:
int
BN_GF2m_mod_sqr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
p
,
BN_CTX
*
ctx
)
int
BN_GF2m_mod_sqr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
p
,
BN_CTX
*
ctx
)
{
{
int
ret
=
0
;
int
ret
=
0
;
const
int
max
=
BN_num_bits
(
p
);
const
int
max
=
BN_num_bits
(
p
)
+
1
;
unsigned
int
*
arr
=
NULL
;
int
*
arr
=
NULL
;
bn_check_top
(
a
);
bn_check_top
(
a
);
bn_check_top
(
p
);
bn_check_top
(
p
);
if
((
arr
=
(
unsigned
int
*
)
OPENSSL_malloc
(
sizeof
(
unsigned
int
)
*
max
))
==
NULL
)
goto
err
;
if
((
arr
=
(
int
*
)
OPENSSL_malloc
(
sizeof
(
int
)
*
max
))
==
NULL
)
goto
err
;
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
if
(
!
ret
||
ret
>
max
)
if
(
!
ret
||
ret
>
max
)
{
{
...
@@ -576,7 +576,7 @@ err:
...
@@ -576,7 +576,7 @@ err:
* function is only provided for convenience; for best performance, use the
* function is only provided for convenience; for best performance, use the
* BN_GF2m_mod_inv function.
* BN_GF2m_mod_inv function.
*/
*/
int
BN_GF2m_mod_inv_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
xx
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
)
int
BN_GF2m_mod_inv_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
xx
,
const
int
p
[],
BN_CTX
*
ctx
)
{
{
BIGNUM
*
field
;
BIGNUM
*
field
;
int
ret
=
0
;
int
ret
=
0
;
...
@@ -702,7 +702,7 @@ err:
...
@@ -702,7 +702,7 @@ err:
* function is only provided for convenience; for best performance, use the
* function is only provided for convenience; for best performance, use the
* BN_GF2m_mod_div function.
* BN_GF2m_mod_div function.
*/
*/
int
BN_GF2m_mod_div_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
yy
,
const
BIGNUM
*
xx
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
)
int
BN_GF2m_mod_div_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
yy
,
const
BIGNUM
*
xx
,
const
int
p
[],
BN_CTX
*
ctx
)
{
{
BIGNUM
*
field
;
BIGNUM
*
field
;
int
ret
=
0
;
int
ret
=
0
;
...
@@ -727,7 +727,7 @@ err:
...
@@ -727,7 +727,7 @@ err:
* the result in r. r could be a.
* the result in r. r could be a.
* Uses simple square-and-multiply algorithm A.5.1 from IEEE P1363.
* Uses simple square-and-multiply algorithm A.5.1 from IEEE P1363.
*/
*/
int
BN_GF2m_mod_exp_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
)
int
BN_GF2m_mod_exp_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
const
int
p
[],
BN_CTX
*
ctx
)
{
{
int
ret
=
0
,
i
,
n
;
int
ret
=
0
,
i
,
n
;
BIGNUM
*
u
;
BIGNUM
*
u
;
...
@@ -773,12 +773,12 @@ err:
...
@@ -773,12 +773,12 @@ err:
int
BN_GF2m_mod_exp
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
const
BIGNUM
*
p
,
BN_CTX
*
ctx
)
int
BN_GF2m_mod_exp
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
b
,
const
BIGNUM
*
p
,
BN_CTX
*
ctx
)
{
{
int
ret
=
0
;
int
ret
=
0
;
const
int
max
=
BN_num_bits
(
p
);
const
int
max
=
BN_num_bits
(
p
)
+
1
;
unsigned
int
*
arr
=
NULL
;
int
*
arr
=
NULL
;
bn_check_top
(
a
);
bn_check_top
(
a
);
bn_check_top
(
b
);
bn_check_top
(
b
);
bn_check_top
(
p
);
bn_check_top
(
p
);
if
((
arr
=
(
unsigned
int
*
)
OPENSSL_malloc
(
sizeof
(
unsigned
int
)
*
max
))
==
NULL
)
goto
err
;
if
((
arr
=
(
int
*
)
OPENSSL_malloc
(
sizeof
(
int
)
*
max
))
==
NULL
)
goto
err
;
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
if
(
!
ret
||
ret
>
max
)
if
(
!
ret
||
ret
>
max
)
{
{
...
@@ -796,7 +796,7 @@ err:
...
@@ -796,7 +796,7 @@ err:
* the result in r. r could be a.
* the result in r. r could be a.
* Uses exponentiation as in algorithm A.4.1 from IEEE P1363.
* Uses exponentiation as in algorithm A.4.1 from IEEE P1363.
*/
*/
int
BN_GF2m_mod_sqrt_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
)
int
BN_GF2m_mod_sqrt_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
int
p
[],
BN_CTX
*
ctx
)
{
{
int
ret
=
0
;
int
ret
=
0
;
BIGNUM
*
u
;
BIGNUM
*
u
;
...
@@ -832,11 +832,11 @@ err:
...
@@ -832,11 +832,11 @@ err:
int
BN_GF2m_mod_sqrt
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
p
,
BN_CTX
*
ctx
)
int
BN_GF2m_mod_sqrt
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
p
,
BN_CTX
*
ctx
)
{
{
int
ret
=
0
;
int
ret
=
0
;
const
int
max
=
BN_num_bits
(
p
);
const
int
max
=
BN_num_bits
(
p
)
+
1
;
unsigned
int
*
arr
=
NULL
;
int
*
arr
=
NULL
;
bn_check_top
(
a
);
bn_check_top
(
a
);
bn_check_top
(
p
);
bn_check_top
(
p
);
if
((
arr
=
(
unsigned
int
*
)
OPENSSL_malloc
(
sizeof
(
unsigned
int
)
*
max
))
==
NULL
)
goto
err
;
if
((
arr
=
(
int
*
)
OPENSSL_malloc
(
sizeof
(
int
)
*
max
))
==
NULL
)
goto
err
;
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
if
(
!
ret
||
ret
>
max
)
if
(
!
ret
||
ret
>
max
)
{
{
...
@@ -853,7 +853,7 @@ err:
...
@@ -853,7 +853,7 @@ err:
/* Find r such that r^2 + r = a mod p. r could be a. If no r exists returns 0.
/* Find r such that r^2 + r = a mod p. r could be a. If no r exists returns 0.
* Uses algorithms A.4.7 and A.4.6 from IEEE P1363.
* Uses algorithms A.4.7 and A.4.6 from IEEE P1363.
*/
*/
int
BN_GF2m_mod_solve_quad_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a_
,
const
unsigned
int
p
[],
BN_CTX
*
ctx
)
int
BN_GF2m_mod_solve_quad_arr
(
BIGNUM
*
r
,
const
BIGNUM
*
a_
,
const
int
p
[],
BN_CTX
*
ctx
)
{
{
int
ret
=
0
,
count
=
0
;
int
ret
=
0
,
count
=
0
;
unsigned
int
j
;
unsigned
int
j
;
...
@@ -951,11 +951,11 @@ err:
...
@@ -951,11 +951,11 @@ err:
int
BN_GF2m_mod_solve_quad
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
p
,
BN_CTX
*
ctx
)
int
BN_GF2m_mod_solve_quad
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
p
,
BN_CTX
*
ctx
)
{
{
int
ret
=
0
;
int
ret
=
0
;
const
int
max
=
BN_num_bits
(
p
);
const
int
max
=
BN_num_bits
(
p
)
+
1
;
unsigned
int
*
arr
=
NULL
;
int
*
arr
=
NULL
;
bn_check_top
(
a
);
bn_check_top
(
a
);
bn_check_top
(
p
);
bn_check_top
(
p
);
if
((
arr
=
(
unsigned
int
*
)
OPENSSL_malloc
(
sizeof
(
unsigned
int
)
*
if
((
arr
=
(
int
*
)
OPENSSL_malloc
(
sizeof
(
int
)
*
max
))
==
NULL
)
goto
err
;
max
))
==
NULL
)
goto
err
;
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
ret
=
BN_GF2m_poly2arr
(
p
,
arr
,
max
);
if
(
!
ret
||
ret
>
max
)
if
(
!
ret
||
ret
>
max
)
...
@@ -971,20 +971,17 @@ err:
...
@@ -971,20 +971,17 @@ err:
}
}
/* Convert the bit-string representation of a polynomial
/* Convert the bit-string representation of a polynomial
* ( \sum_{i=0}^n a_i * x^i
, where a_0 is *not* zero) into an array
* ( \sum_{i=0}^n a_i * x^i
) into an array of integers corresponding
*
of integers corresponding to the bits with non-zero coefficient
.
*
to the bits with non-zero coefficient. Array is terminated with -1
.
* Up to max elements of the array will be filled. Return value is total
* Up to max elements of the array will be filled. Return value is total
* number of
coefficients that would be extract
ed if array was large enough.
* number of
array elements that would be fill
ed if array was large enough.
*/
*/
int
BN_GF2m_poly2arr
(
const
BIGNUM
*
a
,
unsigned
int
p
[],
int
max
)
int
BN_GF2m_poly2arr
(
const
BIGNUM
*
a
,
int
p
[],
int
max
)
{
{
int
i
,
j
,
k
=
0
;
int
i
,
j
,
k
=
0
;
BN_ULONG
mask
;
BN_ULONG
mask
;
if
(
BN_is_zero
(
a
)
||
!
BN_is_bit_set
(
a
,
0
))
if
(
BN_is_zero
(
a
))
/* a_0 == 0 => return error (the unsigned int array
* must be terminated by 0)
*/
return
0
;
return
0
;
for
(
i
=
a
->
top
-
1
;
i
>=
0
;
i
--
)
for
(
i
=
a
->
top
-
1
;
i
>=
0
;
i
--
)
...
@@ -1004,24 +1001,28 @@ int BN_GF2m_poly2arr(const BIGNUM *a, unsigned int p[], int max)
...
@@ -1004,24 +1001,28 @@ int BN_GF2m_poly2arr(const BIGNUM *a, unsigned int p[], int max)
}
}
}
}
if
(
k
<
max
)
{
p
[
k
]
=
-
1
;
k
++
;
}
return
k
;
return
k
;
}
}
/* Convert the coefficient array representation of a polynomial to a
/* Convert the coefficient array representation of a polynomial to a
* bit-string. The array must be terminated by
0
.
* bit-string. The array must be terminated by
-1
.
*/
*/
int
BN_GF2m_arr2poly
(
const
unsigned
int
p
[],
BIGNUM
*
a
)
int
BN_GF2m_arr2poly
(
const
int
p
[],
BIGNUM
*
a
)
{
{
int
i
;
int
i
;
bn_check_top
(
a
);
bn_check_top
(
a
);
BN_zero
(
a
);
BN_zero
(
a
);
for
(
i
=
0
;
p
[
i
]
!=
0
;
i
++
)
for
(
i
=
0
;
p
[
i
]
!=
-
1
;
i
++
)
{
{
if
(
BN_set_bit
(
a
,
p
[
i
])
==
0
)
if
(
BN_set_bit
(
a
,
p
[
i
])
==
0
)
return
0
;
return
0
;
}
}
BN_set_bit
(
a
,
0
);
bn_check_top
(
a
);
bn_check_top
(
a
);
return
1
;
return
1
;
...
...
crypto/bn/bntest.c
浏览文件 @
c4e7870a
...
@@ -1118,8 +1118,8 @@ int test_gf2m_mod(BIO *bp)
...
@@ -1118,8 +1118,8 @@ int test_gf2m_mod(BIO *bp)
{
{
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
;
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
;
int
i
,
j
,
ret
=
0
;
int
i
,
j
,
ret
=
0
;
unsigned
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
};
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
,
-
1
};
unsigned
int
p1
[]
=
{
193
,
15
,
0
};
int
p1
[]
=
{
193
,
15
,
0
,
-
1
};
a
=
BN_new
();
a
=
BN_new
();
b
[
0
]
=
BN_new
();
b
[
0
]
=
BN_new
();
...
@@ -1176,8 +1176,8 @@ int test_gf2m_mod_mul(BIO *bp,BN_CTX *ctx)
...
@@ -1176,8 +1176,8 @@ int test_gf2m_mod_mul(BIO *bp,BN_CTX *ctx)
{
{
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
,
*
f
,
*
g
,
*
h
;
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
,
*
f
,
*
g
,
*
h
;
int
i
,
j
,
ret
=
0
;
int
i
,
j
,
ret
=
0
;
unsigned
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
};
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
,
-
1
};
unsigned
int
p1
[]
=
{
193
,
15
,
0
};
int
p1
[]
=
{
193
,
15
,
0
,
-
1
};
a
=
BN_new
();
a
=
BN_new
();
b
[
0
]
=
BN_new
();
b
[
0
]
=
BN_new
();
...
@@ -1247,8 +1247,8 @@ int test_gf2m_mod_sqr(BIO *bp,BN_CTX *ctx)
...
@@ -1247,8 +1247,8 @@ int test_gf2m_mod_sqr(BIO *bp,BN_CTX *ctx)
{
{
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
;
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
;
int
i
,
j
,
ret
=
0
;
int
i
,
j
,
ret
=
0
;
unsigned
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
};
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
,
-
1
};
unsigned
int
p1
[]
=
{
193
,
15
,
0
};
int
p1
[]
=
{
193
,
15
,
0
,
-
1
};
a
=
BN_new
();
a
=
BN_new
();
b
[
0
]
=
BN_new
();
b
[
0
]
=
BN_new
();
...
@@ -1306,8 +1306,8 @@ int test_gf2m_mod_inv(BIO *bp,BN_CTX *ctx)
...
@@ -1306,8 +1306,8 @@ int test_gf2m_mod_inv(BIO *bp,BN_CTX *ctx)
{
{
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
;
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
;
int
i
,
j
,
ret
=
0
;
int
i
,
j
,
ret
=
0
;
unsigned
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
};
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
,
-
1
};
unsigned
int
p1
[]
=
{
193
,
15
,
0
};
int
p1
[]
=
{
193
,
15
,
0
,
-
1
};
a
=
BN_new
();
a
=
BN_new
();
b
[
0
]
=
BN_new
();
b
[
0
]
=
BN_new
();
...
@@ -1361,8 +1361,8 @@ int test_gf2m_mod_div(BIO *bp,BN_CTX *ctx)
...
@@ -1361,8 +1361,8 @@ int test_gf2m_mod_div(BIO *bp,BN_CTX *ctx)
{
{
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
,
*
f
;
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
,
*
f
;
int
i
,
j
,
ret
=
0
;
int
i
,
j
,
ret
=
0
;
unsigned
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
};
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
,
-
1
};
unsigned
int
p1
[]
=
{
193
,
15
,
0
};
int
p1
[]
=
{
193
,
15
,
0
,
-
1
};
a
=
BN_new
();
a
=
BN_new
();
b
[
0
]
=
BN_new
();
b
[
0
]
=
BN_new
();
...
@@ -1424,8 +1424,8 @@ int test_gf2m_mod_exp(BIO *bp,BN_CTX *ctx)
...
@@ -1424,8 +1424,8 @@ int test_gf2m_mod_exp(BIO *bp,BN_CTX *ctx)
{
{
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
,
*
f
;
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
,
*
f
;
int
i
,
j
,
ret
=
0
;
int
i
,
j
,
ret
=
0
;
unsigned
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
};
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
,
-
1
};
unsigned
int
p1
[]
=
{
193
,
15
,
0
};
int
p1
[]
=
{
193
,
15
,
0
,
-
1
};
a
=
BN_new
();
a
=
BN_new
();
b
[
0
]
=
BN_new
();
b
[
0
]
=
BN_new
();
...
@@ -1495,8 +1495,8 @@ int test_gf2m_mod_sqrt(BIO *bp,BN_CTX *ctx)
...
@@ -1495,8 +1495,8 @@ int test_gf2m_mod_sqrt(BIO *bp,BN_CTX *ctx)
{
{
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
,
*
f
;
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
,
*
f
;
int
i
,
j
,
ret
=
0
;
int
i
,
j
,
ret
=
0
;
unsigned
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
};
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
,
-
1
};
unsigned
int
p1
[]
=
{
193
,
15
,
0
};
int
p1
[]
=
{
193
,
15
,
0
,
-
1
};
a
=
BN_new
();
a
=
BN_new
();
b
[
0
]
=
BN_new
();
b
[
0
]
=
BN_new
();
...
@@ -1554,8 +1554,8 @@ int test_gf2m_mod_solve_quad(BIO *bp,BN_CTX *ctx)
...
@@ -1554,8 +1554,8 @@ int test_gf2m_mod_solve_quad(BIO *bp,BN_CTX *ctx)
{
{
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
;
BIGNUM
*
a
,
*
b
[
2
],
*
c
,
*
d
,
*
e
;
int
i
,
j
,
s
=
0
,
t
,
ret
=
0
;
int
i
,
j
,
s
=
0
,
t
,
ret
=
0
;
unsigned
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
};
int
p0
[]
=
{
163
,
7
,
6
,
3
,
0
,
-
1
};
unsigned
int
p1
[]
=
{
193
,
15
,
0
};
int
p1
[]
=
{
193
,
15
,
0
,
-
1
};
a
=
BN_new
();
a
=
BN_new
();
b
[
0
]
=
BN_new
();
b
[
0
]
=
BN_new
();
...
...
crypto/ec/ec2_smpl.c
浏览文件 @
c4e7870a
...
@@ -157,6 +157,7 @@ void ec_GF2m_simple_group_clear_finish(EC_GROUP *group)
...
@@ -157,6 +157,7 @@ void ec_GF2m_simple_group_clear_finish(EC_GROUP *group)
group
->
poly
[
2
]
=
0
;
group
->
poly
[
2
]
=
0
;
group
->
poly
[
3
]
=
0
;
group
->
poly
[
3
]
=
0
;
group
->
poly
[
4
]
=
0
;
group
->
poly
[
4
]
=
0
;
group
->
poly
[
5
]
=
-
1
;
}
}
...
@@ -174,6 +175,7 @@ int ec_GF2m_simple_group_copy(EC_GROUP *dest, const EC_GROUP *src)
...
@@ -174,6 +175,7 @@ int ec_GF2m_simple_group_copy(EC_GROUP *dest, const EC_GROUP *src)
dest
->
poly
[
2
]
=
src
->
poly
[
2
];
dest
->
poly
[
2
]
=
src
->
poly
[
2
];
dest
->
poly
[
3
]
=
src
->
poly
[
3
];
dest
->
poly
[
3
]
=
src
->
poly
[
3
];
dest
->
poly
[
4
]
=
src
->
poly
[
4
];
dest
->
poly
[
4
]
=
src
->
poly
[
4
];
dest
->
poly
[
5
]
=
src
->
poly
[
5
];
bn_wexpand
(
&
dest
->
a
,
(
int
)(
dest
->
poly
[
0
]
+
BN_BITS2
-
1
)
/
BN_BITS2
);
bn_wexpand
(
&
dest
->
a
,
(
int
)(
dest
->
poly
[
0
]
+
BN_BITS2
-
1
)
/
BN_BITS2
);
bn_wexpand
(
&
dest
->
b
,
(
int
)(
dest
->
poly
[
0
]
+
BN_BITS2
-
1
)
/
BN_BITS2
);
bn_wexpand
(
&
dest
->
b
,
(
int
)(
dest
->
poly
[
0
]
+
BN_BITS2
-
1
)
/
BN_BITS2
);
for
(
i
=
dest
->
a
.
top
;
i
<
dest
->
a
.
dmax
;
i
++
)
dest
->
a
.
d
[
i
]
=
0
;
for
(
i
=
dest
->
a
.
top
;
i
<
dest
->
a
.
dmax
;
i
++
)
dest
->
a
.
d
[
i
]
=
0
;
...
@@ -190,7 +192,7 @@ int ec_GF2m_simple_group_set_curve(EC_GROUP *group,
...
@@ -190,7 +192,7 @@ int ec_GF2m_simple_group_set_curve(EC_GROUP *group,
/* group->field */
/* group->field */
if
(
!
BN_copy
(
&
group
->
field
,
p
))
goto
err
;
if
(
!
BN_copy
(
&
group
->
field
,
p
))
goto
err
;
i
=
BN_GF2m_poly2arr
(
&
group
->
field
,
group
->
poly
,
5
)
;
i
=
BN_GF2m_poly2arr
(
&
group
->
field
,
group
->
poly
,
6
)
-
1
;
if
((
i
!=
5
)
&&
(
i
!=
3
))
if
((
i
!=
5
)
&&
(
i
!=
3
))
{
{
ECerr
(
EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE
,
EC_R_UNSUPPORTED_FIELD
);
ECerr
(
EC_F_EC_GF2M_SIMPLE_GROUP_SET_CURVE
,
EC_R_UNSUPPORTED_FIELD
);
...
...
crypto/ec/ec_lcl.h
浏览文件 @
c4e7870a
...
@@ -205,11 +205,14 @@ struct ec_group_st {
...
@@ -205,11 +205,14 @@ struct ec_group_st {
* irreducible polynomial defining the field.
* irreducible polynomial defining the field.
*/
*/
unsigned
int
poly
[
5
];
/* Field specification for curves over GF(2^m).
int
poly
[
6
];
/* Field specification for curves over GF(2^m).
* The irreducible f(t) is then of the form:
* The irreducible f(t) is then of the form:
* t^poly[0] + t^poly[1] + ... + t^poly[k]
* t^poly[0] + t^poly[1] + ... + t^poly[k]
* where m = poly[0] > poly[1] > ... > poly[k] = 0.
* where m = poly[0] > poly[1] > ... > poly[k] = 0.
*/
* The array is terminated with poly[k+1]=-1.
* All elliptic curve irreducibles have at most 5
* non-zero terms.
*/
BIGNUM
a
,
b
;
/* Curve coefficients.
BIGNUM
a
,
b
;
/* Curve coefficients.
* (Here the assumption is that BIGNUMs can be used
* (Here the assumption is that BIGNUMs can be used
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录