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

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

?? ibe_enc.cpp

?? 比較新的功能強大的rsa算法源代碼,方便使用.
?? CPP
字號:
/*
   Boneh & Franklin's Identity Based Encryption
  
   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_dec.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 32

#define PBITS 512
#define QBITS 160

// Using SHA-256 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

// Define this to use this idea ftp://ftp.computing.dcu.ie/pub/resources/crypto/short.pdf
// which enables denominator elimination
#define SCOTT

//
// 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,ZZn2& Qx,ZZn2& Qy)
{ 
    ZZn2 n=Qx,w=Qy;
    ZZn x,y,z,t;
#ifdef AFFINE
    extract(A,x,y);
    n-=x; n*=slope;            // 2 ZZn muls
    w-=y; n-=w;
#endif
#ifdef PROJECTIVE
    extract(A,x,y,z);
    x*=z; t=z; z*=z; z*=t;          
    n*=z; n-=x;                // 9 ZZn muls
    w*=z; w-=y; 
    extract(C,x,y,z);
    w*=z; n*=slope; n-=w;                     
#endif
    return n;
}

#ifndef SCOTT

//
// Vertical line through point A
//

ZZn2 vertical(ECn& A,ZZn2& Qx)
{
    ZZn2 n=Qx;
    ZZn x,y,z;
#ifdef AFFINE
    extract(A,x,y);
    n-=x;
#endif
#ifdef PROJECTIVE
    extract(A,x,y,z);
    z*=z;                    
    n*=z; n-=x;                // 3 ZZn muls
#endif
    return n;
}

#endif

//
// Add A=A+B  (or A=A+A) 
// Bump up num and denom
//
// AFFINE doubling     - 12 ZZn muls, plus 1 inversion
// AFFINE adding       - 11 ZZn muls, plus 1 inversion
//
// PROJECTIVE doubling - 26 ZZn muls
// PROJECTIVE adding   - 34 ZZn muls
//


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

// Evaluate line from A
    type=A.add(B,&ptr);

#ifndef SCOTT
    if (!type)   { u=vertical(P,Qx); d=1; }
    else
    {
#endif
        lam=ptr;
        u=line(P,A,lam,Qx,Qy);
#ifndef SCOTT
        d=vertical(A,Qx);
    }

    num*=(u*conj(d));    // 6 ZZn muls  
#else
// denominator elimination!
    num*=u;
#endif
}

//
// Tate Pairing 
//

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


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

    res=1;
    A=P;    // reset A

#ifdef SCOTT
// we can avoid last iteration..
    n=q-1;
#else
    n=q;
#endif
    nb=bits(n);

    for (i=nb-2;i>=0;i--)
    {
        res*=res;         
        g(A,A,Qx,Qy,res); 
        if (bit(n,i))
            g(A,P,Qx,Qy,res);       
    }

#ifdef SCOTT
    if (A!=-P || res.iszero()) return FALSE;
#else
    if (!A.iszero()) return FALSE;
#endif

    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 - apply distortion map
//
// Qx is in ZZn if SCOTT is defined. Qy is in ZZn if SCOTT is not defined. 
// This can be exploited for some further optimisations. 
//

BOOL ecap(ECn& P,ECn& Q,Big& order,ZZn2& cube,ZZn2& res)
{
     ZZn2 Qx,Qy;
     Big xx,yy;
#ifdef SCOTT
     ZZn a,b,x,y,ib,w,t1,y2,ib2;
#else
     ZZn2 lambda,ox;
#endif
     Q.get(xx,yy);
     Qx=(ZZn)xx*cube;
     Qy=(ZZn)yy;

#ifndef SCOTT
// point doubling
     lambda=(3*Qx*Qx)/(Qy+Qy);
     ox=Qx;
     Qx=lambda*lambda-(Qx+Qx);
     Qy=lambda*(ox-Qx)-Qy;
#else
// explicit point subtraction
     Qx.get(a,b);
     y=yy;
     ib=(ZZn)1/b;

     t1=a*b*b;
     y2=y*y;
     ib2=ib*ib;
     w=y2+2*t1;
     x=-w*ib2;
     y=-y*(w+t1)*(ib2*ib);
     Qx.set(x); Qy.set((ZZn)0,y);

#endif

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


//
// 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; 
    sha256 sh;

    shs256_init(&sh);

    for (i=0;;i++)
    {
        if (string[i]==0) break;
        shs256_process(&sh,string[i]);
    }
    shs256_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
    sha256 sh;
    Big a,b;
    int m;

    shs256_init(&sh);
    x.get(a,b);

    while (a>0)
    {
        m=a%256;
        shs256_process(&sh,m);
        a/=256;
    }
    while (b>0)
    {
        m=b%256;
        shs256_process(&sh,m);
        b/=256;
    }
    shs256_hash(&sh,s);

    return HASH_LEN;
}

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

    shs256_init(&sh);
    for (i=0;i<HASH_LEN;i++)
        shs256_process(&sh,x1[i]);
    for (i=0;i<HASH_LEN;i++)
        shs256_process(&sh,x2[i]);
    shs256_hash(&sh,h);
    a=from_binary(HASH_LEN,h);
    return a;
}

void H4(char *x,char *y)
{ // hashes y=h(x)
    int i;
    sha256 sh;
    shs256_init(&sh);
    for (i=0;i<HASH_LEN;i++)
        shs256_process(&sh,x[i]);
    shs256_hash(&sh,y);
}
   
//
// Given y, get x=(y^2-1)^(1/3) mod p (from curve equation)
//

Big getx(Big y)
{
    Big p=get_modulus();
    Big t=modmult(y+1,y-1,p);   // avoids overflow
    return pow(t,(2*p-1)/3,p);
}
 
//
// MapToPoint
//

ECn map_to_point(char *ID)
{
    ECn Q;
    Big x0,y0=H1(ID);
 
    x0=getx(y0);

    Q.set(x0,y0);

    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("common.ibe");
    ifstream plaintext;
    ofstream key_file,ciphertext;
    ECn U,P,Ppub,Qid,infinity;
    ZZn2 gid,cube,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)0,(Big)1,p,8,QBITS);   // precomputation based on fixed P, 8-bit window

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

    P.set(x,y);

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

    common >> x >> y;
    cube.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,cube,gid))      // ** swap 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();
//cout << "rho= " << rho << endl;
//cout << "key= " << key << endl;
    r=H3(rho,key)%q;

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

    w=pow(gid,r);         

//cout << "r= " << r << endl;
//cout << "w= " << w << endl;
    
    H2(w,pad);
//cout << "pad1= " << pad << endl;    
    for (i=0;i<HASH_LEN;i++) 
    {
        V[i]=rho[i]^pad[i];
        pad[i]=0;
    }

//cout << "rho= " << rho << endl;

    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 << 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一区二区三区免费野_久草精品视频
国产精品久久免费看| 欧美不卡视频一区| 久久99热这里只有精品| 国产在线一区二区综合免费视频| 91精品在线免费| 男女男精品视频| 欧美成人a视频| 国产精品影视天天线| 国产欧美1区2区3区| 99国产精品视频免费观看| 中文字幕人成不卡一区| 欧美在线一二三四区| 亚洲va国产va欧美va观看| 欧美一级欧美三级在线观看| 精品在线一区二区| 国产精品免费久久久久| 色婷婷综合五月| 日韩中文字幕av电影| 欧美va亚洲va香蕉在线| 成人看片黄a免费看在线| 夜夜夜精品看看| 日韩免费视频一区二区| 成人一道本在线| 亚洲成人一二三| 国产一区二区三区久久久| 欧美日韩一卡二卡三卡| 午夜视频一区二区三区| 欧美一区二区三区白人| 国产美女视频一区| 一区二区欧美在线观看| 日韩三级免费观看| 99久久精品免费精品国产| 午夜欧美一区二区三区在线播放| 精品国产91洋老外米糕| bt7086福利一区国产| 青青草精品视频| 中文字幕不卡在线观看| 欧美日韩久久久一区| 国产精品小仙女| 亚洲午夜在线观看视频在线| 精品99一区二区三区| 色呦呦网站一区| 国产精品一区二区在线观看不卡| 一区二区三区中文字幕| 久久久久久免费| 91.com在线观看| 波多野结衣91| 精品一区二区三区免费毛片爱 | 99re8在线精品视频免费播放| 亚洲一区欧美一区| 国产欧美一区二区精品性色超碰| 欧美日韩精品一区二区三区四区| 丁香一区二区三区| 奇米在线7777在线精品| 一区2区3区在线看| 国产精品美女www爽爽爽| 日韩欧美www| 欧美乱熟臀69xxxxxx| 99热99精品| 国产成人免费高清| 久久99久久久欧美国产| 午夜电影久久久| 亚洲一区二区三区中文字幕| 国产精品色呦呦| 久久一二三国产| 日韩美女主播在线视频一区二区三区| 欧美自拍偷拍一区| 国产精品毛片无遮挡高清| 精品日韩欧美在线| 91麻豆精品91久久久久久清纯| 91麻豆国产在线观看| 成人h动漫精品一区二区| 狠狠色综合播放一区二区| 免费观看久久久4p| 日韩福利视频导航| 日韩电影在线免费| 日韩精品电影在线观看| 婷婷丁香激情综合| 亚洲bdsm女犯bdsm网站| 午夜在线电影亚洲一区| 日韩国产一二三区| 日韩av一区二区三区四区| 秋霞午夜av一区二区三区| 欧美bbbbb| 激情成人午夜视频| 国产一区二区三区日韩| 国产成人av福利| 成人av电影观看| 91色乱码一区二区三区| 91国在线观看| 久久久青草青青国产亚洲免观| 亚洲国产成人av| 欧美日韩国产色站一区二区三区| 国产精品亚洲综合一区在线观看| 国产原创一区二区三区| 国产福利精品一区| 99久久精品国产观看| 91成人免费在线| 欧美精品九九99久久| 精品国产欧美一区二区| 国产亚洲一区字幕| 亚洲日本在线a| 日韩专区欧美专区| 激情五月婷婷综合| av不卡免费在线观看| 欧美日韩精品三区| www亚洲一区| 亚洲美腿欧美偷拍| 毛片av一区二区三区| 成人美女视频在线观看| 欧美性色黄大片| 精品乱人伦一区二区三区| 日本一区二区成人在线| 亚洲精品免费看| 久久99久久99| 99久久久精品| 日韩欧美国产精品| 1024亚洲合集| 美国精品在线观看| 色综合激情五月| 欧美xxxxx牲另类人与| 国产精品成人免费| 另类小说综合欧美亚洲| 91网页版在线| 日韩欧美卡一卡二| 一区二区三区资源| 国产真实精品久久二三区| 91成人免费在线视频| 久久精品视频免费| 香蕉加勒比综合久久| 成人午夜看片网址| 日韩西西人体444www| 自拍偷拍国产亚洲| 国产乱码精品一品二品| 欧美视频一区二区三区| 国产嫩草影院久久久久| 免费观看91视频大全| 色哟哟国产精品免费观看| www成人在线观看| 午夜精品久久久| 99久久久久久| 国产片一区二区| 久久国产精品99精品国产| 欧美三级一区二区| 国产精品久久久久久久久免费桃花| 青娱乐精品视频在线| 欧美色综合天天久久综合精品| 国产精品每日更新在线播放网址| 久久精品国产久精国产| 欧美人xxxx| 亚洲夂夂婷婷色拍ww47| av成人老司机| 欧美韩国一区二区| 国产自产v一区二区三区c| 91精品国产综合久久精品性色| 亚洲精品视频免费看| 成人免费视频免费观看| 久久久久久日产精品| 欧美伦理影视网| 高清不卡一二三区| 亚洲色图丝袜美腿| 欧美精品在线观看播放| 国产精品一区三区| 欧美日本不卡视频| 欧美三级在线视频| 亚洲在线视频免费观看| 91丨九色丨黑人外教| 国产精品国产三级国产三级人妇| 国产成人在线视频免费播放| 久久综合狠狠综合| 激情小说亚洲一区| 久久免费偷拍视频| 国产精品亚洲第一| 中文一区一区三区高中清不卡| 国产福利一区二区三区视频| 久久久欧美精品sm网站| 国产精品原创巨作av| 欧美激情综合五月色丁香| 成人午夜精品在线| 亚洲人成网站在线| 欧美亚洲综合另类| 日韩精品成人一区二区三区| 欧美久久一二三四区| 奇米影视在线99精品| 久久中文字幕电影| 成人高清视频在线观看| 久久久一区二区三区捆绑**| 久久午夜免费电影| 偷拍自拍另类欧美| 成人精品视频网站| 亚洲视频一区二区免费在线观看| 不卡在线观看av| 亚洲国产欧美在线人成| 欧美日韩国产片| 久久电影网电视剧免费观看| 久久久国产一区二区三区四区小说| 国产成人午夜高潮毛片| 亚洲欧美日韩成人高清在线一区| 在线免费av一区| 久久精品二区亚洲w码|