mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
DirtySDK (EA's Dirty Sockets library) will be used for the LiveAPI implementation, and depends on: EABase, EAThread.
99 lines
3.9 KiB
C
99 lines
3.9 KiB
C
/*H********************************************************************************/
|
|
/*!
|
|
\File cryptcurve.c
|
|
|
|
\Description
|
|
This module implements an interface over our different curve crypto APIs
|
|
|
|
\Copyright
|
|
Copyright (c) Electronic Arts 2018. ALL RIGHTS RESERVED.
|
|
*/
|
|
/********************************************************************************H*/
|
|
|
|
/*** Include files ****************************************************************/
|
|
|
|
#include "DirtySDK/crypt/cryptmont.h"
|
|
#include "DirtySDK/crypt/cryptcurve.h"
|
|
|
|
/*** Variables ********************************************************************/
|
|
|
|
//! mappings for the dh functions
|
|
static const CryptCurveDhT _CryptCurve_Dh[] =
|
|
{
|
|
{ (CryptCurveInitT *)CryptNistInitDh, (CryptCurvePublicT *)CryptNistPublic, (CryptCurveSecretT *)CryptNistSecret, (CryptCurvePointInitT *)CryptNistPointInitFrom, (CryptCurvePointFinalT *)CryptNistPointFinal, CRYPTCURVE_SECP256R1 },
|
|
{ (CryptCurveInitT *)CryptNistInitDh, (CryptCurvePublicT *)CryptNistPublic, (CryptCurveSecretT *)CryptNistSecret, (CryptCurvePointInitT *)CryptNistPointInitFrom, (CryptCurvePointFinalT *)CryptNistPointFinal, CRYPTCURVE_SECP384R1 },
|
|
{ (CryptCurveInitT *)CryptMontInit, (CryptCurvePublicT *)CryptMontPublic, (CryptCurveSecretT *)CryptMontSecret, (CryptCurvePointInitT *)CryptMontPointInitFrom, (CryptCurvePointFinalT *)CryptMontPointFinal, CRYPTCURVE_X25519 },
|
|
{ (CryptCurveInitT *)CryptMontInit, (CryptCurvePublicT *)CryptMontPublic, (CryptCurveSecretT *)CryptMontSecret, (CryptCurvePointInitT *)CryptMontPointInitFrom, (CryptCurvePointFinalT *)CryptMontPointFinal, CRYPTCURVE_X448 }
|
|
};
|
|
|
|
//! mappings for the dsa functions
|
|
static const CryptCurveDsaT _CryptCurve_Dsa[] =
|
|
{
|
|
{ (CryptCurveInitT *)CryptNistInitDsa, (CryptCurveSignT *)CryptNistSign, (CryptCurveVerifyT *)CryptNistVerify, (CryptCurvePointInitT *)CryptNistPointInitFrom, CRYPTCURVE_SECP256R1 },
|
|
{ (CryptCurveInitT *)CryptNistInitDsa, (CryptCurveSignT *)CryptNistSign, (CryptCurveVerifyT *)CryptNistVerify, (CryptCurvePointInitT *)CryptNistPointInitFrom, CRYPTCURVE_SECP384R1 }
|
|
};
|
|
|
|
/*** Public Functions *************************************************************/
|
|
|
|
/*F********************************************************************************/
|
|
/*!
|
|
\Function CryptCurveGetDh
|
|
|
|
\Description
|
|
Gets the diffie hellmen functions based on the curve type
|
|
|
|
\Input iCurveType - type that identifies the curve
|
|
|
|
\Output
|
|
const CryptCurveDhT * - pointer containing functions or NULL (not found)
|
|
|
|
\Version 05/04/2018 (eesponda)
|
|
*/
|
|
/********************************************************************************F*/
|
|
const CryptCurveDhT *CryptCurveGetDh(int32_t iCurveType)
|
|
{
|
|
const CryptCurveDhT *pCurve = NULL;
|
|
int32_t iCurveIdx;
|
|
|
|
for (iCurveIdx = 0; iCurveIdx < (signed)(sizeof(_CryptCurve_Dh)/sizeof(_CryptCurve_Dh[0])); iCurveIdx += 1)
|
|
{
|
|
if (_CryptCurve_Dh[iCurveIdx].iCurveType == iCurveType)
|
|
{
|
|
pCurve = &_CryptCurve_Dh[iCurveIdx];
|
|
break;
|
|
}
|
|
}
|
|
return(pCurve);
|
|
}
|
|
|
|
/*F********************************************************************************/
|
|
/*!
|
|
\Function CryptCurveGetDsa
|
|
|
|
\Description
|
|
Gets the digital signature algorithm functions based on the curve type
|
|
|
|
\Input iCurveType - type that identifies the curve
|
|
|
|
\Output
|
|
const CryptCurveDsaT * - pointer containing functions or NULL (not found)
|
|
|
|
\Version 05/04/2018 (eesponda)
|
|
*/
|
|
/********************************************************************************F*/
|
|
const CryptCurveDsaT *CryptCurveGetDsa(int32_t iCurveType)
|
|
{
|
|
const CryptCurveDsaT *pCurve = NULL;
|
|
int32_t iCurveIdx;
|
|
|
|
for (iCurveIdx = 0; iCurveIdx < (signed)(sizeof(_CryptCurve_Dsa)/sizeof(_CryptCurve_Dsa[0])); iCurveIdx += 1)
|
|
{
|
|
if (_CryptCurve_Dsa[iCurveIdx].iCurveType == iCurveType)
|
|
{
|
|
pCurve = &_CryptCurve_Dsa[iCurveIdx];
|
|
break;
|
|
}
|
|
}
|
|
return(pCurve);
|
|
}
|