60 lines
1.4 KiB
Go
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))
|
|
}
|
|
}
|