...

Source file src/github.com/cloudflare/circl/kem/kyber/gen.go

Documentation: github.com/cloudflare/circl/kem/kyber

     1  //go:build ignore
     2  // +build ignore
     3  
     4  // Autogenerates wrappers from templates to prevent too much duplicated code
     5  // between the code for different modes.
     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  // Generates instance/kyber.go from templates/pkg.templ.go
    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  		// Formating output code
    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