diff options
Diffstat (limited to 'io.go')
-rw-r--r-- | io.go | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -0,0 +1,41 @@ +package main + +// handle all io and de/encoding of data + +import ( + "encoding/pem" + "errors" + "io/ioutil" +) + +var ( + ErrBlockNotFound = errors.New("block not found") +) + +// load a pem section from a file +func readSectionFromFile(path, btype string) ([]byte, error) { + raw, err := readFile(path) + if err != nil { return raw, err } + + return decodeSection(raw, btype) +} + +// read a file completely and report possible errors +func readFile(path string) ([]byte, error) { + raw, err := ioutil.ReadFile(path) + if err != nil { return EmptyByteArray, err } + return raw, nil +} + +// decode a pem encoded file and search for the specified section +func decodeSection(data []byte, btype string) ([]byte, error) { + rest := data + for len(rest) > 0 { + var block *pem.Block + block, rest = pem.Decode(rest) + if block.Type == btype { + return block.Bytes, nil + } + } + return EmptyByteArray, ErrBlockNotFound +} |