亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ibe_encx.cpp

?? 比較新的功能強大的rsa算法源代碼,方便使用.
?? CPP
字號:
/*
   Boneh & Franklin's Identity Based Encryption 

   y^2=x^3+x version
   Using this curve has certain advantages. In particular the "denominator"
   that arises in the context of Miller's algorithm is in Fp, and hence 
   "disappears" with the final exponentiation. So it can be left out 
   altogther. 
  
   Encryption phase
  
   Generates a random AES session key, and uses it to encrypt a file.
   Outputs ciphertext <filename>.ibe.

   The session key is IBE encrypted, and written to <filename>.key

   NOTE: Uses Tate Pairing only
   NOTE: New fast Tate pairing algorithm

   Compile as 
   cl /O2 /GX /DZZNS=16 ibe_encx.cpp zzn2.cpp big.cpp zzn.cpp ecn.cpp miracl.lib
   where miracl is built using the Comba method.

 */

#include <iostream>
#include <fstream>
#include <cstring>
#include "ecn.h"
#include "zzn.h"
#include "ebrick.h"
#include "zzn2.h"

using namespace std;

#define HASH_LEN 20

#define PBITS 512
#define QBITS 160

// Using SHA-1 as basic hash algorithm

//
// Define one or the other of these
//
// Which is faster depends on the I/M ratio - See imratio.c
// Roughly if I/M ratio > 16 use PROJECTIVE, otherwise use AFFINE
//

// #define AFFINE
#define PROJECTIVE

//
// Tate Pairing Code
//
// Extract ECn point in internal ZZn format
//

void extract(ECn& A,ZZn& x,ZZn& y)
{ 
    x=(A.get_point())->X;
    y=(A.get_point())->Y;
}

void extract(ECn& A,ZZn& x,ZZn& y,ZZn& z)
{ 
    big t;
    x=(A.get_point())->X;
    y=(A.get_point())->Y;
    t=(A.get_point())->Z;
    if (A.get_status()!=MR_EPOINT_GENERAL) z=1;
    else                                   z=t;
}

//
// Line from A to destination C. Let A=(x,y)
// Line Y-slope.X-c=0, through A, so intercept c=y-slope.x
// Line Y-slope.X-y+slope.x = (Y-y)-slope.(X-x) = 0
// Now evaluate at Q -> return (Qy-y)-slope.(Qx-x)
//

ZZn2 line(ECn& A,ECn& C,ZZn& slope,ZZn& Qx,ZZn2& Qy)
{ 
    ZZn2 w=Qy;
    ZZn x,y,z,t,m=Qx;
#ifdef AFFINE
    extract(A,x,y);
    w-=y; m-=x; m*=slope; w-=m;  // 1 ZZn mul
#endif
#ifdef PROJECTIVE
    extract(A,x,y,z);               
    x*=z; t=z; z*=z; z*=t;       // 9 ZZn muls   
    m*=z; m-=x; m*=slope;
    w*=z; w-=y; 
    extract(C,x,y,z);
    w*=z; w-=m;
#endif
    return w;
}

//
// Add A=A+B  (or A=A+A) 
//
// AFFINE doubling     - 8 ZZn muls, plus 1 inversion
// AFFINE adding       - 7 ZZn muls, plus 1 inversion
//
// PROJECTIVE doubling - 20 ZZn muls
// PROJECTIVE adding   - 28 ZZn muls
//

void g(ECn& A,ECn& B,ZZn& Qx,ZZn2& Qy,ZZn2& num)
{
    int type;
    ZZn  lam;
    ZZn2 u;
    ECn P=A;
    big ptr;

    if (num.iszero()) return;
    type=A.add(B,&ptr);
    if (!type) return;
    lam=ptr;

    if (A.iszero()) return; 
    
    u=line(P,A,lam,Qx,Qy);

    num*=u;                // 3 ZZn muls  
}

//
// Tate Pairing 
//
// Special optimized and deterministic version of Tate Pairing algorithm 
// P and Q(x,y) linearly independent, that is P!=r.Q for any r, and odd order q.
// If P & Q are linearly dependent it might fail, but this will be detected.
//
// P & Q(x,y) are both points of order q. 
// Note that P is a point on the curve over Fp, Q(x,y) a point on the 
// quadratic extension field Fp^2
//

BOOL fast_tate_pairing(ECn& P,ZZn& Qx,ZZn2& Qy,Big& q,ZZn2& res)
{ 
    int i;
    Big p;
    ECn A;

    res=1; 

// q.P = 2^17*(2^142.P +P) + P

    A=P;    // reset A
    for (i=0;i<142;i++)
    {
        res*=res;          
        g(A,A,Qx,Qy,res);            // 10 ZZn muls + 1 inverse 
    }                                // 22 ZZn muls (Projective)
    g(A,P,Qx,Qy,res);                // 9  ZZn muls + 1 inverse 
    for (i=0;i<17;i++)               // 28 ZZn muls (Projective)
    {
        res*=res;          
        g(A,A,Qx,Qy,res);            // 10 ZZn muls + 1 inverse 
    }                                // 22 ZZn muls (Projective)
    g(A,P,Qx,Qy,res);                // 9 ZZn muls + 1 inverse 

    if (res.iszero()) return FALSE;
    if (!A.iszero())  return FALSE;
                                // 28 ZZn muls (Projective)
    p=get_modulus();         // get p
    res= pow(res,(p+1)/q);   // raise to power of (p^2-1)/q
    res=conj(res)/res;
    if (res.isunity()) return FALSE;

    return TRUE;   
}

//
// ecap(.) function
//

BOOL ecap(ECn& P,ECn& Q,Big& order,ZZn2& res)
{
    ZZn  Qx;
    ZZn2 Qy;
    Big xx,yy;        /* apply distortion map x,y -> -x,iy */

    Q.get(xx,yy);     /* Q*=[(-1,0),(0,1)] */
    Qx=-xx;
    Qy.set((Big)0,yy);

    return fast_tate_pairing(P,Qx,Qy,order,res);
}

//
// Hash functions
// 

Big H1(char *string)
{ // Hash a zero-terminated string to a number < modulus
    Big h,p;
    char s[HASH_LEN];
    int i,j; 
    sha sh;

    shs_init(&sh);

    for (i=0;;i++)
    {
        if (string[i]==0) break;
        shs_process(&sh,string[i]);
    }
    shs_hash(&sh,s);
    p=get_modulus();
    h=1; j=0; i=1;
    forever
    {
        h*=256; 
        if (j==HASH_LEN)  {h+=i++; j=0;}
        else         h+=s[j++];
        if (h>=p) break;
    }
    h%=p;
    return h;
}

int H2(ZZn2 x,char *s)
{ // Hash an Fp2 to an n-byte string s[.]. Return n
    sha sh;
    Big a,b;
    int m;

    shs_init(&sh);
    x.get(a,b);
    while (a>0)
    {
        m=a%256;
        shs_process(&sh,m);
        a/=256;
    }
    while (b>0)
    {
        m=b%256;
        shs_process(&sh,m);
        b/=256;
    }
    shs_hash(&sh,s);

    return HASH_LEN;
}

Big H3(char *x1,char *x2)
{
    sha sh;
    char h[HASH_LEN];
    Big a;
    int i;

    shs_init(&sh);
    for (i=0;i<HASH_LEN;i++)
        shs_process(&sh,x1[i]);
    for (i=0;i<HASH_LEN;i++)
        shs_process(&sh,x2[i]);
    shs_hash(&sh,h);
    a=from_binary(HASH_LEN,h);
    return a;
}

void H4(char *x,char *y)
{ // hashes y=h(x)
    int i;
    sha sh;
    shs_init(&sh);
    for (i=0;i<HASH_LEN;i++)
        shs_process(&sh,x[i]);
    shs_hash(&sh,y);
}
   
//
// MapToPoint
//

ECn map_to_point(char *ID)
{
    ECn Q;
    Big x0=H1(ID);
 
    if (is_on_curve(x0)) Q.set(x0);
    else                 Q.set(-x0);

    return Q;
}

void strip(char *name)
{ /* strip off filename extension */
    int i;
    for (i=0;name[i]!='\0';i++)
    {
        if (name[i]!='.') continue;
        name[i]='\0';
        break;
    }
}

int main()
{
    miracl *mip=mirsys(16,0);   // thread-safe ready. (32,0) for 1024 bit p
    ifstream common("commonx.ibe");
    ifstream plaintext;
    ofstream key_file,ciphertext;
    ECn U,P,Ppub,Qid,infinity;
    ZZn2 gid,w;
    char key[HASH_LEN],pad[HASH_LEN],rho[HASH_LEN],V[HASH_LEN],W[HASH_LEN];
    char ifname[100],ofname[100],ch,iv[16];
    Big p,q,r,x,y,cof;
    int i,bits;
    long seed;
    aes a;

    cout << "Enter 9 digit random number seed  = ";
    cin >> seed;
    irand(seed);

// ENCRYPT

    common >> bits;
    mip->IOBASE=16;
    common >> p >> q;

    cof=(p+1)/q;

    common >> x >> y;
    EBrick B(x,y,(Big)1,(Big)0,p,8,QBITS);   // precomputation based on fixed P, 8-bit window

#ifdef AFFINE
    ecurve(1,0,p,MR_AFFINE);
#endif
#ifdef PROJECTIVE
    ecurve(1,0,p,MR_PROJECTIVE);
#endif

    P.set(x,y);

    common >> x >> y;
    Ppub.set(x,y);

    char id[1000];
    cout << "Enter your correspondents email address (lower case)" << endl;
    cin.get();
    cin.getline(id,1000);

    mip->IOBASE=10;
    Qid=map_to_point(id);

// This can be done before we know the message to encrypt

    if (!ecap(Ppub,Qid,q,gid))   // ** change argument order
    {                            // Qid must be second
        cout << "Bad Parameters" << endl;
        exit(0);
    } 

//
// prepare to encrypt file with random session key
//

    for (i=0;i<HASH_LEN;i++) key[i]=(char)brand();
    for (i=0;i<16;i++) iv[i]=i; // set CFB IV
    aes_init(&a,MR_CFB1,16,key,iv);
    
// figure out where input is coming from

    cout << "Text file to be encoded = " ;
    cin >> ifname;

   /* set up input file */
    strcpy(ofname,ifname);
    strip(ofname);
    strcat(ofname,".ibe");
    plaintext.open(ifname,ios::in); 
    if (!plaintext)
    {
        cout << "Unable to open file " << ifname << "\n";
        return 0;
    }
    cout << "encoding message\n";
    ciphertext.open(ofname,ios::binary|ios::out);

// now encrypt the plaintext file

    forever
    { // encrypt input ..
        plaintext.get(ch);
        if (plaintext.eof()) break;
        aes_encrypt(&a,&ch);
        ciphertext << ch;
    }

    aes_end(&a);

//
// Now IBE encrypt the session key
//

    for (i=0;i<HASH_LEN;i++) rho[i]=(char)brand();

    r=H3(rho,key)%q;

    B.mul(r,x,y);       // U=r*P

    U.set(x,y);
  
    w=pow(gid,r);      

    H2(w,pad);
    
    for (i=0;i<HASH_LEN;i++) 
    {
        V[i]=rho[i]^pad[i];
        pad[i]=0;
    }
    H4(rho,rho);
    for (i=0;i<HASH_LEN;i++) 
    {
        W[i]=key[i]^rho[i];
        rho[i]=0;
    }

    strip(ofname);
    strcat(ofname,".key");
    mip->IOBASE=16;
    key_file.open(ofname);
    U.get(x,y);

    key_file << x << endl;
    key_file << y << endl;
    x=from_binary(HASH_LEN,V);      // output bit strings in handy Big format
    key_file << x << endl;
    x=from_binary(HASH_LEN,W);
    key_file << x << endl;

    return 0;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
最近日韩中文字幕| 石原莉奈在线亚洲二区| 亚洲国产视频一区| 国产69精品久久久久777| 欧美丝袜自拍制服另类| 久久综合中文字幕| 日韩国产欧美在线视频| 91亚洲精华国产精华精华液| 精品国产人成亚洲区| 亚洲自拍与偷拍| 91在线视频网址| 欧美国产日韩一二三区| 美女精品自拍一二三四| 欧美体内she精高潮| 椎名由奈av一区二区三区| 国产精品系列在线观看| 欧美夫妻性生活| 一区二区三区小说| 91在线一区二区| 国产精品久久久99| 成人免费毛片a| 国产亚洲人成网站| 国产一区二区精品久久91| 6080yy午夜一二三区久久| 一区二区高清免费观看影视大全 | 夜夜精品视频一区二区| 国产成人精品三级| 久久综合久色欧美综合狠狠| 免播放器亚洲一区| 91精品国产综合久久久久久久| 亚洲成人中文在线| 欧美专区日韩专区| 日韩美女主播在线视频一区二区三区| 亚洲va国产天堂va久久en| 精品视频123区在线观看| 亚洲午夜激情网页| 717成人午夜免费福利电影| 亚洲国产精品久久一线不卡| 欧美日韩一区二区电影| 亚洲第一久久影院| 555www色欧美视频| 麻豆成人综合网| 久久综合九色综合97婷婷| 国产美女在线观看一区| 国产日本亚洲高清| av成人免费在线| 亚洲午夜在线观看视频在线| 欧洲精品一区二区| 日韩精品电影在线观看| 精品国产一区二区国模嫣然| 国产激情精品久久久第一区二区 | 91国产丝袜在线播放| 亚洲乱码国产乱码精品精98午夜 | 亚洲欧美激情小说另类| 91久久国产最好的精华液| 亚洲va欧美va人人爽| 精品少妇一区二区三区日产乱码| 国产麻豆视频一区| 亚洲欧美日韩一区二区| 欧美丰满少妇xxxbbb| 国产一区二区三区av电影| 亚洲欧美二区三区| 91精品国产欧美一区二区18| 国产大陆精品国产| 亚洲国产成人精品视频| 精品国产sm最大网站| 91麻豆.com| 免费在线观看一区二区三区| 欧美国产禁国产网站cc| 欧美日韩成人激情| 懂色av一区二区夜夜嗨| 亚洲va中文字幕| 国产色一区二区| 欧美美女一区二区在线观看| 国产精品香蕉一区二区三区| 亚洲福利一二三区| 欧美国产精品v| 久久这里只有精品首页| 97精品视频在线观看自产线路二| 视频一区二区三区在线| ㊣最新国产の精品bt伙计久久| 欧美一区二区在线不卡| 91欧美一区二区| 韩国女主播成人在线| 图片区小说区国产精品视频| 国产精品免费免费| 精品久久久久久最新网址| 在线日韩一区二区| 成人黄色在线视频| 国产一区二区精品在线观看| 亚洲成人激情av| 依依成人精品视频| 日本一区二区视频在线| 精品免费国产二区三区| 欧美精品一二三四| 在线精品视频小说1| 成人a免费在线看| 国产一区不卡在线| 九九九久久久精品| 人人爽香蕉精品| 亚洲成人动漫精品| 亚洲国产视频一区二区| 亚洲啪啪综合av一区二区三区| 久久先锋资源网| 日韩免费高清电影| 日韩欧美亚洲一区二区| 91精品国产综合久久久久久| 欧美日韩精品一区二区三区蜜桃| 色噜噜狠狠色综合中国| 91在线观看地址| 色综合色狠狠综合色| 波多野结衣一区二区三区| 国产91高潮流白浆在线麻豆| 国产91对白在线观看九色| 国产成人丝袜美腿| 国产a久久麻豆| 99久久99久久精品免费观看| av成人老司机| 色综合视频一区二区三区高清| 91蜜桃传媒精品久久久一区二区| 不卡的av中国片| 91在线丨porny丨国产| 91视频观看免费| 欧美日韩一区二区在线观看| 欧美性高清videossexo| 欧美久久久久久久久中文字幕| 精品视频一区二区三区免费| 欧美日韩国产不卡| 日韩午夜电影在线观看| 精品国产麻豆免费人成网站| 久久免费国产精品| ㊣最新国产の精品bt伙计久久| 亚洲美女区一区| 亚洲va韩国va欧美va精品| 蜜臀av亚洲一区中文字幕| 国产一区二区三区久久悠悠色av| 国产乱码一区二区三区| caoporn国产精品| 在线观看免费成人| 欧美电视剧在线观看完整版| 久久九九影视网| 亚洲视频狠狠干| 天堂成人免费av电影一区| 精品在线免费视频| 99热在这里有精品免费| 欧美美女一区二区在线观看| 久久人人97超碰com| 亚洲天堂福利av| 麻豆精品一二三| av一区二区三区| 91麻豆精品国产91久久久久久 | 亚洲一区二区视频在线观看| 玖玖九九国产精品| 91亚洲精品一区二区乱码| 欧美巨大另类极品videosbest | 欧美激情一区二区三区四区 | 欧美日韩一级黄| 欧美精品一区二区久久婷婷| 亚洲天堂av一区| 麻豆精品一区二区综合av| 99精品国产热久久91蜜凸| 欧美一级生活片| ...中文天堂在线一区| 久久99精品一区二区三区三区| 97精品电影院| 久久久久久久久蜜桃| 亚洲电影视频在线| 成人精品免费网站| 欧美一区二区三区视频| 亚洲区小说区图片区qvod| 韩国女主播一区二区三区| 欧美女孩性生活视频| 国产精品美女久久久久久| 秋霞成人午夜伦在线观看| 一本一本大道香蕉久在线精品| 精品国产乱码久久久久久久| 亚洲一二三四区| 99久久伊人久久99| 精品国产百合女同互慰| 亚洲成人精品一区二区| 成人久久视频在线观看| 欧美成人性战久久| 亚洲成人黄色影院| 色94色欧美sute亚洲线路一久 | 久久久综合激的五月天| 日本午夜精品视频在线观看| 日本二三区不卡| 亚洲久草在线视频| 成人av网站大全| 国产精品素人视频| 国产成人综合亚洲网站| 精品国产乱码久久久久久浪潮| 欧美aa在线视频| 日韩欧美国产精品一区| 视频精品一区二区| 欧美一区二区三区免费观看视频| 亚洲午夜国产一区99re久久| 色婷婷久久一区二区三区麻豆| 国产精品福利影院| 99热这里都是精品|