montgomery


#include "bn.h"

int main(int argc, char *argv[])
{
    BN_CTX *ctx = BN_CTX_new();
    //BN_CTX_start(ctx);


    auto a= BN_CTX_get(ctx);
    a->neg = -1;
    BN_set_word(a, 0xff7655f);
    //a->neg = -1;

    auto b= BN_CTX_get(ctx);
    BN_set_word(b, 0xff45fff3);
    auto c= BN_CTX_get(ctx);
    auto e= BN_CTX_get(ctx);
    auto cm= BN_CTX_get(ctx);
    auto m= BN_CTX_get(ctx);
    BN_set_word(m, 0xfffffff3);
    int r;

    //r = BN_add(a,a, b);
//    r = BN_div(c, m, a, b, ctx);

#if 01
    //for(int i=0; i<0x7fff; ++i)
    {
        //r = BN_mod_mul(e, a, b, m, ctx);
        r = BN_mod_exp(e, a, b, m, ctx);
    }
#endif


    BN_MONT_CTX *mont_ctx = BN_MONT_CTX_new();
    BN_MONT_CTX_init(mont_ctx);
    r =BN_MONT_CTX_set(mont_ctx, m, ctx);

    auto am= BN_CTX_get(ctx);
    BN_to_montgomery(am, a,mont_ctx, ctx);
    auto bm= BN_CTX_get(ctx);
    BN_to_montgomery(bm, b,mont_ctx, ctx);

#if 01
    //for(int i=0; i<0x7fff; ++i)
    {
//        r = BN_mod_mul_montgomery(cm, am, bm, mont_ctx, ctx);
//        r = BN_from_montgomery(c, cm, mont_ctx, ctx);

        //r = BN_mod_exp_mont(cm, am, bm, m, ctx, mont_ctx);
        //r = BN_from_montgomery(c, cm, mont_ctx, ctx);

        r = BN_mod_exp_mont(c, a, b, m, ctx, mont_ctx);
    }
#endif
    //r = BN_mod_exp(c,a,b,m,ctx);
    //r = BN_mod_exp_mont(c,a,b,m,ctx, mont_ctx);
    BN_MONT_CTX_free(mont_ctx);


    BN_cmp(a,b);

    BN_CTX_free(ctx);
    return 0;


}

posted @ 2020-03-17 10:48  zJanly  阅读(248)  评论(0编辑  收藏  举报