43.3.6.10 Point is on Elliptic Curve

Purpose

This service is used to test whether or not the point is on the curve.

How to Use the Service

Description

The operation performed is:

Status = IsPointOnCurve(X, Y, Z)

In this computation, the following parameters need to be provided:

  • The input point is filled in projective coordinates (X,Y,Z) (pointed by {nu1PointBase,3*u2ModLength + 4}). This Point can be the point at infinity.
  • AParam and BParam are the Elliptic Curve Equation parameters. (pointed by{nu1AParam, u2ModLength+4} and {nu1BParam, u2ModLength+4}).
  • Cns the Fast 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 +28}.

The result is the status of the point (X,Y,Z) regarding the Elliptic Curve Equation.

The service name for this operation is ZpEcPointIsOnCurve.

Note: Before using this service, ensure that the constant Cns has been calculated with the setup of the Fast Modular Reduction service.

Parameters Definition

Table 43-83. ZpEcPointIsOnCurve Service Parameters
ParameterTypeDirectionLocationData LengthBefore Executing the ServiceAfter Executing the Service
nu1ModBasenu1ICrypto RAMu2ModLength + 4Base of modulus PBase of modulus P
nu1CnsBasenu1ICrypto RAMu2ModLength + 8Base of CnsBase of Cns
u2ModLengthu2ILength of modulus PLength of modulus P
nu1PointBasenu1ICrypto RAM3*u2ModLength + 12Input pointunchanged
nu1AParamnu1ICrypto RAMu2ModLength + 4The parameter aThe parameter a
nu1BParamnu1ICrypto RAMu2ModLength + 4The parameter bThe parameter b
nu1Workspacenu1ICrypto RAM4*u2ModLength + 28Workspace

Code Example

PUKCL_PARAM PUKCLParam;
PPUKCL_PARAM pvPUKCLParam = &PUKCLParam;


PUKCL (u2Option) = 0;

PUKCL _ZpEcPointIsOnCurve(nu1ModBase) = <Base of the ram location of P>; 
PUKCL _ZpEcPointIsOnCurve(u2ModLength) = <Byte length of P>;
PUKCL _ZpEcPointIsOnCurve(nu1CnsBase) = <Base of the ram location of Cns>; 
PUKCL _ZpEcPointIsOnCurve(nu1AParam) = <Base of the ram location of the parameter a>; 
PUKCL _ZpEcPointIsOnCurve(nu1BParam) = <Base of the ram location of the parameter b>;
PUKCL _ZpEcPointIsOnCurve(nu1PointBase) = <Base of the ram location of the point>; 
PUKCL _ZpEcPointIsOnCurve(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(ZpEcPointIsOnCurve,&PUKCLParam); 
if (PUKCL (u2Status) == PUKCL_OK)
            {
            ...
            }
else // Manage the error

Constraints

No overlapping between either input and output are allowed. The following conditions must be avoided to ensure that the service works correctly:

  • nu1ModBase, nu1CnsBase, nu1PointABase, nu1AParam, nu1BParam, nu1Workspace are not aligned on 32-bit boundaries
  • {nu1ModBase, u2ModLength+4}, {nu1CnsBase, u2ModLength+8}, {nu1PointABase, 3*u2ModLength +12}, {nu1AParam, u2ModLength + 4}, {nu1BParam, u2ModLength + 4}, {nu1Workspace, <WorkspaceLength>} are not in Crypto RAM.
  • u2ModLength is either: < 12, > 0xffc or not a 32-bit length.
  • All overlapping between {nu1ModBase, u2ModLength+4}, {nu1CnsBase,u2ModLength+8}, {nu1PointABase, 3*u2ModLength+12}, {nu1AParam, u2ModLength+4}, {nu1AParam, u2ModLength + 4} and {nu1Workspace, 4*u2ModLength+28}.

Status Returned Values

Table 43-84. ZpEcPointIsOnCurve Service Return Codes
Returned StatusImportanceMeaning
PUKCL_OKThe point is on the curve.
PUKCL_POINT_IS_NOT_ON_ CURVEWarningThe point is not on the curve.
PUKCL_POINT_AT_INFINITYWarningThe input point has its Z equal to zero, so it’s a representation of the infinite point.