📄 p1363.c
字号:
#else
memset(mem,0,MR_BIG_RESERVE(8));
#endif
err=mr_mip->ERNUM;
mirexit(_MIPPO_ );
if (err==MR_ERR_OUT_OF_MEMORY) return MR_P1363_OUT_OF_MEMORY;
if (err==MR_ERR_DIV_BY_ZERO) return MR_P1363_DIV_BY_ZERO;
if (err!=0) return -(1000+err);
return res;
}
P1363_API int DLSVDP_MQV(BOOL (*idle)(void),dl_domain *DOM,octet *S,octet *U,octet *V,octet *WD,octet *VD,octet *Z)
{
miracl *mr_mip=mirsys(DOM->words,0);
int h;
int err,res=0;
big q,r,s,u,v,wd,vd,e,t,td,z;
#ifndef MR_STATIC
char *mem;
#else
char mem[MR_BIG_RESERVE(11)];
memset(mem,0,MR_BIG_RESERVE(11));
#endif
if (mr_mip==NULL) return MR_P1363_OUT_OF_MEMORY;
mr_mip->ERCON=TRUE;
set_user_function(_MIPP_ idle);
#ifndef MR_STATIC
mem=memalloc(_MIPP_ 11);
if (mem==NULL) res=MR_P1363_OUT_OF_MEMORY;
#endif
if (res==0)
{
q=mirvar_mem(_MIPP_ mem, 0);
r=mirvar_mem(_MIPP_ mem, 1);
s=mirvar_mem(_MIPP_ mem, 2);
u=mirvar_mem(_MIPP_ mem, 3);
v=mirvar_mem(_MIPP_ mem, 4);
wd=mirvar_mem(_MIPP_ mem, 5);
vd=mirvar_mem(_MIPP_ mem, 6);
e=mirvar_mem(_MIPP_ mem, 7);
t=mirvar_mem(_MIPP_ mem, 8);
td=mirvar_mem(_MIPP_ mem, 9);
z=mirvar_mem(_MIPP_ mem, 10);
OS2FEP(_MIPP_ &DOM->Q,q);
OS2FEP(_MIPP_ &DOM->R,r);
OS2FEP(_MIPP_ S,s);
OS2FEP(_MIPP_ U,u);
OS2FEP(_MIPP_ V,v);
OS2FEP(_MIPP_ WD,wd);
OS2FEP(_MIPP_ VD,vd);
h=DOM->H;
expb2(_MIPP_ h,z);
copy(v,t);
divide(_MIPP_ t,z,z);
add(_MIPP_ t,z,t);
copy(vd,td);
divide(_MIPP_ td,z,z);
add(_MIPP_ td,z,td);
mad(_MIPP_ t,s,u,r,r,e);
mad(_MIPP_ e,td,td,r,r,t);
powmod2(_MIPP_ vd,e,wd,t,q,z);
if (size(z)==1) res= MR_P1363_ERROR;
else FE2OSP(_MIPP_ z,DOM->fsize,Z);
}
#ifndef MR_STATIC
memkill(_MIPP_ mem,11);
#else
memset(mem,0,MR_BIG_RESERVE(11));
#endif
err=mr_mip->ERNUM;
mirexit(_MIPPO_ );
if (err==MR_ERR_OUT_OF_MEMORY) return MR_P1363_OUT_OF_MEMORY;
if (err==MR_ERR_DIV_BY_ZERO) return MR_P1363_DIV_BY_ZERO;
if (err!=0) return -(1000+err);
return res;
}
P1363_API int DLSVDP_MQVC(BOOL (*idle)(void),dl_domain *DOM,octet *S,octet *U,octet *V,octet *WD,octet *VD,BOOL compatible,octet *Z)
{
miracl *mr_mip=mirsys(DOM->words,0);
int sz,h;
big q,r,s,u,v,wd,vd,e,t,td,z,k,ik;
int err,res=0;
#ifndef MR_STATIC
char *mem;
#else
char mem[MR_BIG_RESERVE(13)];
memset(mem,0,MR_BIG_RESERVE(13));
#endif
if (mr_mip==NULL) return MR_P1363_OUT_OF_MEMORY;
mr_mip->ERCON=TRUE;
set_user_function(_MIPP_ idle);
#ifndef MR_STATIC
mem=memalloc(_MIPP_ 13);
if (mem==NULL) res=MR_P1363_OUT_OF_MEMORY;
#endif
if (res==0)
{
q=mirvar_mem(_MIPP_ mem, 0);
r=mirvar_mem(_MIPP_ mem, 1);
ik=mirvar_mem(_MIPP_ mem, 2);
k=mirvar_mem(_MIPP_ mem, 3);
s=mirvar_mem(_MIPP_ mem, 4);
u=mirvar_mem(_MIPP_ mem, 5);
v=mirvar_mem(_MIPP_ mem, 6);
wd=mirvar_mem(_MIPP_ mem, 7);
vd=mirvar_mem(_MIPP_ mem, 8);
e=mirvar_mem(_MIPP_ mem, 9);
t=mirvar_mem(_MIPP_ mem, 10);
td=mirvar_mem(_MIPP_ mem, 11);
z=mirvar_mem(_MIPP_ mem, 12);
OS2FEP(_MIPP_ &DOM->Q,q);
OS2FEP(_MIPP_ &DOM->R,r);
OS2FEP(_MIPP_ &DOM->K,k);
OS2FEP(_MIPP_ S,s);
OS2FEP(_MIPP_ U,u);
OS2FEP(_MIPP_ V,v);
OS2FEP(_MIPP_ WD,wd);
OS2FEP(_MIPP_ VD,vd);
h=DOM->H;
expb2(_MIPP_ h,z);
copy(v,t);
divide(_MIPP_ t,z,z);
add(_MIPP_ t,z,t);
copy(vd,td);
divide(_MIPP_ td,z,z);
add(_MIPP_ td,z,td);
mad(_MIPP_ t,s,u,r,r,e);
if (compatible)
{
OS2FEP(_MIPP_ &DOM->IK,ik);
mad(_MIPP_ e,ik,e,r,r,e);
}
mad(_MIPP_ e,k,e,r,r,e);
mad(_MIPP_ e,td,td,r,r,t);
powmod2(_MIPP_ vd,e,wd,t,q,z);
sz=size(z);
if (sz==0 || sz==1) res=MR_P1363_INVALID_PUBLIC_KEY;
FE2OSP(_MIPP_ z,DOM->fsize,Z);
}
#ifndef MR_STATIC
memkill(_MIPP_ mem,13);
#else
memset(mem,0,MR_BIG_RESERVE(13));
#endif
err=mr_mip->ERNUM;
mirexit(_MIPPO_ );
if (err==MR_ERR_OUT_OF_MEMORY) return MR_P1363_OUT_OF_MEMORY;
if (err==MR_ERR_DIV_BY_ZERO) return MR_P1363_DIV_BY_ZERO;
if (err!=0) return -(1000+err);
return res;
}
P1363_API int DLVP_NR(BOOL (*idle)(void),dl_domain *DOM,octet *W,octet *C,octet *D,octet *F)
{
miracl *mr_mip=mirsys(DOM->words,0);
big q,r,g,w,f,c,d;
int err,res=0;
#ifndef MR_STATIC
char *mem;
#else
char mem[MR_BIG_RESERVE(7)];
memset(mem,0,MR_BIG_RESERVE(7));
#endif
if (mr_mip==NULL) return MR_P1363_OUT_OF_MEMORY;
mr_mip->ERCON=TRUE;
set_user_function(_MIPP_ idle);
#ifndef MR_STATIC
mem=memalloc(_MIPP_ 7);
if (mem==NULL) res=MR_P1363_OUT_OF_MEMORY;
#endif
if (res==0)
{
q=mirvar_mem(_MIPP_ mem, 0);
r=mirvar_mem(_MIPP_ mem, 1);
g=mirvar_mem(_MIPP_ mem, 2);
w=mirvar_mem(_MIPP_ mem, 3);
f=mirvar_mem(_MIPP_ mem, 4);
c=mirvar_mem(_MIPP_ mem, 5);
d=mirvar_mem(_MIPP_ mem, 6);
OS2FEP(_MIPP_ &DOM->Q,q);
OS2FEP(_MIPP_ &DOM->R,r);
OS2FEP(_MIPP_ &DOM->G,g);
OS2FEP(_MIPP_ W,w);
OS2FEP(_MIPP_ C,c);
OS2FEP(_MIPP_ D,d);
if (size(c)<1 || compare(c,r)>=0 || size(d)<0 || compare(d,r)>=0)
res=MR_P1363_INVALID;
}
if (res==0)
{
powmod2(_MIPP_ g,d,w,c,q,f);
divide(_MIPP_ f,r,r);
subtract(_MIPP_ c,f,f);
if (size(f)<0) add(_MIPP_ f,r,f);
convert_big_octet(_MIPP_ f,F);
}
#ifndef MR_STATIC
memkill(_MIPP_ mem,7);
#else
memset(mem,0,MR_BIG_RESERVE(7));
#endif
err=mr_mip->ERNUM;
mirexit(_MIPPO_ );
if (err==MR_ERR_OUT_OF_MEMORY) return MR_P1363_OUT_OF_MEMORY;
if (err==MR_ERR_DIV_BY_ZERO) return MR_P1363_DIV_BY_ZERO;
if (err!=0) return -(1000+err);
return res;
}
P1363_API int DLSP_NR(BOOL (*idle)(void),dl_domain *DOM,csprng *RNG,octet *S,octet *F,octet *C,octet *D)
{
miracl *mr_mip=mirsys(DOM->words,0);
big q,r,g,s,f,c,d,u,v;
int err,res=0;
#ifndef MR_STATIC
char *mem;
#else
char mem[MR_BIG_RESERVE(9)];
memset(mem,0,MR_BIG_RESERVE(9));
#endif
if (mr_mip==NULL) return MR_P1363_OUT_OF_MEMORY;
mr_mip->ERCON=TRUE;
set_user_function(_MIPP_ idle);
#ifndef MR_STATIC
mem=memalloc(_MIPP_ 9);
if (mem==NULL) res=MR_P1363_OUT_OF_MEMORY;
#endif
if (res==0)
{
q=mirvar_mem(_MIPP_ mem, 0);
r=mirvar_mem(_MIPP_ mem, 1);
g=mirvar_mem(_MIPP_ mem, 2);
s=mirvar_mem(_MIPP_ mem, 3);
f=mirvar_mem(_MIPP_ mem, 4);
c=mirvar_mem(_MIPP_ mem, 5);
d=mirvar_mem(_MIPP_ mem, 6);
u=mirvar_mem(_MIPP_ mem, 7);
v=mirvar_mem(_MIPP_ mem, 8);
OS2FEP(_MIPP_ &DOM->Q,q);
OS2FEP(_MIPP_ &DOM->R,r);
OS2FEP(_MIPP_ &DOM->G,g);
OS2FEP(_MIPP_ S,s);
OS2FEP(_MIPP_ F,f);
if (compare(f,r)>=0) res=MR_P1363_BAD_ASSUMPTION;
}
if (res==0)
{
do {
if (mr_mip->ERNUM) break;
strong_bigrand(_MIPP_ RNG,r,u);
if (DOM->PC.store==0)
powmod(_MIPP_ g,u,q,v);
else
pow_brick(_MIPP_ &DOM->PC,u,v);
add(_MIPP_ v,f,c);
divide(_MIPP_ c,r,r);
} while (size(c)==0);
}
if (res==0)
{
mad(_MIPP_ s,c,s,r,r,d);
subtract(_MIPP_ u,d,d);
if (size(d)<0) add(_MIPP_ d,r,d);
convert_big_octet(_MIPP_ c,C);
convert_big_octet(_MIPP_ d,D);
}
#ifndef MR_STATIC
memkill(_MIPP_ mem,9);
#else
memset(mem,0,MR_BIG_RESERVE(9));
#endif
err=mr_mip->ERNUM;
mirexit(_MIPPO_ );
if (err==MR_ERR_OUT_OF_MEMORY) return MR_P1363_OUT_OF_MEMORY;
if (err==MR_ERR_DIV_BY_ZERO) return MR_P1363_DIV_BY_ZERO;
if (err!=0) return -(1000+err);
return res;
}
P1363_API int DLVP_DSA(BOOL (*idle)(void),dl_domain *DOM,octet *W,octet *C,octet *D,octet *F)
{
miracl *mr_mip=mirsys(DOM->words,0);
big q,r,g,w,f,c,d,h2;
int err,res=0;
#ifndef MR_STATIC
char *mem;
#else
char mem[MR_BIG_RESERVE(8)];
memset(mem,0,MR_BIG_RESERVE(8));
#endif
if (mr_mip==NULL) return MR_P1363_OUT_OF_MEMORY;
mr_mip->ERCON=TRUE;
set_user_function(_MIPP_ idle);
#ifndef MR_STATIC
mem=memalloc(_MIPP_ 8);
if (mem==NULL) res=MR_P1363_OUT_OF_MEMORY;
#endif
if (res==0)
{
q=mirvar_mem(_MIPP_ mem, 0);
r=mirvar_mem(_MIPP_ mem, 1);
g=mirvar_mem(_MIPP_ mem, 2);
w=mirvar_mem(_MIPP_ mem, 3);
f=mirvar_mem(_MIPP_ mem, 4);
c=mirvar_mem(_MIPP_ mem, 5);
d=mirvar_mem(_MIPP_ mem, 6);
h2=mirvar_mem(_MIPP_ mem, 7);
OS2FEP(_MIPP_ &DOM->Q,q);
OS2FEP(_MIPP_ &DOM->R,r);
OS2FEP(_MIPP_ &DOM->G,g);
OS2FEP(_MIPP_ W,w);
OS2FEP(_MIPP_ C,c);
OS2FEP(_MIPP_ D,d);
OS2FEP(_MIPP_ F,f);
if (size(c)<1 || size(d)<1 || compare(c,r)>=0 || compare(d,r)>=0)
res=MR_P1363_INVALID;
}
if (res==0)
{
xgcd(_MIPP_ d,r,d,d,d);
mad(_MIPP_ f,d,f,r,r,f);
mad(_MIPP_ c,d,c,r,r,h2);
powmod2(_MIPP_ g,f,w,h2,q,d);
divide(_MIPP_ d,r,r);
if (compare(d,c)!=0) res=MR_P1363_INVALID;
}
#ifndef MR_STATIC
memkill(_MIPP_ mem,8);
#else
memset(mem,0,MR_BIG_RESERVE(8));
#endif
err=mr_mip->ERNUM;
mirexit(_MIPPO_ );
if (err==MR_ERR_OUT_OF_MEMORY) return MR_P1363_OUT_OF_MEMORY;
if (err==MR_ERR_DIV_BY_ZERO) return MR_P1363_DIV_BY_ZERO;
if (err!=0) return -(1000+err);
return res;
}
P1363_API int DLSP_DSA(BOOL (*idle)(void),dl_domain *DOM,csprng *RNG,octet *S,octet *F,octet *C,octet *D)
{
miracl *mr_mip=mirsys(DOM->words,0);
big q,r,g,s,f,c,d,u,v;
int err,res=0;
#ifndef MR_STATIC
char *mem;
#else
char mem[MR_BIG_RESERVE(9)];
memset(mem,0,MR_BIG_RESERVE(9));
#endif
if (mr_mip==NULL) return MR_P1363_OUT_OF_MEMORY;
mr_mip->ERCON=FALSE;
set_user_function(_MIPP_ idle);
#ifndef MR_STATIC
mem=memalloc(_MIPP_ 9);
if (mem==NULL) res=MR_P1363_OUT_OF_MEMORY;
#endif
if (res==0)
{
q=mirvar_mem(_MIPP_ mem, 0);
r=mirvar_mem(_MIPP_ mem, 1);
g=mirvar_mem(_MIPP_ mem, 2);
s=mirvar_mem(_MIPP_ mem, 3);
f=mirvar_mem(_MIPP_ mem, 4);
c=mirvar_mem(_MIPP_ mem, 5);
d=mirvar_mem(_MIPP_ mem, 6);
u=mirvar_mem(_MIPP_ mem, 7);
v=mirvar_mem(_MIPP_ mem, 8);
OS2FEP(_MIPP_ &DOM->Q,q);
OS2FEP(_MIPP_ &DOM->R,r);
OS2FEP(_MIPP_ &DOM->G,g);
OS2FEP(_MIPP_ S,s);
OS2FEP(_MIPP_ F,f);
do {
if (mr_mip->ERNUM) break;
strong_bigrand(_MIPP_ RNG,r,u);
if (DOM->PC.store==0)
powmod(_MIPP_ g,u,q,v);
else
pow_brick(_MIPP_ &DOM->PC,u,v);
copy(v,c);
divide(_MIPP_ c,r,r);
if (size(c)==0) continue;
xgcd(_MIPP_ u,r,u,u,u);
mad(_MIPP_ s,c,f,r,r,d);
mad(_MIPP_ u,d,u,r,r,d);
} while (size(d)==0);
if (res==0)
{
convert_big_octet(_MIPP_ c,C);
convert_big_octet(_MIPP_ d,D);
}
}
#ifndef MR_STATIC
memkill(_MIPP_ mem,9);
#else
memset(mem,0,MR_BIG_RESERVE(9));
#endif
err=mr_mip->ERNUM;
mirexit(_MIPPO_ );
if (err==MR_ERR_OUT_OF_MEMORY) return MR_P1363_OUT_OF_MEMORY;
if (err==MR_ERR_DIV_BY_ZERO) return MR_P1363_DIV_BY_ZERO;
if (err!=0) return -(1000+err);
return res;
}
P1363_API int DLPSP_NR2PV(BOOL (*idle)(void),dl_domain *DOM,csprng *RNG,octet *U,octet *V)
{
miracl *mr_mip=mirsys(DOM->words,0);
big q,r,g,u,v;
int err,res=0;
#ifndef MR_STATIC
char *mem;
#else
char mem[MR_BIG_RESERVE(5)];
memset(mem,0,MR_BIG_RESERVE(5));
#endif
if (mr_mip==NULL) return MR_P1363_OUT_OF_MEMORY;
mr_mip->ERCON=FALSE;
set_user_function(_MIPP_ idle);
#ifndef MR_STATIC
mem=memalloc(_MIPP_ 5);
if (mem==NULL) res=MR_P1363_OUT_OF_MEMORY;
#endif
if (res==0)
{
q=mirvar_mem(_MIPP_ mem, 0);
r=mirvar_mem(_MIPP_ mem, 1);
g=mirvar_mem(_MIPP_ mem, 2);
u=mirvar_mem(_MIPP_ mem, 3);
v=mirvar_mem(_MIPP_ mem, 4);
OS2FEP(_MIPP_ &DOM->Q,q);
OS2FEP(_MIPP_ &DOM->R,r);
OS2FEP(_MIPP_ &DOM->G,g);
strong_bigrand(_MIPP_ RNG,r,u);
if (DOM->PC.store==0)
powmod(_MIPP_ g,u,q,v);
else
pow_brick(_MIPP_ &DOM->PC,u,v);
convert_big_octet(_MIPP_ u,U);
FE2OSP(_MIPP_ v,DOM->fsize,V);
}
#ifndef MR_STATIC
memkill(_MIPP_ mem,5);
#else
memset(mem,0,MR_BIG_RESERVE(5));
#endif
err=mr_mip->
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -