mr_esize

mr_esize定义在miracl.h

如果定义了MR_AFFINE_ONLY

#ifdef MR_AFFINE_ONLY
#define mr_esize(n) (((sizeof(epoint)+mr_big_reserve(2,(n)))-1)/MR_SL+1)*MR_SL 
#else
#define mr_esize(n) (((sizeof(epoint)+mr_big_reserve(3,(n)))-1)/MR_SL+1)*MR_SL 
#endif

函数功能:返回字节数。计算得到的字节数 ((sizeof(epoint)+mr_big_reserve)-1)/sizeof(long)+1)*sizeof(long)

参数n:整数。

1. 源码分析

与实现mr_esize相关的定义和函数如下。

/* Elliptic Curve epoint structure. Uses projective (X,Y,Z) co-ordinates */
typedef struct {
int marker;
big X;
big Y;
#ifndef MR_AFFINE_ONLY
big Z;
#endif
} epoint;
#ifdef MR_FP
  typedef mr_utype mr_small;
  #ifdef mr_dltype
  typedef mr_dltype mr_large;
  #endif
struct bigtype{
    mr_lentype len;
    mr_small *w;
}; 
#define MR_SL sizeof(long)
// 计算所需字节数
#define mr_size(n) (((sizeof(struct bigtype)+((n)+2)*sizeof(mr_utype))-1)/MR_SL+1)*MR_SL
#define mr_big_reserve(n,m) ((n)*mr_size(m)+MR_SL)
#ifdef MR_AFFINE_ONLY
#define mr_esize(n) (((sizeof(epoint)+mr_big_reserve(2,(n)))-1)/MR_SL+1)*MR_SL 
#else
#define mr_esize(n) (((sizeof(epoint)+mr_big_reserve(3,(n)))-1)/MR_SL+1)*MR_SL 
#endif

mr_size计算返回字节数。

mr_big_reserve计算得到(n)*mr_size(m)+sizeof(long)个字节。

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

results matching ""

    No results matching ""