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):