KM_EncodeECParams2M

#include“kmlib.h”
 

Windows library: Kmlib.lib

UNIX library: Libkmlib.a

typedef enum {
    ECBT_GnBasis,   /* Gaussian Normal Basis - parameters = 0,  0,  0 */
    ECBT_TpBasis,   /* Trinomial Basis - parameters = k,  0,  0 */
    ECBT_PpBasis    /* Pentanomial Basis - parameters = k1, k2, k3 */
} ECBasisType;
 
CK_RV KM_EncodeECParams2M(
CK_SIZE m,
ECBasisType basis,
CK_SIZE  parameters[3],   
CK_BYTE_PTR curveA,   CK_SIZE curveALen,
CK_BYTE_PTR curveB,   CK_SIZE curveBLen,
CK_BYTE_PTR curveSeed,CK_SIZE curveSeedLen,
CK_BYTE_PTR baseX,    CK_SIZE baseXLen,
CK_BYTE_PTR baseY,    CK_SIZE baseYLen,
CK_BYTE_PTR bpOrder,  CK_SIZE bpOrderLen,
CK_BYTE_PTR cofactor, CK_SIZE cofactorLen,
CK_BYTE_PTR result,   CK_SIZE * resultLen
);

Do DER enc of ECC Domain Parameters 2^M

All long integer values are variable length big endian numbers with optional leading zeros, lengths are all in bytes.

Parameters

M

Degree of field

basis

Should be ECBT_GnBasis or ECBT_TpBasis or ECBT_PpBasis

parameters

Array of three integers - values depend on basis

ECBT_GnBasis - parameters = 0. 0. 0

ECBT_TpBasis - parameters = k. 0. 0

ECBT_PpBasis - parameters = k1.k2.k3

curveA

Elliptic Curve coefficient a

curveALen

Elliptic Curve coefficient a length

curveB

Elliptic Curve coefficient b

curveBLen

Elliptic Curve coefficient b length

curveSeed

Seed (optional may be NULL)

curveSeedLen

Seed length

baseX

Elliptic Curve point X coord

baseXLen

Elliptic Curve point X coord length

baseY

Elliptic Curve point Y coord

baseYLen

Elliptic Curve point Y coord length

bpOrder

Order n of the Base Point

bpOrderLen

Order n of the Base Point length

cofactor

The integer h = #E(Fq)/n (optional)

cofactorLen

h length

result

Resultant Encoding (length prediction supported if NULL)

resultLen

Buffer len/Length of resultant encoding

Return

Status of operation. CKR_OK if ok