首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

miracl库中测试代码的兑现

2013-03-22 
miracl库中测试代码的实现miracl库中,source/ibe里有一个:sk_3.cpp文件,这个文件貌似可以单独运行,可是,如

miracl库中测试代码的实现
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;
 }
 
[解决办法]
你只需要包含 #include "miracl.h"就可以了,设置好lib路径。

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

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

热点排行