BnEccGenerateKeyPair-1

 CURVE_INITIALIZED(E, publicArea->parameters.eccDetail.curveID);

初始化曲线:

初始化完成后有对应值 :

BigInteger("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", 16), // p
            new BigInteger("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", 16), // a
            new BigInteger("5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", 16), // b
            new BigInteger("FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", 16), // n
            new BigInteger("1", 16), // h
            new BigInteger("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", 16) // G
    )

  ECC_NUM(bnD);

给私钥分配空间:

 

    POINT(ecQ);

给 ecQ中的 x ,y ,z 分配空间 ,z只有一个字节且初始化为1

 

 

 

    BN_VAR(bnExtraBits, MAX_ECC_KEY_BITS + 64);
    BN_VAR(nMinus1, MAX_ECC_KEY_BITS);

给 bnExtraBits nMinus1 分配空间

 OK = BnGetRandomBits(bnExtraBits, (orderBytes * 8) + 64, rand);

输入 (orderBytes * 8) + 64, rand,输出: bnExtraBits

  OK = OK && BnSubWord(nMinus1, order, 1);

  输入: order ,   输出  nMinus1

只和曲线中的order (r) 有关? 

跑完   OK = BnGetRandomBits(bnExtraBits, (orderBytes * 8) + 64, rand); 后

bnExtraBits 中的数据:

 

跑完    OK = OK && BnSubWord(nMinus1, order, 1); 后

nMinus1 中的数据:

 p256曲线中的 order (r ) :

 最后一字节不一致 :  51 nMinus1中是 50

跑完     OK = OK && BnMod(bnExtraBits, nMinus1); 后

得到 bnExtraBits (不是最终结果,后面会加1) :

 

跑完 OK = OK && BnAddWord(dOut, bnExtraBits, 1); 后

dOut:

 

跑完  OK = OK && BnEccModMult(ecQ, NULL, bnD, E); 后

输出 ecQ 中的 x,y : 

bnD(已经加1):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值