OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
BigNumLib.h
Go to the documentation of this file.
1
17#ifndef BIG_NUM_LIB_H
18#define BIG_NUM_LIB_H
19
20#include "CryptoInternal.h"
21
26typedef UINTN OC_BN_WORD;
27//
28// Declarations regarding the Word size.
29//
30#define OC_BN_WORD_SIZE (sizeof (OC_BN_WORD))
31#define OC_BN_WORD_NUM_BITS ((OC_BN_NUM_BITS) (OC_BN_WORD_SIZE * OC_CHAR_BIT))
32//
33// Declarations regarding the maximum size of OC_BN structures.
34//
35typedef UINT16 OC_BN_NUM_WORDS;
36typedef UINT32 OC_BN_SIZE;
37typedef UINT32 OC_BN_NUM_BITS;
38#define OC_BN_MAX_SIZE ((OC_BN_SIZE) SIZE_64KB)
39#define OC_BN_MAX_LEN ((OC_BN_NUM_WORDS) (OC_BN_MAX_SIZE / OC_BN_WORD_SIZE))
40
46#define OC_BN_SIZE(NumWords) \
47 ((OC_BN_SIZE) (NumWords) * OC_BN_WORD_SIZE)
48
50 OC_BN_MAX_LEN <= MAX_UINTN / OC_BN_WORD_SIZE,
51 "The definition of OC_BN_SIZE may cause an overflow"
52 );
53
59#define OC_BN_BITS(NumWords) \
60 ((OC_BN_NUM_BITS) OC_BN_SIZE (NumWords) * OC_CHAR_BIT)
61
63 OC_BN_BITS (OC_BN_MAX_LEN) <= MAX_UINTN / OC_CHAR_BIT,
64 "The definition of OC_BN_BITS may cause an overflow"
65 );
66
67//
68// Primitives
69//
70
81VOID
83 IN OUT OC_BN_WORD *Result,
84 IN OC_BN_NUM_WORDS NumWords,
85 IN CONST UINT8 *Buffer,
86 IN UINTN BufferSize
87 );
88
99 IN OC_BN_WORD Word
100 );
101
102//
103// Montgomery arithmetics
104//
105
106#define OC_BN_MONT_MAX_LEN (OC_BN_MAX_LEN / 2U - 1U)
107#define OC_BN_MONT_MAX_SIZE (OC_BN_SIZE (OC_BN_MONT_MAX_LEN))
108
115#define OC_BN_MONT_RSQR_LEN(NumWords) ((OC_BN_NUM_WORDS) (((NumWords) + 1U) * 2U))
116
119 "The definition of OC_BN_MONT_RSQR_LEN is faulty"
120 );
121
128#define OC_BN_MONT_RSQR_SIZE(NumWords) (OC_BN_SIZE (OC_BN_MONT_RSQR_LEN (NumWords)))
129
136#define BIG_NUM_MONT_PARAMS_SCRATCH_SIZE(NumWords) \
137 (OC_BN_MONT_RSQR_SIZE (NumWords) * 3U)
138
140 OC_BN_MONT_RSQR_SIZE (OC_BN_MONT_MAX_SIZE) <= MAX_UINTN / 3,
141 "The definition of BIG_NUM_MONT_PARAMS_SCRATCH_SIZE may cause an overflow"
142 );
143
158 IN OUT OC_BN_WORD *RSqrMod,
159 IN OC_BN_NUM_WORDS NumWords,
160 IN CONST OC_BN_WORD *N,
161 IN OC_BN_WORD *Scratch
162 );
163
179BOOLEAN
181 IN OUT OC_BN_WORD *Result,
182 IN OC_BN_NUM_WORDS NumWords,
183 IN CONST OC_BN_WORD *A,
184 IN UINT32 B,
185 IN CONST OC_BN_WORD *N,
186 IN OC_BN_WORD N0Inv,
187 IN CONST OC_BN_WORD *RSqrMod,
188 IN OC_BN_WORD *ATmp
189 );
190
191#endif // BIG_NUM_LIB_H
UINTN OC_BN_WORD
Definition BigNumLib.h:26
#define OC_BN_BITS(NumWords)
Definition BigNumLib.h:59
BOOLEAN BigNumPowMod(IN OUT OC_BN_WORD *Result, IN OC_BN_NUM_WORDS NumWords, IN CONST OC_BN_WORD *A, IN UINT32 B, IN CONST OC_BN_WORD *N, IN OC_BN_WORD N0Inv, IN CONST OC_BN_WORD *RSqrMod, IN OC_BN_WORD *ATmp)
#define OC_BN_MONT_RSQR_SIZE(NumWords)
Definition BigNumLib.h:128
OC_BN_WORD BigNumCalculateMontParams(IN OUT OC_BN_WORD *RSqrMod, IN OC_BN_NUM_WORDS NumWords, IN CONST OC_BN_WORD *N, IN OC_BN_WORD *Scratch)
#define OC_BN_MAX_LEN
Definition BigNumLib.h:39
#define OC_BN_MONT_RSQR_LEN(NumWords)
Definition BigNumLib.h:115
STATIC_ASSERT(OC_BN_MAX_LEN<=MAX_UINTN/OC_BN_WORD_SIZE, "The definition of OC_BN_SIZE may cause an overflow")
OC_BN_WORD BigNumSwapWord(IN OC_BN_WORD Word)
#define OC_BN_MONT_MAX_SIZE
Definition BigNumLib.h:107
#define OC_BN_SIZE(NumWords)
Definition BigNumLib.h:46
#define OC_BN_WORD_SIZE
Definition BigNumLib.h:30
UINT32 OC_BN_NUM_BITS
Definition BigNumLib.h:37
VOID BigNumParseBuffer(IN OUT OC_BN_WORD *Result, IN OC_BN_NUM_WORDS NumWords, IN CONST UINT8 *Buffer, IN UINTN BufferSize)
#define OC_BN_MONT_MAX_LEN
Definition BigNumLib.h:106
UINT16 OC_BN_NUM_WORDS
Definition BigNumLib.h:35
#define OC_CHAR_BIT
Definition OcMiscLib.h:25
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
Definition OcTypingLib.h:42
#define N
Definition lzss.c:65