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