ReactOS 0.4.17-dev-1005-g171e1de
ec_internal_curves.c File Reference
#include "precomp.h"
Include dependency graph for ec_internal_curves.c:

Go to the source code of this file.

Functions

static PCSYMCRYPT_ECURVE_PARAMS SYMCRYPT_CALL SymCryptGetCachedEcurveParams (SYMCRYPT_CACHED_ECURVE_ID curveId)
 
PCSYMCRYPT_ECURVE SYMCRYPT_CALL SymCryptGetCachedEcurve (SYMCRYPT_CACHED_ECURVE_ID curveId)
 

Variables

static PCSYMCRYPT_ECURVE rgpCachedCurves [SYMCRYPT_CACHED_ECURVE_ID_COUNT] = { 0 }
 

Function Documentation

◆ SymCryptGetCachedEcurve()

PCSYMCRYPT_ECURVE SYMCRYPT_CALL SymCryptGetCachedEcurve ( SYMCRYPT_CACHED_ECURVE_ID  curveId)

Definition at line 33 of file ec_internal_curves.c.

35{
36 PCSYMCRYPT_ECURVE pCachedCurve = NULL;
37 PSYMCRYPT_ECURVE pNewCurve = NULL;
38 PSYMCRYPT_ECURVE pCurrCurve = NULL;
40
41 if ( curveId < 0 || curveId >= SYMCRYPT_CACHED_ECURVE_ID_COUNT )
42 {
43 return NULL;
44 }
45
46 pCachedCurve = (PCSYMCRYPT_ECURVE) SYMCRYPT_ATOMIC_LOADPTR_ACQUIRE( &rgpCachedCurves[curveId] );
47 if ( pCachedCurve != NULL )
48 {
49 return pCachedCurve;
50 }
51
52 pParams = SymCryptGetCachedEcurveParams( curveId );
53 if ( pParams == NULL )
54 {
55 return NULL;
56 }
57
58 pNewCurve = SymCryptEcurveAllocate( pParams, 0 );
59 if ( pNewCurve == NULL )
60 {
61 return NULL;
62 }
63
64 pCurrCurve = SYMCRYPT_ATOMIC_CAS_PTR_ACQUIRE_RELEASE(
65 &rgpCachedCurves[curveId],
66 pNewCurve,
67 NULL);
68
69 // Means the original curve was already filled
70 // and that our new curve was not used. So we
71 // free the new curve and return the existing one.
72 if ( pCurrCurve != NULL )
73 {
74 SymCryptEcurveFree( pNewCurve );
75 return pCurrCurve;
76 }
77
78 return pNewCurve;
79}
#define NULL
Definition: types.h:112
static PCSYMCRYPT_ECURVE_PARAMS SYMCRYPT_CALL SymCryptGetCachedEcurveParams(SYMCRYPT_CACHED_ECURVE_ID curveId)
static PCSYMCRYPT_ECURVE rgpCachedCurves[SYMCRYPT_CACHED_ECURVE_ID_COUNT]
@ SYMCRYPT_CACHED_ECURVE_ID_COUNT
Definition: sc_lib.h:4361
VOID SYMCRYPT_CALL SymCryptEcurveFree(_Out_ PSYMCRYPT_ECURVE pCurve)
Definition: ecurve.c:657
PSYMCRYPT_ECURVE SYMCRYPT_CALL SymCryptEcurveAllocate(_In_ PCSYMCRYPT_ECURVE_PARAMS pParams, _In_ UINT32 flags)
Definition: ecurve.c:606
const SYMCRYPT_ECURVE * PCSYMCRYPT_ECURVE
SYMCRYPT_ECURVE * PSYMCRYPT_ECURVE

◆ SymCryptGetCachedEcurveParams()

static PCSYMCRYPT_ECURVE_PARAMS SYMCRYPT_CALL SymCryptGetCachedEcurveParams ( SYMCRYPT_CACHED_ECURVE_ID  curveId)
static

Definition at line 15 of file ec_internal_curves.c.

17{
18 switch (curveId)
19 {
26 default:
27 return NULL;
28 }
29}
@ SYMCRYPT_CACHED_ECURVE_ID_CURVE_25519
Definition: sc_lib.h:4360
@ SYMCRYPT_CACHED_ECURVE_ID_NIST_P256
Definition: sc_lib.h:4358
@ SYMCRYPT_CACHED_ECURVE_ID_NIST_P384
Definition: sc_lib.h:4359
const PCSYMCRYPT_ECURVE_PARAMS SymCryptEcurveParamsNistP384
const PCSYMCRYPT_ECURVE_PARAMS SymCryptEcurveParamsNistP256
const PCSYMCRYPT_ECURVE_PARAMS SymCryptEcurveParamsCurve25519

Referenced by SymCryptGetCachedEcurve().

Variable Documentation

◆ rgpCachedCurves

PCSYMCRYPT_ECURVE rgpCachedCurves[SYMCRYPT_CACHED_ECURVE_ID_COUNT] = { 0 }
static

Definition at line 10 of file ec_internal_curves.c.

Referenced by SymCryptGetCachedEcurve().