资源简介
shamir门限方案就是一个机遇拉格朗日插值多项式的门限方案.此程序由VC的dialog实现
代码片段和文件信息
#include “StdAfx.h“
#include “shamir.h“
void Shamir::LoadPrimeFactor()
{
ifstream infile(“prime.txt“);
int i;
for(i=0;i<6542;i++)
infile>>primefactor[i];
infile.close();
}
Uint4 Shamir::ELFHash(const char *key)
{
Uint4 hg;
while(*key)
{
h =(h<<4) + *key++;
g = h & 0xF0000000L;
if(g) h^=g>>24;
h &=~g;
}
return h % MaxZp;
}
bool Shamir::IsPrime(Uint4 isp)
{
int i;
for(i=0;i<6542;i++)
{
if(isp==primefactor[i])
return 1;
if(isp % primefactor[i] == 0 )
return 0;
}
return 1;
}
Uint4 Shamir::CreatePrime(Uint4 KeyHash )//输入数字密钥生成素数p
{
while( (IsPrime(KeyHash)==0) )
{
KeyHash++;
}
p=KeyHash;
return KeyHash;
}
Uint4 Shamir::mexp(Uint4 bUint4 n)
{
int i=0j;
char binary[32];
while(n)
{
binary[i++]=n%2;
n=n/2;
}
Uint8 a=1btmp;
for(j=0;j {
if(binary[j]==1)
{
a=a*(Uint8)b;
a=a%p;
}
btmp=(Uint8)b*(Uint8)b;
b=btmp%p;
}
return a;
}
Uint4 Shamir::inv(Uint4 a)////计算在Zp中的乘法的逆元
{
return mexp(ap-2);
}
Uint4 Shamir::madd(Uint4 aUint4 b)
{
Uint8 addt = (Uint8)a+(Uint8)b;
Uint4 mod = addt % p;
return mod;
}
Uint4 Shamir::msub(Uint4 aUint4 b)
{
int8 subt=(int8)a-(int8)b;
while(subt<0)
{
subt+=(int8)p;
}
return (Uint4)subt%p;
}
Uint4 Shamir::mmul(Uint4 aUint4 b)
{
Uint8 mult= (Uint8)a*(Uint8)b;
Uint4 mod = mult % p;
return mod;
}
Uint4 Shamir::mdiv(Uint4 aUint4 b)
{
Uint8 divt = (Uint8)a*(Uint8)inv(b);
Uint4 mod = divt % p;
return mod;
}
void Shamir::CreatSubKey(Uint4 sUint4 nconst char *key
Uint4& KeyHashUint4 xi[]Uint4 yi[])
{
KeyHash = ELFHash(key);
CreatePrime( KeyHash );
Uint4 ijx;//si[5001];
Uint4 *si=new Uint4 [s+1];
for(i=1;i si[i]=(Uint4)rand()%p;//s[0]=KeyHash
//si[0]=KeyHash;
Uint4 addtmpmultmp;
for(i=1;i<=n;i++)//随机生成n个元素xi,计算出子密钥yi
{
x=(Uint4)rand()%p;
addtmp=KeyHash;
for(j=1;j {
multmp=mexp(xj);//multmp=x^j mod p
multmp=mmul(si[j]multmp);//multmp=si[j]*x^j mod p
addtmp=madd(addtmpmultmp);
}
xi[i]=x;
yi[i]=addtmp;
}
delete [] si;
}
Uint4 Shamir::RecoveryKey(Uint4 sUint4 xi[]Uint4 yi[])
{
Uint4 rjaddtmp=0multmp;
for(r=1;r<=s;r++)
{
multmp=1;
for(j=1; j<=s; j++)
{
if(j==r)continue;
multmp=mmul(multmpmdiv(xi[j]msub(xi[j]xi[r])));
}
addtmp=madd(addtmpmmul(yi[r]multmp));
}
return addtmp;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 25138 2010-05-22 22:40 Shamir门限方案\Debug\shamir.obj
文件 118900 2010-05-23 10:16 Shamir门限方案\Debug\Shamir门限方案.exe
文件 245608 2010-05-23 10:16 Shamir门限方案\Debug\Shamir门限方案.ilk
文件 27335 2010-05-23 09:23 Shamir门限方案\Debug\Shamir门限方案.obj
文件 5494560 2010-05-22 22:27 Shamir门限方案\Debug\Shamir门限方案.pch
文件 451584 2010-05-23 10:16 Shamir门限方案\Debug\Shamir门限方案.pdb
文件 3220 2010-05-23 09:24 Shamir门限方案\Debug\Shamir门限方案.res
文件 52463 2010-05-23 10:16 Shamir门限方案\Debug\Shamir门限方案Dlg.obj
文件 105966 2010-05-22 22:27 Shamir门限方案\Debug\StdAfx.obj
文件 263168 2010-05-23 10:16 Shamir门限方案\Debug\vc60.idb
文件 454656 2010-05-23 10:16 Shamir门限方案\Debug\vc60.pdb
文件 44368 2010-05-20 14:56 Shamir门限方案\prime.txt
文件 3699 2010-05-22 17:27 Shamir门限方案\ReadMe.txt
文件 1078 2010-05-22 17:27 Shamir门限方案\res\Shamir门限方案.ico
文件 406 2010-05-22 17:27 Shamir门限方案\res\Shamir门限方案.rc2
文件 1198 2010-05-23 00:18 Shamir门限方案\resource.h
文件 2528 2010-05-22 22:40 Shamir门限方案\shamir.cpp
文件 1413 2010-05-22 17:15 Shamir门限方案\shamir.h
文件 36844 2010-05-23 09:24 Shamir门限方案\Shamir门限方案.aps
文件 1857 2010-05-23 09:24 Shamir门限方案\Shamir门限方案.clw
文件 2087 2010-05-22 17:27 Shamir门限方案\Shamir门限方案.cpp
文件 4438 2010-05-23 00:51 Shamir门限方案\Shamir门限方案.dsp
文件 536 2010-05-22 17:27 Shamir门限方案\Shamir门限方案.dsw
文件 1348 2010-05-22 17:27 Shamir门限方案\Shamir门限方案.h
文件 58368 2010-05-23 10:27 Shamir门限方案\Shamir门限方案.ncb
文件 49664 2010-05-23 10:27 Shamir门限方案\Shamir门限方案.opt
文件 1235 2010-05-23 10:16 Shamir门限方案\Shamir门限方案.plg
文件 6741 2010-05-23 09:24 Shamir门限方案\Shamir门限方案.rc
文件 7486 2010-05-23 10:16 Shamir门限方案\Shamir门限方案Dlg.cpp
文件 1691 2010-05-23 09:22 Shamir门限方案\Shamir门限方案Dlg.h
............此处省略8个文件信息
评论
共有 条评论