(x3, y3, z3, x, y, z *sm2P256FieldElement)
| 560 | } |
| 561 | |
| 562 | func sm2P256PointDouble(x3, y3, z3, x, y, z *sm2P256FieldElement) { |
| 563 | var s, m, m2, x2, y2, z2, z4, y4, az4 sm2P256FieldElement |
| 564 | |
| 565 | sm2P256Square(&x2, x) // x2 = x ^ 2 |
| 566 | sm2P256Square(&y2, y) // y2 = y ^ 2 |
| 567 | sm2P256Square(&z2, z) // z2 = z ^ 2 |
| 568 | |
| 569 | sm2P256Square(&z4, z) // z4 = z ^ 2 |
| 570 | sm2P256Mul(&z4, &z4, z) // z4 = z ^ 3 |
| 571 | sm2P256Mul(&z4, &z4, z) // z4 = z ^ 4 |
| 572 | |
| 573 | sm2P256Square(&y4, y) // y4 = y ^ 2 |
| 574 | sm2P256Mul(&y4, &y4, y) // y4 = y ^ 3 |
| 575 | sm2P256Mul(&y4, &y4, y) // y4 = y ^ 4 |
| 576 | sm2P256Scalar(&y4, 8) // y4 = 8 * y ^ 4 |
| 577 | |
| 578 | sm2P256Mul(&s, x, &y2) |
| 579 | sm2P256Scalar(&s, 4) // s = 4 * x * y ^ 2 |
| 580 | |
| 581 | sm2P256Dup(&m, &x2) |
| 582 | sm2P256Scalar(&m, 3) |
| 583 | sm2P256Mul(&az4, &sm2P256.a, &z4) |
| 584 | sm2P256Add(&m, &m, &az4) // m = 3 * x ^ 2 + a * z ^ 4 |
| 585 | |
| 586 | sm2P256Square(&m2, &m) // m2 = m ^ 2 |
| 587 | |
| 588 | sm2P256Add(z3, y, z) |
| 589 | sm2P256Square(z3, z3) |
| 590 | sm2P256Sub(z3, z3, &z2) |
| 591 | sm2P256Sub(z3, z3, &y2) // z' = (y + z) ^2 - z ^ 2 - y ^ 2 |
| 592 | |
| 593 | sm2P256Sub(x3, &m2, &s) |
| 594 | sm2P256Sub(x3, x3, &s) // x' = m2 - 2 * s |
| 595 | |
| 596 | sm2P256Sub(y3, &s, x3) |
| 597 | sm2P256Mul(y3, y3, &m) |
| 598 | sm2P256Sub(y3, y3, &y4) // y' = m * (s - x') - 8 * y ^ 4 |
| 599 | } |
| 600 | |
| 601 | // p256Zero31 is 0 mod p. |
| 602 | var sm2P256Zero31 = sm2P256FieldElement{0x7FFFFFF8, 0x3FFFFFFC, 0x800003FC, 0x3FFFDFFC, 0x7FFFFFFC, 0x3FFFFFFC, 0x7FFFFFFC, 0x37FFFFFC, 0x7FFFFFFC} |
no test coverage detected
searching dependent graphs…