epoint_init_mem_variable

epoint_init_mem_variable函数定义在miracl.h,在mrcore.c中实现。

extern epoint* epoint_init_mem_variable(_MIPT_ char *,int,int);

函数功能:用字符数组mem初始化一个epoint指针,也就是椭圆曲线的一个点。

参数mem:字符数组。

参数index:下标。

参数sz:整数。

1. 源码分析

epoint_init_mem_variable相关的函数如下。

#ifdef MR_GENERIC_MT
#define _MIPD_  miracl *mr_mip,
#else
#define _MIPD_     
#endif

/* Elliptic curve point status */
#define MR_AFFINE     1
#define MR_EPOINT_INFINITY   2

epoint* epoint_init_mem_variable(_MIPD_ char *mem,int index,int sz)
{
    epoint *p;
    char *ptr;
    int offset,r;

#ifdef MR_OS_THREADS
    miracl *mr_mip=get_mip();
#endif
    // 字节对齐
    offset=0;
    r=(unsigned long)mem%MR_SL;
    if (r>0) offset=MR_SL-r;

#ifndef MR_AFFINE_ONLY
    if (mr_mip->coord==MR_AFFINE)
        p=(epoint *)&mem[offset+index*mr_esize_a(sz)];
    else
#endif
    // 取mem的第offset+index*mr_esize(sz)个元素的地址,然后强制转换为epoint类型指针
    p=(epoint *)&mem[offset+index*mr_esize(sz)];

    ptr=(char *)p+sizeof(epoint);
    p->X=mirvar_mem_variable(ptr,0,sz);
    p->Y=mirvar_mem_variable(ptr,1,sz);
#ifndef MR_AFFINE_ONLY
    if (mr_mip->coord!=MR_AFFINE) p->Z=mirvar_mem_variable(ptr,2,sz);
#endif
    p->marker=MR_EPOINT_INFINITY;
    return p;
}

如果定义了MR_OS_THREADS,则设置mr_mipget_mip,返回miracl *指针。

mirvar_mem_variable为字符数组mem的元素设置对齐。

MR_AFFINEMR_EPOINT_INFINITY定义在字符常量,表示椭圆曲线上点的状态。

© phdlisl all right reserved,powered by GitbookUpdate in 2025-10-11

results matching ""

    No results matching ""