aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/btcsuite/btcd/btcec/genprecomps.go
blob: d4a9c1b8306089d194f13a7020e370de5abddba5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// Copyright 2015 The btcsuite developers
// Use of this source code is governed by an ISC
// 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 The btcsuite developers")
    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 = %q\n", string(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)
}