2b25107317
This commit adds code which generates the linearly independent vectors used by the secp256k1 endomorphism code. These value are hard-coded into the curve already, but having the code used to generate them is handy should any future curves be added which can also make use of the same class of endomorphism.
63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
// Copyright 2015 Conformal Systems LLC. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// This file is ignored during the regular build due to the following build tag.
|
|
// It is called by go generate and used to automatically generate pre-computed
|
|
// tables used to accelerate operations.
|
|
// +build ignore
|
|
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"compress/zlib"
|
|
"encoding/base64"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/btcsuite/btcd/btcec"
|
|
)
|
|
|
|
func main() {
|
|
fi, err := os.Create("secp256k1.go")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer fi.Close()
|
|
|
|
// Compress the serialized byte points.
|
|
serialized := btcec.S256().SerializedBytePoints()
|
|
var compressed bytes.Buffer
|
|
w := zlib.NewWriter(&compressed)
|
|
if _, err := w.Write(serialized); err != nil {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
w.Close()
|
|
|
|
// Encode the compressed byte points with base64.
|
|
encoded := make([]byte, base64.StdEncoding.EncodedLen(compressed.Len()))
|
|
base64.StdEncoding.Encode(encoded, compressed.Bytes())
|
|
|
|
fmt.Fprintln(fi, "// Copyright (c) 2015 Conformal Systems LLC.")
|
|
fmt.Fprintln(fi, "// Use of this source code is governed by an ISC")
|
|
fmt.Fprintln(fi, "// license that can be found in the LICENSE file.")
|
|
fmt.Fprintln(fi)
|
|
fmt.Fprintln(fi, "package btcec")
|
|
fmt.Fprintln(fi)
|
|
fmt.Fprintln(fi, "// Auto-generated file (see genprecomps.go)")
|
|
fmt.Fprintln(fi, "// DO NOT EDIT")
|
|
fmt.Fprintln(fi)
|
|
fmt.Fprintf(fi, "var secp256k1BytePoints = []byte(%q)\n", encoded)
|
|
|
|
a1, b1, a2, b2 := btcec.S256().EndomorphismVectors()
|
|
fmt.Println("The following values are the computed linearly " +
|
|
"independent vectors needed to make use of the secp256k1 " +
|
|
"endomorphism:")
|
|
fmt.Printf("a1: %x\n", a1)
|
|
fmt.Printf("b1: %x\n", b1)
|
|
fmt.Printf("a2: %x\n", a2)
|
|
fmt.Printf("b2: %x\n", b2)
|
|
}
|