miracl库中测试代码的实现

cdqn2007 2012-09-07 08:09:23
miracl库中,source/ibe里有一个:sk_3.cpp文件,这个文件貌似可以单独运行,可是,如果我把它直接添加到一个新建的工程中,我把用到的文件都导入进来了,又提示很多错误,该怎么解决呢?(我已经在工程中添加了miracl的静态链接库,等文件)

下面附上sk_3.cpp文件的源代码,和miracl的下载地址给大家,请帮忙看一下吧,非常感谢!!!

miracl下载地址:http://www.shamus.ie/uploads/File/miracl3.zip

sk_3.cpp源文件:

/*
Sakai & Kasahara IBE key establishment
using type 3 pairing. See P1363.3

Compile with modules as specified below

For MR_PAIRING_CP curve
cl /O2 /GX sk_3.cpp cp_pair.cpp zzn2.cpp big.cpp zzn.cpp ecn.cpp miracl.lib

For MR_PAIRING_MNT curve
cl /O2 /GX sk_3.cpp mnt_pair.cpp zzn6a.cpp ecn3.cpp zzn3.cpp zzn2.cpp big.cpp zzn.cpp ecn.cpp miracl.lib

For MR_PAIRING_BN curve
cl /O2 /GX sk_3.cpp bn_pair.cpp zzn12a.cpp ecn2.cpp zzn4.cpp zzn2.cpp big.cpp zzn.cpp ecn.cpp miracl.lib

For MR_PAIRING_KSS curve
cl /O2 /GX sk_3.cpp kss_pair.cpp zzn18.cpp zzn6.cpp ecn3.cpp zzn3.cpp big.cpp zzn.cpp ecn.cpp miracl.lib

For MR_PAIRING_BLS curve
cl /O2 /GX sk_3.cpp bls_pair.cpp zzn24.cpp zzn8.cpp zzn4.cpp zzn2.cpp ecn4.cpp big.cpp zzn.cpp ecn.cpp miracl.lib

Very Simple Test program
*/

#include <iostream>
#include <ctime>

//********* choose just one of these pairs **********
//#define MR_PAIRING_CP // AES-80 security
//#define AES_SECURITY 80

//#define MR_PAIRING_MNT // AES-80 security
//#define AES_SECURITY 80

#define MR_PAIRING_BN // AES-128 or AES-192 security
#define AES_SECURITY 128
//#define AES_SECURITY 192

//#define MR_PAIRING_KSS // AES-192 security
//#define AES_SECURITY 192

//#define MR_PAIRING_BLS // AES-256 security
//#define AES_SECURITY 256
//*********************************************

#include "pairing_3.h"

int main()
{
PFC pfc(AES_SECURITY); // initialise pairing-friendly curve

Big q=pfc.order();

Big z,b,SSV,r,H,t;
G1 P,Z,R;
G2 Q,KB;
GT g,w;
time_t seed;

time(&seed);
irand((long)seed);

// setup
pfc.random(P);
pfc.random(Q);
g=pfc.pairing(Q,P);
pfc.precomp_for_power(g);

pfc.random(z);
pfc.precomp_for_mult(P);

Z=pfc.mult(P,z);
pfc.precomp_for_mult(Q);

// extract private key for Robert
b=pfc.hash_to_group((char *)"Robert");
KB=pfc.mult(Q,inverse(b+z,q));

// verify private key

pfc.precomp_for_pairing(KB); // Bob can precompute on his own private key
if (pfc.pairing(KB,pfc.mult(P,b)+Z)!=g)
{
cout << "Bad private key" << endl;
exit(0);
}

// Send session key to Bob
cout << "All set to go.." << endl;

pfc.rankey(SSV); // random AES key
pfc.start_hash();
pfc.add_to_hash(SSV);
pfc.add_to_hash(b);
r=pfc.finish_hash_to_group();

R=pfc.mult(pfc.mult(P,b)+Z,r);
t=pfc.hash_to_aes_key(pfc.power(g,r));
H=lxor(SSV,t);
cout << "Encryption key= " << SSV << endl;

// Receiver

t=pfc.hash_to_aes_key(pfc.pairing(KB,R));
SSV=lxor(H,t);
pfc.start_hash();
pfc.add_to_hash(SSV);
pfc.add_to_hash(b);
r=pfc.finish_hash_to_group();
if (pfc.mult(pfc.mult(P,b)+Z,r)==R)
cout << "Decryption key= " << SSV << endl;
else
cout << "The key is BAD - do not use!" << endl;

return 0;
}
...全文
488 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
bore2015 2015-04-19
  • 打赏
  • 举报
回复
啊,大神做出来了没,现在要对cpabe仿真,求指导
zhanshen2891 2012-09-07
  • 打赏
  • 举报
回复
你只需要包含 #include "miracl.h"就可以了,设置好lib路径。

如果不好用,就是你库没编译好。

你说的sk_3.cpp我没看见,当年我下载的可能里面没有这个?要不就是我只保留了库的源码。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧