MCPcopy
hub / github.com/tjfoc/gmsm / sm2P256PointDouble

Function sm2P256PointDouble

sm2/p256.go:562–599  ·  view source on GitHub ↗
(x3, y3, z3, x, y, z *sm2P256FieldElement)

Source from the content-addressed store, hash-verified

560}
561
562func 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.
602var sm2P256Zero31 = sm2P256FieldElement{0x7FFFFFF8, 0x3FFFFFFC, 0x800003FC, 0x3FFFDFFC, 0x7FFFFFFC, 0x3FFFFFFC, 0x7FFFFFFC, 0x37FFFFFC, 0x7FFFFFFC}

Callers 5

DoubleMethod · 0.85
sm2P256ScalarBaseMultFunction · 0.85
sm2P256PointAddFunction · 0.85
sm2P256PointSubFunction · 0.85
sm2P256ScalarMultFunction · 0.85

Calls 6

sm2P256SquareFunction · 0.85
sm2P256MulFunction · 0.85
sm2P256ScalarFunction · 0.85
sm2P256DupFunction · 0.85
sm2P256AddFunction · 0.85
sm2P256SubFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…