Datasheet

Table Of Contents
A the input point is filled in projective coordinates (X,Y,Z) or affine coordinates for X and Y, and
setting Z to 1 (pointed by {nu1PointABase,3*u2ModLength + 12}). The Point A can be the point at
infinity. In this case, the u2Status returned is PUKCL_POINT_AT_INFINITY.
Cns the Modular Constant filled (pointed by {nu1CnsBase,u2ModLength + 8})
P the modulus filled (pointed by {nu1ModBase,u2ModLength + 4})
The workspace not initialized (pointed by {nu1WorkSpace, 4*u2ModLength + 48}
The result is the point A with its (X,Y) coordinates converted to affine, and the Z coordinate set to 1.
The service name for this operation is GF2NEcConvProjToAffine.
Important:  Before using this service, ensure that the constant Cns has been calculated with
the setup of the Fast Modular Reductions service.
43.3.7.5.4 Parameters Definition
Table 43-100. GF2NEcConvProjToAffine Service Parameters
Parameter Type Direction Location Data Length Before
Executing the
Service
After Executing
the Service
nu1ModBase nu1 I Crypto
RAM
u2ModLength + 4 Base of
modulus P
Base of modulus
P
nu1CnsBase nu1 I Crypto
RAM
u2ModLength + 12 Base of Cns Base of Cns
u2ModLength u2 I Length of
modulus P
Length of
modulus P
nu1PointABase nu1 I Crypto
RAM
3*u2ModLength
+ 12
Input point A Resulting point A
in affine
coordinates
nu1Workspace nu1 I Crypto
RAM
4*u2ModLength
+ 48
Workspace
43.3.7.5.5 Code Example
PUKCL_PARAM PUKCLParam;
PPUKCL_PARAM pvPUKCLParam = &PUKCLParam;
// ! The Random Number Generator must be initialized and started
// ! following the directives given for the RNG on the chip
PUKCL (u2Option) = 0;
PUKCL _GF2NEcConvProjToAffine(nu1ModBase) = <Base of the ram location of P>;
PUKCL _GF2NEcConvProjToAffine(u2ModLength) = <Byte length of P>;
PUKCL _GF2NEcConvProjToAffine(nu1CnsBase) = <Base of the ram location of Cns>;
PUKCL _GF2NEcConvProjToAffine(nu1PointABase) = <Base of the ram location of the A point>;
PUKCL _GF2NEcConvProjToAffine(nu1Workspace) = <Base of the ram location of the workspace>;
...
// vPUKCL_Process() is a macro command, which populates the service name
// and then calls the library...
vPUKCL_Process(GF2NEcConvProjToAffine,&PUKCLParam);
if (PUKCL (u2Status) == PUKCL_OK)
{
SAM D5x/E5x Family Data Sheet
Public Key Cryptography Controller (PUKCC)
© 2019 Microchip Technology Inc.
Datasheet
DS60001507E-page 1553