util/fipstools/acvp/acvptool/katemitter/emitter.go (65 lines of code) (raw):
// katemitter is a package which (with best effort) will attempt to emit test case data to a configured file
// for use by AWS-LC's file-based test framework. "Attempt" because it doesn't check for errors on the writer
// destination. But this is mostly a facility to aid in getting KATs for algorithms and re-using the inputs/outputs
// from the ACVP server after they have been validated as accurate.
package katemitter
import (
"bytes"
"encoding/hex"
"fmt"
"io"
"os"
)
type stubEmitter struct{}
func (s *stubEmitter) Close() error {
return nil
}
func (s *stubEmitter) Write(p []byte) (n int, err error) {
return len(p), nil
}
var katDestination io.WriteCloser = &stubEmitter{}
func EmitToFile(path string) error {
if err := Close(); err != nil {
return err
}
f, err := os.Create(path)
if err != nil {
return err
}
katDestination = f
return nil
}
func NewTestCase(comment string) {
var buffer bytes.Buffer
buffer.WriteRune('\n')
buffer.WriteString("# Case: ")
buffer.WriteString(comment)
buffer.WriteRune('\n')
_, _ = io.Copy(katDestination, &buffer)
}
func NewSection(title string) {
var buffer bytes.Buffer
buffer.WriteRune('\n')
buffer.WriteString("# Section: ")
buffer.WriteString(title)
buffer.WriteByte('\n')
_, _ = io.Copy(katDestination, &buffer)
}
func WriteComment(comment string) {
_, _ = katDestination.Write([]byte("# " + comment + "\n"))
}
func WriteStringKvPair(key string, value string) {
_, _ = katDestination.Write([]byte(fmt.Sprintf("%s = %s\n", key, value)))
}
func WriteBytesKvPair(key string, value []byte) {
_, _ = katDestination.Write([]byte(fmt.Sprintf("%s = %s\n", key, hex.EncodeToString(value))))
}
func WriteIntKvPair(key string, value int) {
_, _ = katDestination.Write([]byte(fmt.Sprintf("%s = %d\n", key, value)))
}
func WriteInt64KvPair(key string, value int64) {
_, _ = katDestination.Write([]byte(fmt.Sprintf("%s = %d\n", key, value)))
}
func WriteUInt64KvPair(key string, value uint64) {
_, _ = katDestination.Write([]byte(fmt.Sprintf("%s = %d\n", key, value)))
}
func Close() error {
_, _ = katDestination.Write([]byte("\n"))
return katDestination.Close()
}