...
1
2
3
4
5
6 package main
7
8 import (
9 "bytes"
10 "fmt"
11 "go/format"
12 "io/ioutil"
13 "strings"
14 "text/template"
15 )
16
17 type Instance struct {
18 Bits int
19 }
20
21 func (m Instance) Pkg() string {
22 return strings.ToLower(m.Name())
23 }
24
25 func (m Instance) Name() string {
26 return fmt.Sprintf("SIKEp%d", m.Bits)
27 }
28
29 func (m Instance) Field() string {
30 return fmt.Sprintf("Fp%d", m.Bits)
31 }
32
33 var (
34 Instances = []Instance{
35 {Bits: 434},
36 {Bits: 503},
37 {Bits: 751},
38 }
39 TemplateWarning = "// Code generated from"
40 )
41
42 func main() {
43 generatePackageFiles()
44 }
45
46
47 func generatePackageFiles() {
48 tl, err := template.ParseFiles("templates/pkg.templ.go")
49 if err != nil {
50 panic(err)
51 }
52
53 for _, mode := range Instances {
54 buf := new(bytes.Buffer)
55 err := tl.Execute(buf, mode)
56 if err != nil {
57 panic(err)
58 }
59
60
61 code, err := format.Source(buf.Bytes())
62 if err != nil {
63 panic("error formating code")
64 }
65
66 res := string(code)
67 offset := strings.Index(res, TemplateWarning)
68 if offset == -1 {
69 panic("Missing template warning in pkg.templ.go")
70 }
71 err = ioutil.WriteFile(mode.Pkg()+"/sike.go", []byte(res[offset:]), 0o644)
72 if err != nil {
73 panic(err)
74 }
75 }
76 }
77
View as plain text