Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
fcb41c0e
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
fcb41c0e
编写于
5月 03, 2005
作者:
N
Nils Larsch
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rewrite of bn_nist.c, disable support for some curves on 64 bit platforms
for now (it was broken anyway)
上级
9b623183
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
232 addition
and
322 deletion
+232
-322
crypto/bn/bn_nist.c
crypto/bn/bn_nist.c
+231
-321
crypto/ec/ecp_nist.c
crypto/ec/ecp_nist.c
+1
-1
未找到文件。
crypto/bn/bn_nist.c
浏览文件 @
fcb41c0e
/* crypto/bn/bn_nist.c */
/* crypto/bn/bn_nist.c */
/*
* Written by Nils Larsch for the OpenSSL project
*/
/* ====================================================================
/* ====================================================================
* Copyright (c) 1998-200
2
The OpenSSL Project. All rights reserved.
* Copyright (c) 1998-200
5
The OpenSSL Project. All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* modification, are permitted provided that the following conditions
...
@@ -63,69 +66,69 @@
...
@@ -63,69 +66,69 @@
#define BN_NIST_521_TOP (521+BN_BITS2-1)/BN_BITS2
#define BN_NIST_521_TOP (521+BN_BITS2-1)/BN_BITS2
#if BN_BITS2 == 64
#if BN_BITS2 == 64
const
static
BN_ULONG
_nist_p_192
[]
=
static
const
BN_ULONG
_nist_p_192
[]
=
{
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFEULL
,
{
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFEULL
,
0xFFFFFFFFFFFFFFFFULL
};
0xFFFFFFFFFFFFFFFFULL
};
const
static
BN_ULONG
_nist_p_224
[]
=
static
const
BN_ULONG
_nist_p_224
[]
=
{
0x0000000000000001ULL
,
0xFFFFFFFF00000000ULL
,
{
0x0000000000000001ULL
,
0xFFFFFFFF00000000ULL
,
0xFFFFFFFFFFFFFFFFULL
,
0x00000000FFFFFFFFULL
};
0xFFFFFFFFFFFFFFFFULL
,
0x00000000FFFFFFFFULL
};
const
static
BN_ULONG
_nist_p_256
[]
=
static
const
BN_ULONG
_nist_p_256
[]
=
{
0xFFFFFFFFFFFFFFFFULL
,
0x00000000FFFFFFFFULL
,
{
0xFFFFFFFFFFFFFFFFULL
,
0x00000000FFFFFFFFULL
,
0x0000000000000000ULL
,
0xFFFFFFFF00000001ULL
};
0x0000000000000000ULL
,
0xFFFFFFFF00000001ULL
};
const
static
BN_ULONG
_nist_p_384
[]
=
static
const
BN_ULONG
_nist_p_384
[]
=
{
0x00000000FFFFFFFFULL
,
0xFFFFFFFF00000000ULL
,
{
0x00000000FFFFFFFFULL
,
0xFFFFFFFF00000000ULL
,
0xFFFFFFFFFFFFFFFEULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFEULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
};
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
};
const
static
BN_ULONG
_nist_p_521
[]
=
static
const
BN_ULONG
_nist_p_521
[]
=
{
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
{
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0xFFFFFFFFFFFFFFFFULL
,
0x00000000000001FFULL
};
0x00000000000001FFULL
};
#elif BN_BITS2 == 32
#elif BN_BITS2 == 32
const
static
BN_ULONG
_nist_p_192
[]
=
{
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFE
,
static
const
BN_ULONG
_nist_p_192
[]
=
{
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFE
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
};
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
};
const
static
BN_ULONG
_nist_p_224
[]
=
{
0x00000001
,
0x00000000
,
0x00000000
,
static
const
BN_ULONG
_nist_p_224
[]
=
{
0x00000001
,
0x00000000
,
0x00000000
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
};
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
};
const
static
BN_ULONG
_nist_p_256
[]
=
{
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
static
const
BN_ULONG
_nist_p_256
[]
=
{
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000001
,
0xFFFFFFFF
};
0x00000000
,
0x00000000
,
0x00000000
,
0x00000001
,
0xFFFFFFFF
};
const
static
BN_ULONG
_nist_p_384
[]
=
{
0xFFFFFFFF
,
0x00000000
,
0x00000000
,
static
const
BN_ULONG
_nist_p_384
[]
=
{
0xFFFFFFFF
,
0x00000000
,
0x00000000
,
0xFFFFFFFF
,
0xFFFFFFFE
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFE
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
};
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
};
const
static
BN_ULONG
_nist_p_521
[]
=
{
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
static
const
BN_ULONG
_nist_p_521
[]
=
{
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0xFFFFFFFF
,
0x000001FF
};
0xFFFFFFFF
,
0x000001FF
};
#elif BN_BITS2 == 16
#elif BN_BITS2 == 16
const
static
BN_ULONG
_nist_p_192
[]
=
{
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFE
,
static
const
BN_ULONG
_nist_p_192
[]
=
{
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFE
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
};
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
};
const
static
BN_ULONG
_nist_p_224
[]
=
{
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
static
const
BN_ULONG
_nist_p_224
[]
=
{
0x0001
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
};
0x0000
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
};
const
static
BN_ULONG
_nist_p_256
[]
=
{
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
static
const
BN_ULONG
_nist_p_256
[]
=
{
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0xFFFF
,
0xFFFF
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0x0001
,
0x0000
,
0xFFFF
,
0xFFFF
};
0xFFFF
};
const
static
BN_ULONG
_nist_p_384
[]
=
{
0xFFFF
,
0xFFFF
,
0x0000
,
0x0000
,
0x0000
,
static
const
BN_ULONG
_nist_p_384
[]
=
{
0xFFFF
,
0xFFFF
,
0x0000
,
0x0000
,
0x0000
,
0x0000
,
0xFFFF
,
0xFFFF
,
0xFFFE
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0x0000
,
0xFFFF
,
0xFFFF
,
0xFFFE
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
};
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
};
const
static
BN_ULONG
_nist_p_521
[]
=
{
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
static
const
BN_ULONG
_nist_p_521
[]
=
{
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0x01FF
};
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0xFFFF
,
0x01FF
};
#elif BN_BITS2 == 8
#elif BN_BITS2 == 8
const
static
BN_ULONG
_nist_p_192
[]
=
{
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
static
const
BN_ULONG
_nist_p_192
[]
=
{
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFE
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFE
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
};
0xFF
,
0xFF
};
const
static
BN_ULONG
_nist_p_224
[]
=
{
0x01
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
static
const
BN_ULONG
_nist_p_224
[]
=
{
0x01
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0x00
,
0x00
,
0x00
,
0x00
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
};
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
};
const
static
BN_ULONG
_nist_p_256
[]
=
{
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
static
const
BN_ULONG
_nist_p_256
[]
=
{
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x01
,
0x00
,
0x00
,
0x00
,
0xFF
,
0xFF
,
0xFF
,
0xFF
};
0x00
,
0x00
,
0x01
,
0x00
,
0x00
,
0x00
,
0xFF
,
0xFF
,
0xFF
,
0xFF
};
const
static
BN_ULONG
_nist_p_384
[]
=
{
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0x00
,
0x00
,
0x00
,
0x00
,
static
const
BN_ULONG
_nist_p_384
[]
=
{
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFE
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0x00
,
0x00
,
0x00
,
0x00
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFE
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
};
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
};
const
static
BN_ULONG
_nist_p_521
[]
=
{
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
static
const
BN_ULONG
_nist_p_521
[]
=
{
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
0xFF
,
...
@@ -178,181 +181,116 @@ static int _is_set_384_data = 0;
...
@@ -178,181 +181,116 @@ static int _is_set_384_data = 0;
static
void
_init_384_data
(
void
);
static
void
_init_384_data
(
void
);
#define BN_NIST_ADD_ONE(a) while (!(++(*(a)))) ++(a);
#define BN_NIST_ADD_ONE(a) while (!(++(*(a)))) ++(a);
#define __buf_0 (BN_ULONG)0
#define __buf_0_1 (BN_ULONG)0
static
void
nist_cp_bn_0
(
BN_ULONG
*
buf
,
BN_ULONG
*
a
,
int
top
,
int
max
)
#define __buf_0_2 (BN_ULONG)0
{
int
i
;
BN_ULONG
*
_tmp1
=
(
buf
),
*
_tmp2
=
(
a
);
for
(
i
=
(
top
);
i
!=
0
;
i
--
)
*
_tmp1
++
=
*
_tmp2
++
;
for
(
i
=
(
max
)
-
(
top
);
i
!=
0
;
i
--
)
*
_tmp1
++
=
(
BN_ULONG
)
0
;
}
static
void
nist_cp_bn
(
BN_ULONG
*
buf
,
BN_ULONG
*
a
,
int
top
)
{
int
i
;
BN_ULONG
*
_tmp1
=
(
buf
),
*
_tmp2
=
(
a
);
for
(
i
=
(
top
);
i
!=
0
;
i
--
)
*
_tmp1
++
=
*
_tmp2
++
;
}
#if BN_BITS2 == 64
#if BN_BITS2 == 64
#define BN_64_BIT_BUF(n) BN_ULONG __buf_##n = (BN_ULONG)0;
#define bn_cp_64(to, n, from, m) (to)[n] = (from)[m];
#define BN_CP_64_TO_BUF(n) __buf_##n = (a)[(n)];
#define bn_64_set_0(to, n) (to)[n] = (BN_ULONG)0;
#define BN_CP_64_FROM_BUF(a,n) *(a)++ = __buf_##n;
/* TBD */
#define BN_CASE_64_BIT(n,a) case (n): __buf_##n = (a)[(n)];
#define bn_cp_32(to, n, from, m) (to)[n] = (from)[m];
#if UINT_MAX == 4294967295UL
#define bn_32_set_0(to, n) (to)[n] = (BN_ULONG)0;
#define nist32 unsigned int
#define BN_32_BIT_BUF(n) nist32 __buf_##n = (nist32)0;
#define BN_CP_32_TO_BUF(n) __buf_##n = ((nist32 *)(a))[(n)];
#define BN_CP_32_FROM_BUF(a,n) *((nist32)(a))++ = __buf_##n;
#define BN_CASE_32_BIT(n,a) case (n): __buf_##n = ((nist32)(a))[(n)];
#elif ULONG_MAX == 4294967295UL
#define nist32 unsigned long
#define BN_32_BIT_BUF(n) nist32 __buf_##n = (nist32)0;
#define BN_CP_32_TO_BUF(n) __buf_##n = ((nist32 *)(a))[(n)];
#define BN_CP_32_FROM_BUF(a,n) *((nist32)(a))++ = __buf_##n;
#define BN_CASE_32_BIT(n,a) case (n): __buf_##n = ((nist32)(a))[(n)];
#else
#else
#define NO_32_BIT_TYPE
#define bn_cp_64(to, n, from, m) \
#endif
{ \
#elif BN_BITS2 == 32
bn_cp_32(to, (n)*2, from, (m)*2); \
#define BN_64_BIT_BUF(n) BN_ULONG __buf_##n##_1 = (BN_ULONG)0;\
bn_cp_32(to, (n)*2+1, from, (m)*2+1); \
BN_ULONG __buf_##n##_2 = (BN_ULONG)0;
}
#define BN_CP_64_TO_BUF(n) __buf_##n##_2 = (a)[2*(n)+1];\
#define bn_64_set_0(to, n) \
__buf_##n##_1 = (a)[2*(n)];
{ \
#define BN_CP_64_FROM_BUF(a,n) *(a)++ = __buf_##n##_1;\
bn_32_set_0(to, (n)*2); \
*(a)++ = __buf_##n##_2;
bn_32_set_0(to, (n)*2+1); \
#define BN_CASE_64_BIT(n,a) case 2*(n)+1: __buf_##n##_2 = (a)[2*(n)+1];\
}
case 2*(n): __buf_##n##_1 = (a)[2*(n)];
#if BN_BITS2 == 32
#define bn_cp_32(to, n, from, m) (to)[n] = (from)[m];
#define BN_32_BIT_BUF(n) BN_ULONG __buf_##n = (BN_ULONG)0;
#define bn_32_set_0(to, n) (to)[n] = (BN_ULONG)0;
#define BN_CP_32_TO_BUF(n) __buf_##n = (a)[(n)];
#define BN_CP_32_FROM_BUF(a,n) *(a)++ = __buf_##n;
#define BN_CASE_32_BIT(n,a) case (n): __buf_##n = (a)[(n)];
#elif BN_BITS2 == 16
#elif BN_BITS2 == 16
#define __buf_0_3 (BN_ULONG)0
#define bn_cp_32(to, n, from, m) \
#define __buf_0_4 (BN_ULONG)0
{ \
#define BN_64_BIT_BUF(n) BN_ULONG __buf_##n##_1 = (BN_ULONG)0;\
(to)[(n)*2] = (from)[(m)*2]; \
BN_ULONG __buf_##n##_2 = (BN_ULONG)0;\
(to)[(n)*2+1] = (from)[(m)*2+1];\
BN_ULONG __buf_##n##_3 = (BN_ULONG)0;\
}
BN_ULONG __buf_##n##_4 = (BN_ULONG)0;
#define bn_32_set_0(to, n) { (to)[(n)*2] = 0; (to)[(n)*2+1] = 0; }
#define BN_CP_64_TO_BUF(n) __buf_##n##_4 = (a)[4*(n)+3];\
__buf_##n##_3 = (a)[4*(n)+2];\
__buf_##n##_2 = (a)[4*(n)+1];\
__buf_##n##_1 = (a)[4*(n)];
#define BN_CP_64_FROM_BUF(a,n) *(a)++ = __buf_##n##_1;\
*(a)++ = __buf_##n##_2;\
*(a)++ = __buf_##n##_3;\
*(a)++ = __buf_##n##_4;
#define BN_CASE_64_BIT(n,a) case 4*(n)+3: __buf_##n##_4 = (a)[4*(n)+3];\
case 4*(n)+2: __buf_##n##_3 = (a)[4*(n)+2];\
case 4*(n)+1: __buf_##n##_2 = (a)[4*(n)+1];\
case 4*(n): __buf_##n##_1 = (a)[4*(n)];
#define BN_32_BIT_BUF(n) BN_ULONG __buf_##n##_1 = (BN_ULONG)0;\
BN_ULONG __buf_##n##_2 = (BN_ULONG)0;
#define BN_CP_32_TO_BUF(n) __buf_##n##_1 = (a)[2*(n)];\
__buf_##n##_2 = (a)[2*(n)+1];
#define BN_CP_32_FROM_BUF(a,n) *(a)++ = __buf_##n##_1;\
*(a)++ = __buf_##n##_2;
#define BN_CASE_32_BIT(n,a) case 2*(n)+1: __buf_##n##_2 = (a)[2*(n)+1];\
case 2*(n): __buf_##n##_1 = (a)[2*(n)];
#elif BN_BITS2 == 8
#elif BN_BITS2 == 8
#define __buf_0_3 (BN_ULONG)0
#define bn_cp_32(to, n, from, m) \
#define __buf_0_4 (BN_ULONG)0
{ \
#define __buf_0_5 (BN_ULONG)0
(to)[(n)*4] = (from)[(m)*4]; \
#define __buf_0_6 (BN_ULONG)0
(to)[(n)*4+1] = (from)[(m)*4+1];\
#define __buf_0_7 (BN_ULONG)0
(to)[(n)*4+2] = (from)[(m)*4+2];\
#define __buf_0_8 (BN_ULONG)0
(to)[(n)*4+3] = (from)[(m)*4+3];\
#define BN_64_BIT_BUF(n) BN_ULONG __buf_##n##_1 = (BN_ULONG)0;\
}
BN_ULONG __buf_##n##_2 = (BN_ULONG)0;\
#define bn_32_set_0(to, n) \
BN_ULONG __buf_##n##_3 = (BN_ULONG)0;\
{ (to)[(n)*4] = (BN_ULONG)0; (to)[(n)*4+1] = (BN_ULONG)0; \
BN_ULONG __buf_##n##_4 = (BN_ULONG)0;\
(to)[(n)*4+2] = (BN_ULONG)0; (to)[(n)*4+3] = (BN_ULONG)0; }
BN_ULONG __buf_##n##_5 = (BN_ULONG)0;\
BN_ULONG __buf_##n##_6 = (BN_ULONG)0;\
BN_ULONG __buf_##n##_7 = (BN_ULONG)0;\
BN_ULONG __buf_##n##_8 = (BN_ULONG)0;
#define BN_CP_64_TO_BUF(n) __buf_##n##_8 = (a)[8*(n)+7];\
__buf_##n##_7 = (a)[8*(n)+6];\
__buf_##n##_6 = (a)[8*(n)+5];\
__buf_##n##_5 = (a)[8*(n)+4];\
__buf_##n##_4 = (a)[8*(n)+3];\
__buf_##n##_3 = (a)[8*(n)+2];\
__buf_##n##_2 = (a)[8*(n)+1];\
__buf_##n##_1 = (a)[8*(n)];
#define BN_CP_64_FROM_BUF(a,n) *(a)++ = __buf_##n##_1;\
*(a)++ = __buf_##n##_2;\
*(a)++ = __buf_##n##_3;\
*(a)++ = __buf_##n##_4;\
*(a)++ = __buf_##n##_5;\
*(a)++ = __buf_##n##_6;\
*(a)++ = __buf_##n##_7;\
*(a)++ = __buf_##n##_8;
#define BN_CASE_64_BIT(n,a) case 8*(n)+7: __buf_##n##_8 = (a)[8*(n)+7];\
case 8*(n)+6: __buf_##n##_7 = (a)[8*(n)+6];\
case 8*(n)+5: __buf_##n##_6 = (a)[8*(n)+5];\
case 8*(n)+4: __buf_##n##_5 = (a)[8*(n)+4];\
case 8*(n)+3: __buf_##n##_4 = (a)[8*(n)+3];\
case 8*(n)+2: __buf_##n##_3 = (a)[8*(n)+2];\
case 8*(n)+1: __buf_##n##_2 = (a)[8*(n)+1];\
case 8*(n): __buf_##n##_1 = (a)[8*(n)];
#define BN_32_BIT_BUF(n) BN_ULONG __buf_##n##_1 = (BN_ULONG)0;\
BN_ULONG __buf_##n##_2 = (BN_ULONG)0;\
BN_ULONG __buf_##n##_3 = (BN_ULONG)0;\
BN_ULONG __buf_##n##_4 = (BN_ULONG)0;
#define BN_CP_32_TO_BUF(n) __buf_##n##_1 = (a)[4*(n)];\
__buf_##n##_2 = (a)[4*(n)+1];\
__buf_##n##_3 = (a)[4*(n)+2];\
__buf_##n##_4 = (a)[4*(n)+3];
#define BN_CP_32_FROM_BUF(a,n) *(a)++ = __buf_##n##_1;\
*(a)++ = __buf_##n##_2;\
*(a)++ = __buf_##n##_3;\
*(a)++ = __buf_##n##_4;
#define BN_CASE_32_BIT(n,a) case 4*(n)+3: __buf_##n##_4 = (a)[4*(n)+3];\
case 4*(n)+2: __buf_##n##_3 = (a)[4*(n)+2];\
case 4*(n)+1: __buf_##n##_2 = (a)[4*(n)+1];\
case 4*(n): __buf_##n##_1 = (a)[4*(n)];
#endif
#endif
#endif
/* BN_BITS2 != 64 */
#define
BN_192_SET(d,a1,a2,
a3) \
#define
nist_set_192(to, from, a1, a2,
a3) \
{\
{
\
register BN_ULONG *td = (d);
\
if (a3 != 0) bn_cp_64(to, 0, from, (a3) - 3) else bn_64_set_0(to, 0)
\
BN_CP_64_FROM_BUF(td,a3); BN_CP_64_FROM_BUF(td,a2);
\
bn_cp_64(to, 1, from, (a2) - 3)
\
BN_CP_64_FROM_BUF(td,a1);
\
if (a1 != 0) bn_cp_64(to, 2, from, (a1) - 3) else bn_64_set_0(to, 2)
\
}
}
int
BN_nist_mod_192
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
field
,
int
BN_nist_mod_192
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
field
,
BN_CTX
*
ctx
)
BN_CTX
*
ctx
)
{
{
int
top
;
int
top
=
a
->
top
,
i
;
BN_ULONG
carry
=
0
;
BN_ULONG
carry
=
0
;
register
BN_ULONG
*
r_d
,
*
a_d
;
register
BN_ULONG
*
r_d
,
*
a_d
=
a
->
d
;
BN_ULONG
t_d
[
BN_NIST_192_TOP
];
BN_ULONG
t_d
[
BN_NIST_192_TOP
],
BN_64_BIT_BUF
(
3
)
BN_64_BIT_BUF
(
4
)
buf
[
BN_NIST_192_TOP
];
BN_64_BIT_BUF
(
5
)
top
=
BN_ucmp
(
field
,
a
);
i
=
BN_ucmp
(
field
,
a
);
if
(
top
==
0
)
if
(
i
==
0
)
{
{
BN_zero
(
r
);
BN_zero
(
r
);
return
1
;
return
1
;
}
}
else
if
(
top
>
0
)
else
if
(
i
>
0
)
return
(
r
==
a
)
?
1
:
(
BN_copy
(
r
,
a
)
!=
NULL
);
return
(
r
==
a
)
?
1
:
(
BN_copy
(
r
,
a
)
!=
NULL
);
if
(
r
!=
a
)
if
(
top
==
BN_NIST_192_TOP
)
if
(
!
BN_ncopy
(
r
,
a
,
BN_NIST_192_TOP
))
return
BN_usub
(
r
,
a
,
field
);
return
0
;
r_d
=
r
->
d
;
if
(
r
!=
a
)
a_d
=
a
->
d
;
top
=
a
->
top
-
1
;
switch
(
top
)
{
{
BN_CASE_64_BIT
(
5
,
a_d
)
if
(
!
bn_wexpand
(
r
,
BN_NIST_192_TOP
))
BN_CASE_64_BIT
(
4
,
a_d
)
return
0
;
BN_CASE_64_BIT
(
3
,
a_d
)
r_d
=
r
->
d
;
break
;
nist_cp_bn
(
r_d
,
a_d
,
BN_NIST_192_TOP
);
default:
/* a->top == field->top */
return
BN_usub
(
r
,
a
,
field
);
}
}
else
r_d
=
a_d
;
BN_192_SET
(
t_d
,
0
,
3
,
3
)
nist_cp_bn_0
(
buf
,
a_d
+
BN_NIST_192_TOP
,
top
-
BN_NIST_192_TOP
,
BN_NIST_192_TOP
);
nist_set_192
(
t_d
,
buf
,
0
,
3
,
3
);
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_192_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_192_TOP
))
++
carry
;
++
carry
;
BN_192_SET
(
t_d
,
4
,
4
,
0
)
nist_set_192
(
t_d
,
buf
,
4
,
4
,
0
);
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_192_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_192_TOP
))
++
carry
;
++
carry
;
BN_192_SET
(
t_d
,
5
,
5
,
5
)
nist_set_192
(
t_d
,
buf
,
5
,
5
,
5
)
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_192_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_192_TOP
))
++
carry
;
++
carry
;
...
@@ -373,70 +311,61 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
...
@@ -373,70 +311,61 @@ int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
return
1
;
return
1
;
}
}
#define BN_224_SET(d,a1,a2,a3,a4,a5,a6,a7) \
#define nist_set_224(to, from, a1, a2, a3, a4, a5, a6, a7) \
{\
{ \
register BN_ULONG *td = (d);\
if (a7 != 0) bn_cp_32(to, 0, from, (a7) - 7) else bn_32_set_0(to, 0)\
BN_CP_32_FROM_BUF(td,a7); BN_CP_32_FROM_BUF(td,a6);\
if (a6 != 0) bn_cp_32(to, 1, from, (a6) - 7) else bn_32_set_0(to, 1)\
BN_CP_32_FROM_BUF(td,a5); BN_CP_32_FROM_BUF(td,a4);\
if (a5 != 0) bn_cp_32(to, 2, from, (a5) - 7) else bn_32_set_0(to, 2)\
BN_CP_32_FROM_BUF(td,a3); BN_CP_32_FROM_BUF(td,a2);\
if (a4 != 0) bn_cp_32(to, 3, from, (a4) - 7) else bn_32_set_0(to, 3)\
BN_CP_32_FROM_BUF(td,a1);\
if (a3 != 0) bn_cp_32(to, 4, from, (a3) - 7) else bn_32_set_0(to, 4)\
if (a2 != 0) bn_cp_32(to, 5, from, (a2) - 7) else bn_32_set_0(to, 5)\
if (a1 != 0) bn_cp_32(to, 6, from, (a1) - 7) else bn_32_set_0(to, 6)\
}
}
int
BN_nist_mod_224
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
field
,
int
BN_nist_mod_224
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
field
,
BN_CTX
*
ctx
)
BN_CTX
*
ctx
)
{
{
#if
ndef NO_32_BIT_TYPE
#if
BN_BITS2 != 64
int
t
mp_int
;
int
t
op
=
a
->
top
,
i
;
int
carry
=
0
;
int
carry
=
0
;
BN_ULONG
*
r_d
,
*
a_d
;
BN_ULONG
*
r_d
,
*
a_d
=
a
->
d
;
BN_ULONG
t_d
[
BN_NIST_224_TOP
];
BN_ULONG
t_d
[
BN_NIST_224_TOP
],
BN_32_BIT_BUF
(
7
)
BN_32_BIT_BUF
(
8
)
buf
[
BN_NIST_224_TOP
];
BN_32_BIT_BUF
(
9
)
BN_32_BIT_BUF
(
10
)
BN_32_BIT_BUF
(
11
)
BN_32_BIT_BUF
(
12
)
i
=
BN_ucmp
(
field
,
a
);
BN_32_BIT_BUF
(
13
)
if
(
i
==
0
)
tmp_int
=
BN_ucmp
(
field
,
a
);
if
(
tmp_int
==
0
)
{
{
BN_zero
(
r
);
BN_zero
(
r
);
return
1
;
return
1
;
}
}
else
if
(
tmp_int
>
0
)
else
if
(
i
>
0
)
return
(
r
==
a
)
?
1
:
(
BN_copy
(
r
,
a
)
!=
NULL
);
return
(
r
==
a
)
?
1
:
(
BN_copy
(
r
,
a
)
!=
NULL
);
if
(
r
!=
a
)
if
(
top
==
BN_NIST_224_TOP
)
if
(
!
BN_ncopy
(
r
,
a
,
BN_NIST_224_TOP
))
return
BN_usub
(
r
,
a
,
field
);
return
0
;
r_d
=
r
->
d
;
a_d
=
a
->
d
;
tmp_int
=
a
->
top
-
1
;
switch
(
tmp_int
)
if
(
r
!=
a
)
{
{
BN_CASE_32_BIT
(
13
,
a_d
)
if
(
!
bn_wexpand
(
r
,
BN_NIST_224_TOP
))
BN_CASE_32_BIT
(
12
,
a_d
)
return
0
;
BN_CASE_32_BIT
(
11
,
a_d
)
r_d
=
r
->
d
;
BN_CASE_32_BIT
(
10
,
a_d
)
nist_cp_bn
(
r_d
,
a_d
,
BN_NIST_224_TOP
);
BN_CASE_32_BIT
(
9
,
a_d
)
BN_CASE_32_BIT
(
8
,
a_d
)
BN_CASE_32_BIT
(
7
,
a_d
)
break
;
default:
/* a->top == field->top */
return
BN_usub
(
r
,
a
,
field
);
}
}
else
r_d
=
a_d
;
BN_224_SET
(
t_d
,
10
,
9
,
8
,
7
,
0
,
0
,
0
)
nist_cp_bn_0
(
buf
,
a_d
+
BN_NIST_224_TOP
,
top
-
BN_NIST_224_TOP
,
BN_NIST_224_TOP
);
nist_set_224
(
t_d
,
buf
,
10
,
9
,
8
,
7
,
0
,
0
,
0
);
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_224_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_224_TOP
))
++
carry
;
++
carry
;
BN_224_SET
(
t_d
,
0
,
13
,
12
,
11
,
0
,
0
,
0
)
nist_set_224
(
t_d
,
buf
,
0
,
13
,
12
,
11
,
0
,
0
,
0
);
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_224_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_224_TOP
))
++
carry
;
++
carry
;
BN_224_SET
(
t_d
,
13
,
12
,
11
,
10
,
9
,
8
,
7
)
nist_set_224
(
t_d
,
buf
,
13
,
12
,
11
,
10
,
9
,
8
,
7
);
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_224_TOP
))
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_224_TOP
))
--
carry
;
--
carry
;
BN_224_SET
(
t_d
,
0
,
0
,
0
,
0
,
13
,
12
,
11
)
nist_set_224
(
t_d
,
buf
,
0
,
0
,
0
,
0
,
13
,
12
,
11
);
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_224_TOP
))
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_224_TOP
))
--
carry
;
--
carry
;
...
@@ -485,28 +414,28 @@ static void _init_256_data(void)
...
@@ -485,28 +414,28 @@ static void _init_256_data(void)
_is_set_256_data
=
1
;
_is_set_256_data
=
1
;
}
}
#define BN_256_SET(d,a1,a2,a3,a4,a5,a6,a7,a8) \
#define nist_set_256(to, from, a1, a2, a3, a4, a5, a6, a7, a8) \
{\
{ \
register BN_ULONG *td = (d);\
if (a8 != 0) bn_cp_32(to, 0, from, (a8) - 8) else bn_32_set_0(to, 0)\
BN_CP_32_FROM_BUF(td,a8); BN_CP_32_FROM_BUF(td,a7);\
if (a7 != 0) bn_cp_32(to, 1, from, (a7) - 8) else bn_32_set_0(to, 1)\
BN_CP_32_FROM_BUF(td,a6); BN_CP_32_FROM_BUF(td,a5);\
if (a6 != 0) bn_cp_32(to, 2, from, (a6) - 8) else bn_32_set_0(to, 2)\
BN_CP_32_FROM_BUF(td,a4); BN_CP_32_FROM_BUF(td,a3);\
if (a5 != 0) bn_cp_32(to, 3, from, (a5) - 8) else bn_32_set_0(to, 3)\
BN_CP_32_FROM_BUF(td,a2); BN_CP_32_FROM_BUF(td,a1);\
if (a4 != 0) bn_cp_32(to, 4, from, (a4) - 8) else bn_32_set_0(to, 4)\
if (a3 != 0) bn_cp_32(to, 5, from, (a3) - 8) else bn_32_set_0(to, 5)\
if (a2 != 0) bn_cp_32(to, 6, from, (a2) - 8) else bn_32_set_0(to, 6)\
if (a1 != 0) bn_cp_32(to, 7, from, (a1) - 8) else bn_32_set_0(to, 7)\
}
}
int
BN_nist_mod_256
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
field
,
int
BN_nist_mod_256
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
field
,
BN_CTX
*
ctx
)
BN_CTX
*
ctx
)
{
{
#if
ndef NO_32_BIT_TYPE
#if
BN_BITS2 != 64
int
tmp_int
;
int
i
,
top
=
a
->
top
;
int
carry
=
0
;
int
carry
=
0
;
register
BN_ULONG
*
a_d
,
*
r_d
;
register
BN_ULONG
*
a_d
=
a
->
d
,
*
r_d
;
BN_ULONG
t_d
[
BN_NIST_256_TOP
];
BN_ULONG
t_d
[
BN_NIST_256_TOP
],
BN_ULONG
t_d2
[
BN_NIST_256_TOP
];
t_d2
[
BN_NIST_256_TOP
],
BN_32_BIT_BUF
(
8
)
BN_32_BIT_BUF
(
9
)
buf
[
BN_NIST_256_TOP
];
BN_32_BIT_BUF
(
10
)
BN_32_BIT_BUF
(
11
)
BN_32_BIT_BUF
(
12
)
BN_32_BIT_BUF
(
13
)
BN_32_BIT_BUF
(
14
)
BN_32_BIT_BUF
(
15
)
if
(
!
_is_set_256_data
)
if
(
!
_is_set_256_data
)
{
{
...
@@ -518,42 +447,34 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
...
@@ -518,42 +447,34 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
CRYPTO_w_unlock
(
CRYPTO_LOCK_BN
);
CRYPTO_w_unlock
(
CRYPTO_LOCK_BN
);
}
}
tmp_int
=
BN_ucmp
(
field
,
a
);
i
=
BN_ucmp
(
field
,
a
);
if
(
tmp_int
==
0
)
if
(
i
==
0
)
{
{
BN_zero
(
r
);
BN_zero
(
r
);
return
1
;
return
1
;
}
}
else
if
(
tmp_int
>
0
)
else
if
(
i
>
0
)
return
(
r
==
a
)
?
1
:
(
BN_copy
(
r
,
a
)
!=
NULL
);
return
(
r
==
a
)
?
1
:
(
BN_copy
(
r
,
a
)
!=
NULL
);
if
(
r
!=
a
)
if
(
top
==
BN_NIST_256_TOP
)
if
(
!
BN_ncopy
(
r
,
a
,
BN_NIST_256_TOP
))
return
BN_usub
(
r
,
a
,
field
);
return
0
;
tmp_int
=
a
->
top
-
1
;
a_d
=
a
->
d
;
if
(
r
!=
a
)
r_d
=
r
->
d
;
switch
(
tmp_int
)
{
{
BN_CASE_32_BIT
(
15
,
a_d
)
if
(
!
bn_wexpand
(
r
,
BN_NIST_256_TOP
))
BN_CASE_32_BIT
(
14
,
a_d
)
return
0
;
BN_CASE_32_BIT
(
13
,
a_d
)
r_d
=
r
->
d
;
BN_CASE_32_BIT
(
12
,
a_d
)
nist_cp_bn
(
r_d
,
a_d
,
BN_NIST_256_TOP
);
BN_CASE_32_BIT
(
11
,
a_d
)
BN_CASE_32_BIT
(
10
,
a_d
)
BN_CASE_32_BIT
(
9
,
a_d
)
BN_CASE_32_BIT
(
8
,
a_d
)
break
;
default:
/* a->top == field->top */
return
BN_usub
(
r
,
a
,
field
);
}
}
else
r_d
=
a_d
;
nist_cp_bn_0
(
buf
,
a_d
+
BN_NIST_256_TOP
,
top
-
BN_NIST_256_TOP
,
BN_NIST_256_TOP
);
/*S1*/
/*S1*/
BN_256_SET
(
t_d
,
15
,
14
,
13
,
12
,
11
,
0
,
0
,
0
)
nist_set_256
(
t_d
,
buf
,
15
,
14
,
13
,
12
,
11
,
0
,
0
,
0
);
/*S2*/
/*S2*/
BN_256_SET
(
t_d2
,
0
,
15
,
14
,
13
,
12
,
0
,
0
,
0
)
nist_set_256
(
t_d2
,
buf
,
0
,
15
,
14
,
13
,
12
,
0
,
0
,
0
);
if
(
bn_add_words
(
t_d
,
t_d
,
t_d2
,
BN_NIST_256_TOP
))
if
(
bn_add_words
(
t_d
,
t_d
,
t_d2
,
BN_NIST_256_TOP
))
carry
=
2
;
carry
=
2
;
/* left shift */
/* left shift */
...
@@ -561,7 +482,7 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
...
@@ -561,7 +482,7 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
register
BN_ULONG
*
ap
,
t
,
c
;
register
BN_ULONG
*
ap
,
t
,
c
;
ap
=
t_d
;
ap
=
t_d
;
c
=
0
;
c
=
0
;
for
(
tmp_int
=
BN_NIST_256_TOP
;
tmp_int
!=
0
;
--
tmp_int
)
for
(
i
=
BN_NIST_256_TOP
;
i
!=
0
;
--
i
)
{
{
t
=
*
ap
;
t
=
*
ap
;
*
(
ap
++
)
=
((
t
<<
1
)
|
c
)
&
BN_MASK2
;
*
(
ap
++
)
=
((
t
<<
1
)
|
c
)
&
BN_MASK2
;
...
@@ -574,27 +495,27 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
...
@@ -574,27 +495,27 @@ int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
++
carry
;
++
carry
;
/*S3*/
/*S3*/
BN_256_SET
(
t_d
,
15
,
14
,
0
,
0
,
0
,
10
,
9
,
8
)
nist_set_256
(
t_d
,
buf
,
15
,
14
,
0
,
0
,
0
,
10
,
9
,
8
);
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
++
carry
;
++
carry
;
/*S4*/
/*S4*/
BN_256_SET
(
t_d
,
8
,
13
,
15
,
14
,
13
,
11
,
10
,
9
)
nist_set_256
(
t_d
,
buf
,
8
,
13
,
15
,
14
,
13
,
11
,
10
,
9
);
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
++
carry
;
++
carry
;
/*D1*/
/*D1*/
BN_256_SET
(
t_d
,
10
,
8
,
0
,
0
,
0
,
13
,
12
,
11
)
nist_set_256
(
t_d
,
buf
,
10
,
8
,
0
,
0
,
0
,
13
,
12
,
11
);
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
--
carry
;
--
carry
;
/*D2*/
/*D2*/
BN_256_SET
(
t_d
,
11
,
9
,
0
,
0
,
15
,
14
,
13
,
12
)
nist_set_256
(
t_d
,
buf
,
11
,
9
,
0
,
0
,
15
,
14
,
13
,
12
);
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
--
carry
;
--
carry
;
/*D3*/
/*D3*/
BN_256_SET
(
t_d
,
12
,
0
,
10
,
9
,
8
,
15
,
14
,
13
)
nist_set_256
(
t_d
,
buf
,
12
,
0
,
10
,
9
,
8
,
15
,
14
,
13
);
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
--
carry
;
--
carry
;
/*D4*/
/*D4*/
BN_256_SET
(
t_d
,
13
,
0
,
11
,
10
,
9
,
0
,
15
,
14
)
nist_set_256
(
t_d
,
buf
,
13
,
0
,
11
,
10
,
9
,
0
,
15
,
14
);
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_256_TOP
))
--
carry
;
--
carry
;
...
@@ -643,31 +564,31 @@ static void _init_384_data(void)
...
@@ -643,31 +564,31 @@ static void _init_384_data(void)
_is_set_384_data
=
1
;
_is_set_384_data
=
1
;
}
}
#define BN_384_SET(d,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) \
#define nist_set_384(to,from,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) \
{\
{ \
register BN_ULONG *td = (d);\
if (a12 != 0) bn_cp_32(to, 0, from, (a12) - 12) else bn_32_set_0(to, 0)\
BN_CP_32_FROM_BUF(td,a12); BN_CP_32_FROM_BUF(td,a11);\
if (a11 != 0) bn_cp_32(to, 1, from, (a11) - 12) else bn_32_set_0(to, 1)\
BN_CP_32_FROM_BUF(td,a10); BN_CP_32_FROM_BUF(td,a9);\
if (a10 != 0) bn_cp_32(to, 2, from, (a10) - 12) else bn_32_set_0(to, 2)\
BN_CP_32_FROM_BUF(td,a8); BN_CP_32_FROM_BUF(td,a7);\
if (a9 != 0) bn_cp_32(to, 3, from, (a9) - 12) else bn_32_set_0(to, 3)\
BN_CP_32_FROM_BUF(td,a6); BN_CP_32_FROM_BUF(td,a5);\
if (a8 != 0) bn_cp_32(to, 4, from, (a8) - 12) else bn_32_set_0(to, 4)\
BN_CP_32_FROM_BUF(td,a4); BN_CP_32_FROM_BUF(td,a3);\
if (a7 != 0) bn_cp_32(to, 5, from, (a7) - 12) else bn_32_set_0(to, 5)\
BN_CP_32_FROM_BUF(td,a2); BN_CP_32_FROM_BUF(td,a1);\
if (a6 != 0) bn_cp_32(to, 6, from, (a6) - 12) else bn_32_set_0(to, 6)\
if (a5 != 0) bn_cp_32(to, 7, from, (a5) - 12) else bn_32_set_0(to, 7)\
if (a4 != 0) bn_cp_32(to, 8, from, (a4) - 12) else bn_32_set_0(to, 8)\
if (a3 != 0) bn_cp_32(to, 9, from, (a3) - 12) else bn_32_set_0(to, 9)\
if (a2 != 0) bn_cp_32(to, 10, from, (a2) - 12) else bn_32_set_0(to, 10)\
if (a1 != 0) bn_cp_32(to, 11, from, (a1) - 12) else bn_32_set_0(to, 11)\
}
}
int
BN_nist_mod_384
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
field
,
int
BN_nist_mod_384
(
BIGNUM
*
r
,
const
BIGNUM
*
a
,
const
BIGNUM
*
field
,
BN_CTX
*
ctx
)
BN_CTX
*
ctx
)
{
{
#if
ndef NO_32_BIT_TYPE
#if
BN_BITS2 != 64
int
tmp_int
;
int
i
,
top
=
a
->
top
;
int
carry
=
0
;
int
carry
=
0
;
register
BN_ULONG
*
r_d
,
*
a_d
;
register
BN_ULONG
*
r_d
,
*
a_d
=
a
->
d
;
BN_ULONG
t_d
[
BN_NIST_384_TOP
];
BN_ULONG
t_d
[
BN_NIST_384_TOP
],
BN_32_BIT_BUF
(
12
)
BN_32_BIT_BUF
(
13
)
buf
[
BN_NIST_384_TOP
];
BN_32_BIT_BUF
(
14
)
BN_32_BIT_BUF
(
15
)
BN_32_BIT_BUF
(
16
)
BN_32_BIT_BUF
(
17
)
BN_32_BIT_BUF
(
18
)
BN_32_BIT_BUF
(
19
)
BN_32_BIT_BUF
(
20
)
BN_32_BIT_BUF
(
21
)
BN_32_BIT_BUF
(
22
)
BN_32_BIT_BUF
(
23
)
if
(
!
_is_set_384_data
)
if
(
!
_is_set_384_data
)
{
{
...
@@ -679,50 +600,38 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
...
@@ -679,50 +600,38 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
CRYPTO_w_unlock
(
CRYPTO_LOCK_BN
);
CRYPTO_w_unlock
(
CRYPTO_LOCK_BN
);
}
}
tmp_int
=
BN_ucmp
(
field
,
a
);
i
=
BN_ucmp
(
field
,
a
);
if
(
tmp_int
==
0
)
if
(
i
==
0
)
{
{
BN_zero
(
r
);
BN_zero
(
r
);
return
1
;
return
1
;
}
}
else
if
(
tmp_int
>
0
)
else
if
(
i
>
0
)
return
(
r
==
a
)
?
1
:
(
BN_copy
(
r
,
a
)
!=
NULL
);
return
(
r
==
a
)
?
1
:
(
BN_copy
(
r
,
a
)
!=
NULL
);
if
(
r
!=
a
)
if
(
top
==
BN_NIST_384_TOP
)
if
(
!
BN_ncopy
(
r
,
a
,
BN_NIST_384_TOP
))
return
BN_usub
(
r
,
a
,
field
);
return
0
;
r_d
=
r
->
d
;
a_d
=
a
->
d
;
tmp_int
=
a
->
top
-
1
;
switch
(
tmp_int
)
if
(
r
!=
a
)
{
{
BN_CASE_32_BIT
(
23
,
a_d
)
if
(
!
bn_wexpand
(
r
,
BN_NIST_384_TOP
))
BN_CASE_32_BIT
(
22
,
a_d
)
return
0
;
BN_CASE_32_BIT
(
21
,
a_d
)
r_d
=
r
->
d
;
BN_CASE_32_BIT
(
20
,
a_d
)
nist_cp_bn
(
r_d
,
a_d
,
BN_NIST_384_TOP
);
BN_CASE_32_BIT
(
19
,
a_d
)
BN_CASE_32_BIT
(
18
,
a_d
)
BN_CASE_32_BIT
(
17
,
a_d
)
BN_CASE_32_BIT
(
16
,
a_d
)
BN_CASE_32_BIT
(
15
,
a_d
)
BN_CASE_32_BIT
(
14
,
a_d
)
BN_CASE_32_BIT
(
13
,
a_d
)
BN_CASE_32_BIT
(
12
,
a_d
)
break
;
default:
/* a->top == field->top */
return
BN_usub
(
r
,
a
,
field
);
}
}
else
r_d
=
a_d
;
nist_cp_bn_0
(
buf
,
a_d
+
BN_NIST_384_TOP
,
top
-
BN_NIST_384_TOP
,
BN_NIST_384_TOP
);
/*S1*/
/*S1*/
BN_256_SET
(
t_d
,
0
,
0
,
0
,
0
,
0
,
23
,
22
,
21
)
nist_set_256
(
t_d
,
buf
,
0
,
0
,
0
,
0
,
0
,
23
-
4
,
22
-
4
,
21
-
4
);
/* left shift */
/* left shift */
{
{
register
BN_ULONG
*
ap
,
t
,
c
;
register
BN_ULONG
*
ap
,
t
,
c
;
ap
=
t_d
;
ap
=
t_d
;
c
=
0
;
c
=
0
;
for
(
tmp_int
=
BN_NIST_256_TOP
;
tmp_int
!=
0
;
--
tmp_int
)
for
(
i
=
BN_NIST_256_TOP
;
i
!=
0
;
--
i
)
{
{
t
=
*
ap
;
t
=
*
ap
;
*
(
ap
++
)
=
((
t
<<
1
)
|
c
)
&
BN_MASK2
;
*
(
ap
++
)
=
((
t
<<
1
)
|
c
)
&
BN_MASK2
;
...
@@ -732,37 +641,36 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
...
@@ -732,37 +641,36 @@ int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
if
(
bn_add_words
(
r_d
+
(
128
/
BN_BITS2
),
r_d
+
(
128
/
BN_BITS2
),
if
(
bn_add_words
(
r_d
+
(
128
/
BN_BITS2
),
r_d
+
(
128
/
BN_BITS2
),
t_d
,
BN_NIST_256_TOP
))
t_d
,
BN_NIST_256_TOP
))
++
carry
;
++
carry
;
/*S2*/
/*S2 */
BN_384_SET
(
t_d
,
23
,
22
,
21
,
20
,
19
,
18
,
17
,
16
,
15
,
14
,
13
,
12
)
if
(
bn_add_words
(
r_d
,
r_d
,
buf
,
BN_NIST_384_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
++
carry
;
++
carry
;
/*S3*/
/*S3*/
BN_384_SET
(
t_d
,
20
,
19
,
18
,
17
,
16
,
15
,
14
,
13
,
12
,
23
,
22
,
21
)
nist_set_384
(
t_d
,
buf
,
20
,
19
,
18
,
17
,
16
,
15
,
14
,
13
,
12
,
23
,
22
,
21
);
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
++
carry
;
++
carry
;
/*S4*/
/*S4*/
BN_384_SET
(
t_d
,
19
,
18
,
17
,
16
,
15
,
14
,
13
,
12
,
20
,
0
,
23
,
0
)
nist_set_384
(
t_d
,
buf
,
19
,
18
,
17
,
16
,
15
,
14
,
13
,
12
,
20
,
0
,
23
,
0
);
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
++
carry
;
++
carry
;
/*S5*/
/*S5*/
BN_256_SET
(
t_d
,
0
,
0
,
0
,
0
,
23
,
22
,
21
,
20
)
nist_set_256
(
t_d
,
buf
,
0
,
0
,
0
,
0
,
23
-
4
,
22
-
4
,
21
-
4
,
20
-
4
);
if
(
bn_add_words
(
r_d
+
(
128
/
BN_BITS2
),
r_d
+
(
128
/
BN_BITS2
),
if
(
bn_add_words
(
r_d
+
(
128
/
BN_BITS2
),
r_d
+
(
128
/
BN_BITS2
),
t_d
,
BN_NIST_256_TOP
))
t_d
,
BN_NIST_256_TOP
))
++
carry
;
++
carry
;
/*S6*/
/*S6*/
BN_384_SET
(
t_d
,
0
,
0
,
0
,
0
,
0
,
0
,
23
,
22
,
21
,
0
,
0
,
20
)
nist_set_384
(
t_d
,
buf
,
0
,
0
,
0
,
0
,
0
,
0
,
23
,
22
,
21
,
0
,
0
,
20
);
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
if
(
bn_add_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
++
carry
;
++
carry
;
/*D1*/
/*D1*/
BN_384_SET
(
t_d
,
22
,
21
,
20
,
19
,
18
,
17
,
16
,
15
,
14
,
13
,
12
,
23
)
nist_set_384
(
t_d
,
buf
,
22
,
21
,
20
,
19
,
18
,
17
,
16
,
15
,
14
,
13
,
12
,
23
);
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
--
carry
;
--
carry
;
/*D2*/
/*D2*/
BN_384_SET
(
t_d
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
23
,
22
,
21
,
20
,
0
)
nist_set_384
(
t_d
,
buf
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
23
,
22
,
21
,
20
,
0
);
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
--
carry
;
--
carry
;
/*D3*/
/*D3*/
BN_384_SET
(
t_d
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
23
,
23
,
0
,
0
,
0
)
nist_set_384
(
t_d
,
buf
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
23
,
23
,
0
,
0
,
0
);
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
if
(
bn_sub_words
(
r_d
,
r_d
,
t_d
,
BN_NIST_384_TOP
))
--
carry
;
--
carry
;
...
@@ -820,17 +728,19 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
...
@@ -820,17 +728,19 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
if
(
!
tmp
)
if
(
!
tmp
)
goto
err
;
goto
err
;
if
(
!
BN_ncopy
(
tmp
,
a
,
BN_NIST_521_TOP
))
if
(
!
bn_wexpand
(
tmp
,
BN_NIST_521_TOP
))
return
0
;
goto
err
;
if
(
!
BN_rshift
(
r
,
a
,
521
))
nist_cp_bn
(
tmp
->
d
,
a
->
d
,
BN_NIST_521_TOP
);
return
0
;
if
(
tmp
->
top
==
BN_NIST_521_TOP
)
tmp
->
d
[
BN_NIST_521_TOP
-
1
]
&=
BN_NIST_521_TOP_MASK
;
tmp
->
top
=
BN_NIST_521_TOP
;
tmp
->
d
[
BN_NIST_521_TOP
-
1
]
&=
BN_NIST_521_TOP_MASK
;
bn_correct_top
(
tmp
);
bn_correct_top
(
tmp
);
if
(
!
BN_rshift
(
r
,
a
,
521
))
goto
err
;
if
(
!
BN_uadd
(
r
,
tmp
,
r
))
if
(
!
BN_uadd
(
r
,
tmp
,
r
))
return
0
;
goto
err
;
top
=
r
->
top
;
top
=
r
->
top
;
r_d
=
r
->
d
;
r_d
=
r
->
d
;
if
(
top
==
BN_NIST_521_TOP
&&
if
(
top
==
BN_NIST_521_TOP
&&
...
...
crypto/ec/ecp_nist.c
浏览文件 @
fcb41c0e
...
@@ -112,7 +112,7 @@ const EC_METHOD *EC_GFp_nist_method(void)
...
@@ -112,7 +112,7 @@ const EC_METHOD *EC_GFp_nist_method(void)
return
&
ret
;
return
&
ret
;
}
}
#if BN_BITS2 == 64
&& UINT_MAX != 4294967295UL && ULONG_MAX != 4294967295UL
#if BN_BITS2 == 64
#define NO_32_BIT_TYPE
#define NO_32_BIT_TYPE
#endif
#endif
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录