27 #ifndef __PRIMEEC_HEADER__ 28 #define __PRIMEEC_HEADER__ 30 #include "../cap/capdecl.h" 31 #include "../crypto/cryptodecl.h" 42 #define ECDH_X_CORD_ONLY 1 46 #define ECDH_XY_CORD 0 50 intBoolean privateKey;
54 PEllipticCurvePtr pCurve;
55 MocAsymKey pPrivateKey;
56 MocAsymKey pPublicKey;
65 typedef struct MEccKeyTemplate *MEccKeyTemplatePtr;
67 #if (defined(__ENABLE_MOCANA_ECC__)) 69 #ifdef MOC_EXTERN_PRIMEEC_H 70 #undef MOC_EXTERN_PRIMEEC_H 76 #ifndef OPENSSL_ENGINE 78 #define ECDSA_sign ECDSA_signDigestAux 84 #ifdef WIN_EXPORT_PRIMEEC_H 85 #define MOC_EXTERN_PRIMEEC_H __declspec(dllexport) 87 #define MOC_EXTERN_PRIMEEC_H __declspec(dllimport) extern 91 #undef MOC_EXTERN_PRIMEEC_H 92 #define MOC_EXTERN_PRIMEEC_H extern 97 #define MOC_EXTERN_PRIMEEC_H MOC_EXTERN 105 #define MOC_EXTERN_P MOC_EXTERN_PRIMEEC_H 108 #ifndef __ENABLE_MOCANA_ECC_P192__ 109 #define NUM_EC_P192 (0) 111 #define NUM_EC_P192 (1) 112 MOC_EXTERN_PRIMEEC_H
const PEllipticCurvePtr EC_P192;
115 #ifdef __DISABLE_MOCANA_ECC_P224__ 116 #define NUM_EC_P224 (0) 118 #define NUM_EC_P224 (1) 119 MOC_EXTERN_PRIMEEC_H
const PEllipticCurvePtr EC_P224;
122 #ifdef __DISABLE_MOCANA_ECC_P256__ 123 #define NUM_EC_P256 (0) 125 #define NUM_EC_P256 (1) 126 MOC_EXTERN_PRIMEEC_H
const PEllipticCurvePtr EC_P256;
129 #ifdef __DISABLE_MOCANA_ECC_P384__ 130 #define NUM_EC_P384 (0) 132 #define NUM_EC_P384 (1) 133 MOC_EXTERN_PRIMEEC_H
const PEllipticCurvePtr EC_P384;
136 #ifdef __DISABLE_MOCANA_ECC_P521__ 137 #define NUM_EC_P521 (0) 139 #define NUM_EC_P521 (1) 140 MOC_EXTERN_PRIMEEC_H
const PEllipticCurvePtr EC_P521;
143 #define NUM_ECC_PCURVES ((NUM_EC_P192) + (NUM_EC_P224) + (NUM_EC_P256) + \ 144 (NUM_EC_P384) + (NUM_EC_P521)) 175 MOC_EXTERN MSTATUS
EC_multiplyPoint(PrimeFieldPtr pPF, PFEPtr pResX, PFEPtr pResY,
176 ConstPFEPtr k, ConstPFEPtr pX, ConstPFEPtr pY);
199 ConstPFEPtr pAddedX, ConstPFEPtr pAddedY,
200 ConstPFEPtr k, ConstPFEPtr pX, ConstPFEPtr pY);
216 MOC_EXTERN MSTATUS
EC_computeYFromX( PEllipticCurvePtr pEC, ConstPFEPtr x, PFEPtr y);
237 MOC_EXTERN MSTATUS
EC_newKey(PEllipticCurvePtr pEC, ECCKey** ppNewKey);
263 MOC_EXTERN MSTATUS
EC_cloneKey(ECCKey** ppNew,
const ECCKey* pSrc);
279 MOC_EXTERN MSTATUS
EC_equalKey(
const ECCKey* pKey1,
const ECCKey* pKey2, byteBoolean* res);
304 const ubyte* scalar, ubyte4 scalarLen);
319 MOC_EXTERN MSTATUS
EC_setPrivateKey( ECCKey *pKey, ubyte *pScalar, ubyte4 scalarLen);
332 PEllipticCurvePtr pEC2);
349 ConstPFEPtr pQx, ConstPFEPtr pQy);
375 PFEPtr k, PFEPtr pQx, PFEPtr pQy);
391 MOC_EXTERN MSTATUS
EC_verifyPublicKey(PEllipticCurvePtr pEC, ConstPFEPtr pQx, ConstPFEPtr pQy);
408 MOC_EXTERN MSTATUS
EC_verifyPoint(PEllipticCurvePtr pEC, ConstPFEPtr pQx, ConstPFEPtr pQy);
430 ConstPFEPtr pX, ConstPFEPtr pY,
431 ubyte** s, sbyte4* pLen);
451 const ubyte* s, sbyte4 len,
452 PFEPtr pX, PFEPtr pY);
488 ConstPFEPtr pX, ConstPFEPtr pY,
489 ubyte* s, sbyte4 len);
513 const ubyte* s, sbyte4 len,
514 PFEPtr* ppX, PFEPtr* ppY);
535 RNGFun rngFun,
void* rngArg,
536 const ubyte* hash, ubyte4 hashLen,
556 ConstPFEPtr pPublicKeyX, ConstPFEPtr pPublicKeyY,
557 const ubyte* hash, ubyte4 hashLen,
558 ConstPFEPtr r, ConstPFEPtr s);
582 ConstPFEPtr pX, ConstPFEPtr pY,
583 ConstPFEPtr scalarMultiplier,
584 ubyte** sharedSecret,
585 sbyte4* sharedSecretLen,
610 const ubyte* pointByteString,
611 sbyte4 pointByteStringLen,
612 ConstPFEPtr scalarMultiplier,
613 ubyte** sharedSecret,
614 sbyte4* sharedSecretLen);
618 #define FULL_UNIFIED 0 620 #define EPHEMERAL_UNIFIED 2 621 #define ONE_PASS_UNIFIED_U 3 622 #define ONE_PASS_UNIFIED_V 4 623 #define ONE_PASS_MQV_U 5 624 #define ONE_PASS_MQV_V 6 625 #define ONE_PASS_DH_U 7 626 #define ONE_PASS_DH_V 8 627 #define STATIC_UNIFIED 9 667 ubyte *pOtherPartysStatic,
668 ubyte4 otherStaticLen,
669 ubyte *pOtherPartysEphemeral,
670 ubyte4 otherEphemeralLen,
671 ubyte **ppSharedSecret,
672 ubyte4 *pSharedSecretLen);
674 #if defined(__ENABLE_MOCANA_ECC_COMB__) || !defined( __ENABLE_MOCANA_SMALL_CODE_FOOTPRINT__) 693 MOC_EXTERN MSTATUS
EC_combSize( PrimeFieldPtr pPF, sbyte4 windowSize, sbyte4* size);
718 ConstPFEPtr pQy, sbyte4 windowSize,
719 PFEPtr* pPrecomputed);
742 PFEPtr* pCurvePrecomputed);
761 MOC_EXTERN MSTATUS
EC_deleteComb(PrimeFieldPtr pPF, sbyte4 windowSize, PFEPtr *pComb);
765 #if !defined(__DISABLE_MOCANA_SIGNED_ODD_COMB__) && defined(__ENABLE_MOCANA_SIGNED_ODD_COMB_PERSIST__) 822 ConstPFEPtr pPublicKeyX, ConstPFEPtr pPublicKeyY,
823 const ubyte* hash, ubyte4 hashLen,
824 sbyte4 curveWinSize, ConstPFEPtr pCurvePrecomp,
825 sbyte4 pubKeyWinSize, ConstPFEPtr pPubKeyPrecomp,
826 ConstPFEPtr r, ConstPFEPtr s);
MOC_EXTERN MSTATUS ECDH_generateSharedSecret(PEllipticCurvePtr pEC, const ubyte *pointByteString, sbyte4 pointByteStringLen, ConstPFEPtr scalarMultiplier, ubyte **sharedSecret, sbyte4 *sharedSecretLen)
Generates a Diffie-Hellman shared secret from an uncompressed form public key.
MOC_EXTERN MSTATUS EC_getPointByteStringLen(PEllipticCurvePtr pEC, sbyte4 *pLen)
Gets the length in bytes of an arbitrary point's uncompressed form.
MOC_EXTERN MSTATUS EC_generateKeyPair(PEllipticCurvePtr pEC, RNGFun rngFun, void *rngArg, PFEPtr k, PFEPtr pQx, PFEPtr pQy)
Generates a new ECC private/public key pair.
MOC_EXTERN MSTATUS EC_verifyPublicKey(PEllipticCurvePtr pEC, ConstPFEPtr pQx, ConstPFEPtr pQy)
Verifies that a public key point is a valid point on the curve.
MOC_EXTERN intBoolean EC_compareEllipticCurves(PEllipticCurvePtr pEC1, PEllipticCurvePtr pEC2)
Compares if two elliptic curve pointers are the same curve.
MOC_EXTERN MSTATUS EC_computeYFromX(PEllipticCurvePtr pEC, ConstPFEPtr x, PFEPtr y)
Computes a Y coordinate of a point on the curve from an X coordinate.
MOC_EXTERN MSTATUS EC_writePointToBuffer(PEllipticCurvePtr pEC, ConstPFEPtr pX, ConstPFEPtr pY, ubyte *s, sbyte4 len)
Converts a point on the curve to an uncompressed form byte array.
MOC_EXTERN MSTATUS EC_equalKey(const ECCKey *pKey1, const ECCKey *pKey2, byteBoolean *res)
Tests whether two ECCKeys have identical public keys.
MOC_EXTERN MSTATUS EC_setPrivateKey(ECCKey *pKey, ubyte *pScalar, ubyte4 scalarLen)
Sets the private key parameter of an ECCKey.
MOC_EXTERN PrimeFieldPtr EC_getUnderlyingField(PEllipticCurvePtr pEC)
Gets the underlying prime field associated with a prime curve.
MOC_EXTERN MSTATUS EC_pointToByteString(PEllipticCurvePtr pEC, ConstPFEPtr pX, ConstPFEPtr pY, ubyte **s, sbyte4 *pLen)
Converts a point on the curve to an uncompressed form byte array.
MOC_EXTERN MSTATUS EC_setKeyParameters(ECCKey *pKey, const ubyte *point, ubyte4 pointLen, const ubyte *scalar, ubyte4 scalarLen)
Sets the key parameters of an ECCKey.
MOC_EXTERN MSTATUS EC_verifyPoint(PEllipticCurvePtr pEC, ConstPFEPtr pQx, ConstPFEPtr pQy)
Verifies that a point is a valid point on the curve.
MOC_EXTERN MSTATUS ECDH_keyAgreementSchemePrimeCurve(ubyte4 mode, ECCKey *pStatic, ECCKey *pEphemeral, ubyte *pOtherPartysStatic, ubyte4 otherStaticLen, ubyte *pOtherPartysEphemeral, ubyte4 otherEphemeralLen, ubyte **ppSharedSecret, ubyte4 *pSharedSecretLen)
Generates a Diffie-Hellman shared secret via one of the major modes.
MOC_EXTERN MSTATUS EC_deleteKey(ECCKey **ppKey)
Deletes an ECCKey instance.
MOC_EXTERN MSTATUS EC_cloneKey(ECCKey **ppNew, const ECCKey *pSrc)
Clones an ECCKey instance.
MOC_EXTERN MSTATUS EC_newKey(PEllipticCurvePtr pEC, ECCKey **ppNewKey)
Allocates a new ECCKey instance.
MOC_EXTERN MSTATUS EC_addMultiplyPoint(PrimeFieldPtr pPF, PFEPtr pResX, PFEPtr pResY, ConstPFEPtr pAddedX, ConstPFEPtr pAddedY, ConstPFEPtr k, ConstPFEPtr pX, ConstPFEPtr pY)
Computes a scalar-point multiplication plus an addition on a prime curve.
MOC_EXTERN MSTATUS EC_precomputeComb(PrimeFieldPtr pPF, ConstPFEPtr pQx, ConstPFEPtr pQy, sbyte4 windowSize, PFEPtr *pPrecomputed)
Computes the comb of a point on the curve.
MOC_EXTERN MSTATUS EC_multiplyPoint(PrimeFieldPtr pPF, PFEPtr pResX, PFEPtr pResY, ConstPFEPtr k, ConstPFEPtr pX, ConstPFEPtr pY)
Computes a scalar-point multiplication on a prime curve.
MOC_EXTERN MSTATUS ECDH_generateSharedSecretAux(PEllipticCurvePtr pEC, ConstPFEPtr pX, ConstPFEPtr pY, ConstPFEPtr scalarMultiplier, ubyte **sharedSecret, sbyte4 *sharedSecretLen, sbyte4 flag)
Generates a Diffie-Hellman shared secret.
MOC_EXTERN MSTATUS EC_combSize(PrimeFieldPtr pPF, sbyte4 windowSize, sbyte4 *size)
Computes the total number of pf_units that will be needed to store a comb.
MOC_EXTERN MSTATUS EC_setPointToByteString(PEllipticCurvePtr pEC, const ubyte *s, sbyte4 len, PFEPtr pX, PFEPtr pY)
Converts an uncompressed form point to prime field elements.
MOC_EXTERN MSTATUS EC_byteStringToPoint(PEllipticCurvePtr pEC, const ubyte *s, sbyte4 len, PFEPtr *ppX, PFEPtr *ppY)
Converts an uncompressed form point to newly allocated prime field elements.
MOC_EXTERN MSTATUS EC_verifyKeyPair(PEllipticCurvePtr pEC, ConstPFEPtr k, ConstPFEPtr pQx, ConstPFEPtr pQy)
Verifies that a given private key is associated with a given public key.
MOC_EXTERN MSTATUS ECDSA_signDigestAux(PEllipticCurvePtr pEC, ConstPFEPtr d, RNGFun rngFun, void *rngArg, const ubyte *hash, ubyte4 hashLen, PFEPtr r, PFEPtr s)
Signs a message digest via the ECDSA signature algorithm.
sbyte4(* RNGFun)(void *rngFunArg, ubyte4 length, ubyte *buffer)
Function pointer type for a method that produces (pseudo) random bytes.
Definition: random.h:98
MOC_EXTERN MSTATUS ECDSA_verifySignatureEx(PEllipticCurvePtr pEC, ConstPFEPtr pPublicKeyX, ConstPFEPtr pPublicKeyY, const ubyte *hash, ubyte4 hashLen, sbyte4 curveWinSize, ConstPFEPtr pCurvePrecomp, sbyte4 pubKeyWinSize, ConstPFEPtr pPubKeyPrecomp, ConstPFEPtr r, ConstPFEPtr s)
Verifies a message digest via the ECDSA signature algorithm using provided combs. ...
MOC_EXTERN MSTATUS EC_deleteComb(PrimeFieldPtr pPF, sbyte4 windowSize, PFEPtr *pComb)
Zeros and frees a comb.
MOC_EXTERN MSTATUS EC_deletePrimeCurveCombsAndMutexes(void)
Zeros and frees globally stored combs and mutexes.
MOC_EXTERN MSTATUS EC_precomputeCombOfCurve(PEllipticCurvePtr pEC, sbyte4 windowSize, PFEPtr *pCurvePrecomputed)
Computes the comb of the curve's large cyclic group generator.
MOC_EXTERN MSTATUS ECDSA_verifySignature(PEllipticCurvePtr pEC, ConstPFEPtr pPublicKeyX, ConstPFEPtr pPublicKeyY, const ubyte *hash, ubyte4 hashLen, ConstPFEPtr r, ConstPFEPtr s)
Verifies a message digest via the ECDSA signature algorithm.
MOC_EXTERN MSTATUS EC_createPrimeCurveMutexes(void)
Creates globally stored mutexes used for thread safety.