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

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

?? sea_cpp.txt

?? 基于共開密鑰加密算法ECC加密的源程序
?? TXT
?? 第 1 頁 / 共 4 頁
字號:
                        u[m]=compose(u[m-1],u[m-1]);
                        lim=m;
                    }
                }

                if (iszero(C-XX)) 
                { // found splitting type
                    useful=TRUE;
                    break;
                }
            }
            cout << "\b\b\b" << flush;
            if (!useful) continue;

            cout << "NP mod " << lp << " = " << flush;

            int a,b,candidates,gx,gy,ord,qnr=2;
            BOOL gen;
            while (jac(qnr,lp)!=(-1)) qnr++;

//
// [4] Algorithm VII.4 - find a generator of F(lp^2)
//
            ord=lp*lp-1;
            gy=1;
            for (gx=1;gx<lp;gx++)
            {
                gen=TRUE;
                for (jj=2;jj<=ord/2;jj++)
                {
                    if (ord%jj!=0) continue;
                    powquad(lp,qnr,gx,gy,ord/jj,a,b);
                    if (a==1 && b==0) {gen=FALSE; break;}
                }
                if (gen) break;
            }
//
// (gx,gy) is a generator
//
            candidates=0;
            cout << setw(3);
            for (jj=1;jj<r;jj++)
            {
                if (jj>1 && igcd(jj,r)!=1) continue;
                powquad(lp,qnr,gx,gy,jj*ord/r,a,b);

                tau=((a+1)*k*(int)invers(2,lp))%lp;
                if (tau==0)
                {           // r must be 2 - I can make use of this!
                            // Its an Atkin prime, but only one possibility
                    candidates++;
                    cout << (p+1)%lp << flush;
                    if ((p+1)%lp==0)
                    {
                        cout << " ***" << endl;
                        if (search) escape=TRUE;
                    }
                    else cout << endl; 
                    good[nl]=lp;
                    t[nl]=tau;
                    nl++;
                    accum*=lp;  
                    break;
                }
                else if (jac(tau,lp)==1)
                {
                    candidates+=2;
                    tau=sqrmp(tau,lp);
                    tau=(2*tau)%lp;
                    if (candidates==phi(r))
                    { 
                         cout << (p+1-tau)%lp << " or " << (p+1+tau)%lp << endl;   
                         break;
                    }
                    else cout << (p+1-tau)%lp << "," << (p+1+tau)%lp << "," << flush;
                }  
            }
            if (escape) break;
            continue;  
        }

//
// Good Elkies prime - so use it!
//
// First solve quadratic for a root
//
        if (degree(G)==1)
        {
            discrim=0; 
            g=-G.coeff(0); // Elkies Prime, one root, (2 possibilites)   
        }
        else               // degree(G)==2
        {                  // Elkies Prime, two roots
            discrim=1;
            qb=G.coeff(1);
            qc=G.coeff(0); 
            g=sqrt(qb*qb-4*qc);
            g=(-qb-g)/2;   // pick either one
        }
        cout << "\b\b\bELK" << flush;
//
// Mueller's procedure for finding the atilde, btilde and p1
// parameters of the isogenous curve
// 3. page 111
// 4. page 131-133
// First we need partial differentials of bivariate Modular Polynomial
//

        dGx=diff_dx(MP);
        dGy=diff_dy(MP);
        dGxx=diff_dx(dGx);
        dGxy=diff_dx(dGy);
        dGyy=diff_dy(dGy);

        Eg=dGx.F(g,j);   // Evaluated at (g,j)
        Ej=dGy.F(g,j);
        Exy=dGxy.F(g,j);

        Dg=g*Eg;    
        Dj=j*Ej;

        deltal=delta*pow(g,12/is)/pow(el,12);

        if (Dj==0)
        {
            E4bl=E4b/(el*el);
            atilde=-3*pow(el,4)*E4bl;
            jl=pow(E4bl,3)/deltal;
            btilde=2*pow(el,6)*sqrt((jl-1728)*deltal);
            p1=0;
        }
        else
        {
            E2bs=(-12*E6b*Dj)/(s*E4b*Dg);

            gd=-(s/12)*E2bs*g;
            jd=-E4b*E4b*E6b/delta;
            E0b=E6b/(E4b*E2bs); 

            Dgd=gd*Eg+g*(gd*dGxx.F(g,j)+jd*Exy);
            Djd=jd*Ej+j*(jd*dGyy.F(g,j)+gd*Exy);  
   
            E0bd=((-s*Dgd)/12-E0b*Djd)/Dj;

            E4bl=(E4b-E2bs*(12*E0bd/E0b+6*E4b*E4b/E6b-4*E6b/E4b)+E2bs*E2bs)/(el*el);

            jl=pow(E4bl,3)/deltal;
            f=pow(el,is)/g; fd=s*E2bs*f/12;

            Dgs=dGx.F(f,jl);
            Djs=dGy.F(f,jl);

            jld=-fd*Dgs/(el*Djs);
            E6bl=-E4bl*jld/jl;

            atilde=-3*pow(el,4)*E4bl;
            btilde=-2*pow(el,6)*E6bl;
            p1=-el*E2bs/2;            
        }

//
// Find factor of Division Polynomial from atilde, btilde and p1 
// Here we follow 3. p 116
// Polynomials have been modified s.t x=z^2
//
// Note that all Polynomials can be reduced mod x^(d+1),
// where d=(lp-1)/2, using modxn() function
//

        cout << "\b\b\bFAC" << flush;
        ld=(lp-1)/2;
        ld1=(lp-3)/2;

        get_ck(ld1,A,B,cf);

        WP[1]=1;
        pos=NULL;
        for (k=ld1;k>0;k--)
           pos=WP[1].addterm(cf[k],k+1,pos);
        for (v=2;v<=ld;v++)
            WP[v]=modxn(WP[v-1]*WP[1],ld+1);
//
// WPv have understood multiplier x^-v
//            
        get_ck(ld1,atilde,btilde,cft);

        Y=0;
        pos=NULL;
        for (k=ld1;k>0;k--)
            pos=Y.addterm((lp*cf[k]-cft[k])/(ZZn)((2*k+1)*(2*k+2)),k+1,pos);
        Y.addterm(-p1,1,pos);

        RF=1;
        H=1;
        X=1;
        for (r=1;r<=ld;r++)
        {
            X=modxn(X*Y,ld+1);
            RF*=r;
            H+=(X/RF);
        }
//
//  H has understood multiplier x^-d
//
        ad=1;
        Fl=0;
        pos=Fl.addterm(ad,ld);
        for (v=ld-1;v>=0;v--)
        {
            H-=ad*WP[v+1];
            H=divxn(H,1);
            ad=H.min();
            pos=Fl.addterm(ad,v,pos);
        }

        setmod(Fl);
        MY2=Y2;
        MY4=Y4;

//
// Only the Y-coordinate is calculated. No need for X^P !
//
        cout << "\b\b\bY^P" << flush;
        YP=pow(MY2,(p-1)/2);
        cout << "\b\b\b";

// Calculate Divisor Polynomials for small primes - Schoof 1985 p.485
// This time mod the new (small) modulus Fl
// Set the first few by hand....
    
        PolyMod Pf[300],P2f[300],P3f[300];
        Pf[0]=0; Pf[1]=1; Pf[2]=2; Pf[3]=0; Pf[4]=0;

        P2f[1]=1; P3f[1]=1;

        P2f[2]=Pf[2]*Pf[2];
        P3f[2]=P2f[2]*Pf[2];

        Pf[3].addterm(-(A*A),0); Pf[3].addterm(12*B,1);
        Pf[3].addterm(6*A,2)   ; Pf[3].addterm((ZZn)3,4);

        P2f[3]=Pf[3]*Pf[3];
        P3f[3]=P2f[3]*Pf[3];

        Pf[4].addterm((ZZn)(-4)*(8*B*B+A*A*A),0);
        Pf[4].addterm((ZZn)(-16)*(A*B),1);
        Pf[4].addterm((ZZn)(-20)*(A*A),2);
        Pf[4].addterm((ZZn)80*B,3);
        Pf[4].addterm((ZZn)20*A,4);
        Pf[4].addterm((ZZn)4,6);

        P2f[4]=Pf[4]*Pf[4];
        P3f[4]=P2f[4]*Pf[4];
        lower=5;
        
//
// Now looking for value of lambda which satisfies
// (X^P,Y^P) = lambda.(XX,YY). 
// 3. Page 118, Algorithm 7.9
//
// Note that it appears to be sufficient to only compare the Y coordinates (!?)
// For a justification see page 120 of 3. 
// Thank you SYSTRAN translation service! (www.altavista.com)
//
        good[nl]=lp;
        cout << "NP mod " << lp << " = " << flush;
        for (lambda=1;lambda<=(lp-1)/2;lambda++)
        {
            int res=0;
            PolyMod Ry,Ty;
            tau=(lambda+invers(lambda,lp)*p)%lp;

            k=(lp+tau*tau-(4*p)%lp)%lp;
            if (jac(k,lp)!=discrim) continue; 
//
//  Possible values of tau could be eliminated here by an application of 
//  Atkin's algorithm....  
//  
            cout << setw(3) << (p+1-tau)%lp << flush; 

      // This "loop" is usually executed just once
            for (jj=lower;jj<=lambda+2;jj++)
            { // different for even and odd 
                if (jj%2==1)     // 2 mod-muls
                { 
                    n=(jj-1)/2;
                    if (n%2==0)
                        Pf[jj]=Pf[n+2]*P3f[n]*MY4-P3f[n+1]*Pf[n-1];
                    else
                        Pf[jj]=Pf[n+2]*P3f[n]-MY4*P3f[n+1]*Pf[n-1];
                }
                else            // 3 mod-muls
                {
                    n=jj/2;
                    Pf[jj]=Pf[n]*(Pf[n+2]*P2f[n-1]-Pf[n-2]*P2f[n+1])/(ZZn)2;
                }
                P2f[jj]=Pf[jj]*Pf[jj];     // square
                P3f[jj]=P2f[jj]*Pf[jj];    // cube
            }
            if (lambda+3>lower) lower=lambda+3;

     // compare Y-coordinates - 3 polynomial mod-muls required

            if (lambda%2==0)
            {
                Ry=(Pf[lambda+2]*P2f[lambda-1]-Pf[lambda-2]*P2f[lambda+1])/4;
                Ty=MY4*YP*P3f[lambda];
            }
            else
            {
                if (lambda==1) Ry=(Pf[lambda+2]*P2f[lambda-1]+P2f[lambda+1])/4;
                else           Ry=(Pf[lambda+2]*P2f[lambda-1]-Pf[lambda-2]*P2f[lambda+1])/4;
                Ty=YP*P3f[lambda];
            }
            if (iszero(Ty-Ry)) res=1;
            if (iszero(Ty+Ry)) res=2;

            if (res!=0) 
            {  // has it doubled, or become point at infinity?
                if (res==2)
                { // it doubled - wrong sign
                    tau=(lp-tau)%lp;
                    cout << "\b\b\b";
                    cout << setw(3) << (p+1-tau)%lp << flush; 
                }
                t[nl]=tau;
                if ((p+1-tau)%lp==0)
                {
                    cout << " ***" << endl;
                    if (search) escape=TRUE;
                }
                else cout << endl;
                break;
            }
            cout << "\b\b\b";
        }
        nl++;        
        accum*=lp;
        if (escape) break;
    }
    Modulus.clear();

    if (escape) {b+=1; continue;}

    Crt CRT(nl,good);
    Big order,ordermod;
    ordermod=accum;
    order=(p+1-CRT.eval(t))%ordermod;    // get order mod product of primes

    nrp=kangaroo(p,order,ordermod);

    if (!prime(nrp) && search) {b+=1; continue; }
    else break;
    }

    if (fout) 
    {
        ECn P;
        ofile << bits(p) << endl;
        mip->IOBASE=16;
        ofile << p << endl;

        ofile << a << endl;
        ofile << b << endl;
        ofile << nrp << endl;

    // generate a random point on the curve 
    // point will be of prime order for "ideal" curve, otherwise any point
        do {
            x=rand(p);
        } while (!P.set(x,x));
        P.get(x,y);
        ofile << x << endl;
        ofile << y << endl;
        mip->IOBASE=10;
    }
    if (p==nrp) 
    {
        cout << "WARNING: Curve is anomalous" << endl;
        return 0;
    }
// check MOV condition for curves of Cryptographic interest
    d=1;
    for (i=0;i<50;i++)
    {
        d=modmult(d,p,nrp);
        if (d==1) 
        {
           cout << "WARNING: Curve fails MOV condition" << endl;
           return 0;
        }
    }

    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡视频一区二区三区| 日本一区二区三区四区| 欧美一区二区三区视频在线| 国产午夜精品在线观看| 丝袜美腿亚洲一区二区图片| 国产乱子伦视频一区二区三区| 色欧美88888久久久久久影院| 日韩欧美一区二区久久婷婷| 樱花影视一区二区| 国产不卡在线一区| 精品噜噜噜噜久久久久久久久试看 | 波多野洁衣一区| 欧美放荡的少妇| 亚洲精品v日韩精品| 国产精品88av| 亚洲精品一区二区精华| 亚洲国产成人高清精品| 色综合色狠狠天天综合色| 久久色中文字幕| 黄色小说综合网站| 日韩欧美一区电影| 蜜桃精品在线观看| 51精品视频一区二区三区| 亚洲无人区一区| 欧美主播一区二区三区| 亚洲三级免费电影| 色欧美日韩亚洲| 亚洲人成在线观看一区二区| 99久久er热在这里只有精品66| 欧美激情一区二区三区四区| 国产精品1区2区3区在线观看| 精品久久久久一区| 精品写真视频在线观看| 精品国产a毛片| 国产麻豆视频一区| 国产欧美一区二区在线观看| 国产99一区视频免费| 日本一区二区在线不卡| 波多野结衣中文一区| 国产精品乱码妇女bbbb| 97精品国产露脸对白| 亚洲一区二区欧美激情| 欧美精品在线视频| 美腿丝袜亚洲三区| 久久综合九色综合欧美亚洲| 国产精品正在播放| 有码一区二区三区| 欧美专区日韩专区| 蜜臀久久99精品久久久久宅男| 日韩欧美一级在线播放| 麻豆91在线看| 国产精品美女视频| 欧美日韩成人综合天天影院 | 麻豆视频一区二区| 久久久亚洲精品石原莉奈| 国产精品18久久久| 亚洲午夜激情av| 日韩精品一区二区三区在线播放| 国产在线精品一区二区| 亚洲免费在线播放| 日韩一级成人av| 成人免费av在线| 亚洲国产精品久久艾草纯爱 | 国产在线精品一区二区夜色| 国产女主播在线一区二区| 91美女视频网站| 久久精品国产99| 亚洲欧美中日韩| 欧美一级高清片在线观看| 成人一区在线观看| 日本aⅴ免费视频一区二区三区| 欧美国产精品一区二区三区| 欧美日韩精品一区二区三区蜜桃| 狠狠色丁香婷综合久久| 亚洲综合色婷婷| 国产情人综合久久777777| 欧美日韩小视频| 成人av网站在线观看免费| 日韩av网站免费在线| 亚洲天堂成人在线观看| 日韩亚洲欧美成人一区| 色天天综合久久久久综合片| 九九精品一区二区| 亚洲午夜精品网| 亚洲欧美怡红院| 国产亚洲视频系列| 日韩一级在线观看| 欧美中文字幕不卡| 99免费精品在线| 国产久卡久卡久卡久卡视频精品| 天堂成人国产精品一区| 亚洲丝袜精品丝袜在线| 国产三级久久久| 日韩欧美久久一区| 在线播放/欧美激情| 色香色香欲天天天影视综合网| 国产毛片精品视频| 精品一区二区三区在线视频| 首页综合国产亚洲丝袜| 亚洲激情校园春色| 亚洲欧美日韩综合aⅴ视频| 国产日韩欧美不卡| 久久蜜桃av一区精品变态类天堂 | 自拍视频在线观看一区二区| 欧美日韩国产另类不卡| 日本乱码高清不卡字幕| 不卡一区中文字幕| 成人app下载| 99久久精品免费| 不卡视频在线看| 成人动漫精品一区二区| 丁香另类激情小说| 成人av在线播放网站| 国产不卡视频在线播放| 高清视频一区二区| 国产成人在线观看免费网站| 国产精品中文字幕日韩精品| 国产成人精品影视| 成人黄色av电影| 97精品久久久午夜一区二区三区 | 91麻豆自制传媒国产之光| 国产91富婆露脸刺激对白| 国产91精品久久久久久久网曝门| 成人激情校园春色| 91色综合久久久久婷婷| 色狠狠一区二区| 欧美顶级少妇做爰| 337p粉嫩大胆色噜噜噜噜亚洲| 久久九九全国免费| 成人欧美一区二区三区视频网页| 日韩一区中文字幕| 午夜日韩在线电影| 久久精品99久久久| 懂色av噜噜一区二区三区av| 91亚洲男人天堂| 欧美精品在线观看一区二区| 精品乱人伦小说| 成人免费一区二区三区视频 | 亚洲欧美日韩系列| 亚洲国产色一区| 看片的网站亚洲| 99免费精品视频| 欧美精品777| 中文字幕精品综合| 午夜亚洲国产au精品一区二区| 看电视剧不卡顿的网站| 成人一区二区三区中文字幕| 欧美专区日韩专区| 久久亚洲精华国产精华液| 亚洲免费观看高清| 久久超碰97中文字幕| av在线播放不卡| 日韩欧美国产小视频| 亚洲欧美福利一区二区| 麻豆一区二区三| 欧洲一区在线电影| 久久久久久久久久美女| 亚洲地区一二三色| 成人午夜激情影院| 91精品国产黑色紧身裤美女| 国产精品久久久久桃色tv| 青娱乐精品在线视频| 91亚洲大成网污www| 精品欧美一区二区三区精品久久 | 中文字幕亚洲综合久久菠萝蜜| 亚洲一二三四在线| 成人中文字幕电影| 日韩一级高清毛片| 亚洲成人综合视频| 91一区二区三区在线观看| 精品国产乱码久久久久久久| 亚洲高清不卡在线观看| 9i在线看片成人免费| 久久久国际精品| 美女网站色91| 欧美日韩精品免费| 亚洲欧美色综合| 99精品欧美一区| 中文字幕精品—区二区四季| 久久99久久99| 日韩欧美精品在线视频| 五月天一区二区三区| 色婷婷综合久久| 亚洲欧美一区二区三区极速播放| 国产精品99久久久久久久vr| 日韩欧美一区二区在线视频| 午夜精品久久久久久不卡8050| 色噜噜狠狠成人网p站| 最新欧美精品一区二区三区| 国产91精品在线观看| 国产日韩欧美在线一区| 国产麻豆9l精品三级站| 久久影院视频免费| 国产在线一区二区| 欧美va亚洲va国产综合| 久久激情五月激情| 精品国产3级a| 国产精品99久久久久久久vr | 久久欧美中文字幕| 极品美女销魂一区二区三区免费|