27 #ifndef __PRIMEFLD_HEADER__ 28 #define __PRIMEFLD_HEADER__ 30 #include "../crypto/cryptodecl.h" 36 #if (defined(__ENABLE_MOCANA_ECC__)) 38 #ifdef __ENABLE_MOCANA_64_BIT__ 39 #define MOC_EC_ONE 0x01ULL 40 #define MOC_EC_TWO 0x02ULL 42 #define MOC_EC_ONE 0x01 43 #define MOC_EC_TWO 0x02 46 #ifdef MOC_EXTERN_PRIMEFLD_H 47 #undef MOC_EXTERN_PRIMEFLD_H 52 #ifdef WIN_EXPORT_PRIMEFLD_H 53 #define MOC_EXTERN_PRIMEFLD_H __declspec(dllexport) 55 #define MOC_EXTERN_PRIMEFLD_H __declspec(dllimport) extern 59 #undef MOC_EXTERN_PRIMEFLD_H 60 #define MOC_EXTERN_PRIMEFLD_H extern 65 #define MOC_EXTERN_PRIMEFLD_H MOC_EXTERN 73 #define MOC_EXTERN_P MOC_EXTERN_PRIMEFLD_H 76 #ifdef __ENABLE_MOCANA_ECC_P192__ 77 MOC_EXTERN_PRIMEFLD_H
const PrimeFieldPtr PF_p192;
80 #ifndef __DISABLE_MOCANA_ECC_P224__ 81 MOC_EXTERN_PRIMEFLD_H
const PrimeFieldPtr PF_p224;
84 #ifndef __DISABLE_MOCANA_ECC_P256__ 85 MOC_EXTERN_PRIMEFLD_H
const PrimeFieldPtr PF_p256;
88 #ifndef __DISABLE_MOCANA_ECC_P384__ 89 MOC_EXTERN_PRIMEFLD_H
const PrimeFieldPtr PF_p384;
92 #if defined(__ENABLE_MOCANA_ECC_EDDSA_448__) || defined(__ENABLE_MOCANA_ECC_EDDH_448__) || defined(__ENABLE_MOCANA_FIPS_MODULE__) 93 MOC_EXTERN_PRIMEFLD_H
const PrimeFieldPtr PF_p448;
96 #ifndef __DISABLE_MOCANA_ECC_P521__ 97 MOC_EXTERN_PRIMEFLD_H
const PrimeFieldPtr PF_p521;
136 MOC_EXTERN intBoolean PRIMEFIELD_comparePrimeFields(PrimeFieldPtr pField1, PrimeFieldPtr pField2);
164 MOC_EXTERN MSTATUS
PRIMEFIELD_add( PrimeFieldPtr pField, PFEPtr pSumAndValue, ConstPFEPtr pAddend);
179 MOC_EXTERN MSTATUS
PRIMEFIELD_subtract( PrimeFieldPtr pField, PFEPtr pResultAndValue, ConstPFEPtr pSubtract);
193 MOC_EXTERN MSTATUS
PRIMEFIELD_xor(PrimeFieldPtr pField, PFEPtr pResultAndValue, ConstPFEPtr pXor);
208 MOC_EXTERN MSTATUS
PRIMEFIELD_multiply( PrimeFieldPtr pField, PFEPtr pProduct, ConstPFEPtr pA, ConstPFEPtr pB);
238 MOC_EXTERN MSTATUS
PRIMEFIELD_getBit( PrimeFieldPtr pField, ConstPFEPtr pA, ubyte4 bitNum, ubyte* bit);
253 MOC_EXTERN MSTATUS
PRIMEFIELD_inverse( PrimeFieldPtr pField, PFEPtr pInverse, ConstPFEPtr pA);
270 MOC_EXTERN MSTATUS
PRIMEFIELD_divide( PrimeFieldPtr pField, PFEPtr pResult, ConstPFEPtr pA, ConstPFEPtr pDivisor);
414 MOC_EXTERN sbyte4
PRIMEFIELD_cmp(PrimeFieldPtr pField, ConstPFEPtr pA, ConstPFEPtr pB);
427 MOC_EXTERN intBoolean
PRIMEFIELD_match(PrimeFieldPtr pField, ConstPFEPtr pA, ConstPFEPtr pB);
451 ConstPFEPtr pB, ConstPFEPtr pModulo, ConstPFEPtr pMu);
472 MOC_EXTERN MSTATUS
PRIMEFIELD_addAux( PrimeFieldPtr pField, PFEPtr pSumAndValue, ConstPFEPtr pAddend,
473 ConstPFEPtr pModulus);
495 MOC_EXTERN MSTATUS
PRIMEFIELD_inverseAux( sbyte4 k, PFEPtr pInverse, ConstPFEPtr pA, ConstPFEPtr pModulus);
517 MOC_EXTERN MSTATUS
PRIMEFIELD_add2( PrimeFieldPtr pField, PFEPtr pSum, ConstPFEPtr pAddend, ConstPFEPtr pAddend2);
539 MOC_EXTERN MSTATUS
PRIMEFIELD_subtract2( PrimeFieldPtr pField, PFEPtr pResult, ConstPFEPtr pMinuend, ConstPFEPtr pSubtrahend);
577 #if (defined(__ENABLE_MOCANA_VLONG_ECC_CONVERSION__)) 617 vlong** ppNewElem, vlong** ppQueue);
656 MOC_EXTERN MSTATUS
PRIMEFIELD_newMpintFromElement(PrimeFieldPtr pField, ConstPFEPtr pElem, ubyte** ppNewMpint, sbyte4 *pRetMpintLength, vlong** ppVlongQueue);
680 MOC_EXTERN MSTATUS
PRIMEFIELD_newElementFromMpint(
const ubyte* pBuffer, ubyte4 bufSize, ubyte4 *pBufIndex, PrimeFieldPtr pField, PFEPtr* ppNewElem);
MOC_EXTERN MSTATUS PRIMEFIELD_specialExp448(PFEPtr pResult, ConstPFEPtr pA, byteBoolean isInverse)
Special finite field exponentiation for inverses or square roots.
MOC_EXTERN MSTATUS PRIMEFIELD_barrettMultiply(PrimeFieldPtr pField, PFEPtr pProduct, ConstPFEPtr pA, ConstPFEPtr pB, ConstPFEPtr pModulo, ConstPFEPtr pMu)
Performs an arbitrary modular multiplication with the Barrett reduction routine.
MOC_EXTERN MSTATUS PRIMEFIELD_inverse(PrimeFieldPtr pField, PFEPtr pInverse, ConstPFEPtr pA)
Multiplicatively inverts a prime field element.
MOC_EXTERN MSTATUS PRIMEFIELD_newElement(PrimeFieldPtr pField, PFEPtr *ppNewElem)
Allocates a new prime field element.
MOC_EXTERN MSTATUS PRIMEFIELD_deleteElement(PrimeFieldPtr pField, PFEPtr *ppDeleteElem)
Deletes a prime field element.
MOC_EXTERN MSTATUS PRIMEFIELD_getBit(PrimeFieldPtr pField, ConstPFEPtr pA, ubyte4 bitNum, ubyte *bit)
Gets a bit in a prime field element.
MOC_EXTERN sbyte4 PRIMEFIELD_cmpToUnsigned(PrimeFieldPtr pField, ConstPFEPtr pA, ubyte4 val)
Compares a prime field element to an unsigned small integer.
MOC_EXTERN MSTATUS PRIMEFIELD_newVlongFromElement(PrimeFieldPtr pField, ConstPFEPtr pElem, vlong **ppNewElem, vlong **ppQueue)
Creates a new vlong from a prime field element.
MOC_EXTERN MSTATUS PRIMEFIELD_inverseAux(sbyte4 k, PFEPtr pInverse, ConstPFEPtr pA, ConstPFEPtr pModulus)
Performs an arbitrary modular inversion.
MOC_EXTERN MSTATUS PRIMEFIELD_writeByteString(PrimeFieldPtr pField, ConstPFEPtr pA, ubyte *b, sbyte4 len)
Writes a prime field element to an existing byte array.
MOC_EXTERN MSTATUS PRIMEFIELD_newElementFromMpint(const ubyte *pBuffer, ubyte4 bufSize, ubyte4 *pBufIndex, PrimeFieldPtr pField, PFEPtr *ppNewElem)
Creates a new prime field element from a multiple precision integer.
MOC_EXTERN MSTATUS PRIMEFIELD_newMpintFromElement(PrimeFieldPtr pField, ConstPFEPtr pElem, ubyte **ppNewMpint, sbyte4 *pRetMpintLength, vlong **ppVlongQueue)
Creates a new multiple precision integer from a prime field element.
MOC_EXTERN MSTATUS PRIMEFIELD_copyElement(PrimeFieldPtr pField, PFEPtr pDestElem, ConstPFEPtr pSrcElem)
Copies a prime field element.
MOC_EXTERN MSTATUS PRIMEFIELD_squareRoot(PrimeFieldPtr pField, PFEPtr pResult, ConstPFEPtr pA)
Computes the square root of a prime field element.
MOC_EXTERN MSTATUS PRIMEFIELD_newElementFromVlong(PrimeFieldPtr pField, const vlong *pV, PFEPtr *ppNewElem)
Creates a new prime field element from a vlong element.
MOC_EXTERN MSTATUS PRIMEFIELD_getElementByteStringLen(PrimeFieldPtr pField, sbyte4 *len)
Gets the length of an arbitrary prime field element when written as a byte array. ...
MOC_EXTERN MSTATUS PRIMEFIELD_getPrime(PrimeFieldPtr pField, vlong **ppPrime)
Gets the prime number associateed with the prime field as a new vlong.
MOC_EXTERN MSTATUS PRIMEFIELD_addAux(PrimeFieldPtr pField, PFEPtr pSumAndValue, ConstPFEPtr pAddend, ConstPFEPtr pModulus)
Performs an arbitrary modular addition.
MOC_EXTERN MSTATUS PRIMEFIELD_subtract2(PrimeFieldPtr pField, PFEPtr pResult, ConstPFEPtr pMinuend, ConstPFEPtr pSubtrahend)
Subtracts two prime field elements.
MOC_EXTERN MSTATUS PRIMEFIELD_add2(PrimeFieldPtr pField, PFEPtr pSum, ConstPFEPtr pAddend, ConstPFEPtr pAddend2)
Adds two prime field elements.
MOC_EXTERN intBoolean PRIMEFIELD_match(PrimeFieldPtr pField, ConstPFEPtr pA, ConstPFEPtr pB)
Tests equality for two prime field elements.
MOC_EXTERN MSTATUS PRIMEFIELD_setToByteString(PrimeFieldPtr pField, PFEPtr pA, const ubyte *b, sbyte4 len)
Sets a prime field element from a Big Endian byte array.
MOC_EXTERN MSTATUS PRIMEFIELD_shiftR(PrimeFieldPtr pField, PFEPtr pA)
Right bit shifts a prime field element a single bit.
MOC_EXTERN MSTATUS PRIMEFIELD_xor(PrimeFieldPtr pField, PFEPtr pResultAndValue, ConstPFEPtr pXor)
Xor's prime field elements.
MOC_EXTERN MSTATUS PRIMEFIELD_divide(PrimeFieldPtr pField, PFEPtr pResult, ConstPFEPtr pA, ConstPFEPtr pDivisor)
Multipies a prime field element by the inverse of another element.
MOC_EXTERN MSTATUS PRIMEFIELD_setToUnsigned(PrimeFieldPtr pField, PFEPtr pA, ubyte4 val)
Sets a prime field element to an unsigned small integer.
MOC_EXTERN MSTATUS PRIMEFIELD_add(PrimeFieldPtr pField, PFEPtr pSumAndValue, ConstPFEPtr pAddend)
Adds prime field elements.
MOC_EXTERN MSTATUS PRIMEFIELD_getAsByteString(PrimeFieldPtr pField, ConstPFEPtr pA, ubyte **b, sbyte4 *len)
Converts a prime field element to a Big Endian byte array.
MOC_EXTERN MSTATUS PRIMEFIELD_getAsByteString2(PrimeFieldPtr pField, ConstPFEPtr pA, ConstPFEPtr pB, ubyte **b, sbyte4 *len)
Converts two prime field elements to Big Endian byte arrays concatenated.
MOC_EXTERN sbyte4 PRIMEFIELD_cmp(PrimeFieldPtr pField, ConstPFEPtr pA, ConstPFEPtr pB)
Compares two prime field elements.
MOC_EXTERN MSTATUS PRIMEFIELD_subtract(PrimeFieldPtr pField, PFEPtr pResultAndValue, ConstPFEPtr pSubtract)
Subtracts prime field elements.
MOC_EXTERN MSTATUS PRIMEFIELD_multiply(PrimeFieldPtr pField, PFEPtr pProduct, ConstPFEPtr pA, ConstPFEPtr pB)
Multiplies prime field elements.
MOC_EXTERN MSTATUS PRIMEFIELD_additiveInvert(PrimeFieldPtr pField, PFEPtr pA)
Additively inverts a prime field element inplace.