Files
p256k1/avx/debug_double_test.go
2025-11-28 16:35:08 +00:00

60 lines
1.4 KiB
Go

package avx
import (
"bytes"
"encoding/hex"
"testing"
)
func TestDebugDouble(t *testing.T) {
// Known value: 2G for secp256k1 (verified using Python)
expectedX := "c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5"
expectedY := "1ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a"
var g, doubled JacobianPoint
var affineResult AffinePoint
g.FromAffine(&Generator)
doubled.Double(&g)
doubled.ToAffine(&affineResult)
xBytes := affineResult.X.Bytes()
yBytes := affineResult.Y.Bytes()
t.Logf("Generator X: %x", Generator.X.Bytes())
t.Logf("Generator Y: %x", Generator.Y.Bytes())
t.Logf("2G X: %x", xBytes)
t.Logf("2G Y: %x", yBytes)
expectedXBytes, _ := hex.DecodeString(expectedX)
expectedYBytes, _ := hex.DecodeString(expectedY)
t.Logf("Expected X: %s", expectedX)
t.Logf("Expected Y: %s", expectedY)
if !bytes.Equal(xBytes[:], expectedXBytes) {
t.Errorf("2G X coordinate mismatch")
}
if !bytes.Equal(yBytes[:], expectedYBytes) {
t.Errorf("2G Y coordinate mismatch")
}
// Check if 2G is on curve
if !affineResult.IsOnCurve() {
// Let's verify manually
var y2, x2, x3, rhs FieldElement
y2.Sqr(&affineResult.Y)
x2.Sqr(&affineResult.X)
x3.Mul(&x2, &affineResult.X)
var seven FieldElement
seven.N[0].Lo = 7
rhs.Add(&x3, &seven)
y2Bytes := y2.Bytes()
rhsBytes := rhs.Bytes()
t.Logf("y^2 = %x", y2Bytes)
t.Logf("x^3 + 7 = %x", rhsBytes)
t.Logf("y^2 == x^3+7: %v", y2.Equal(&rhs))
}
}