Add pemit to convert data to PEM.
This commit is contained in:
parent
4b9da3632a
commit
25bafdac15
|
@ -0,0 +1,41 @@
|
|||
pemit
|
||||
|
||||
This is a utility to pem-encode data. It requires a PEM type to be
|
||||
specified via the `-t` flag. Any number of files may be specified on
|
||||
the command line; alternatively, if no arguments are provided or the
|
||||
only argument is "-", pemit will read from standard input.
|
||||
|
||||
Example of standard input:
|
||||
$ dd if=/dev/zero bs=32 count=1 | pemit -t "NULL DATA"
|
||||
1+0 records in
|
||||
1+0 records out
|
||||
32 bytes (32 B) copied, 8.8908e-05 s, 360 kB/s
|
||||
-----BEGIN NULL DATA-----
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
-----END NULL DATA-----
|
||||
$ dd if=/dev/zero bs=32 count=1 | pemit -t "NULL DATA" -
|
||||
1+0 records in
|
||||
1+0 records out
|
||||
32 bytes (32 B) copied, 3.1041e-05 s, 1.0 MB/s
|
||||
-----BEGIN NULL DATA-----
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
-----END NULL DATA-----
|
||||
|
||||
Using files:
|
||||
$ dd if=/dev/zero of=fileA bs=32 count=1
|
||||
1+0 records in
|
||||
1+0 records out
|
||||
32 bytes (32 B) copied, 9.0908e-05 s, 352 kB/s
|
||||
$ dd if=/dev/zero of=fileB bs=32 count=1
|
||||
1+0 records in
|
||||
1+0 records out
|
||||
32 bytes (32 B) copied, 9.0908e-05 s, 352 kB/s
|
||||
$ pemit -t NULL\ DATA fileA
|
||||
-----BEGIN NULL DATA-----
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
|
||||
-----END NULL DATA-----
|
||||
$ pemit -t NULL\ DATA fileA fileB
|
||||
-----BEGIN NULL DATA-----
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAA==
|
||||
-----END NULL DATA-----
|
|
@ -0,0 +1,91 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/pem"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/kisom/goutils/assert"
|
||||
"github.com/kisom/goutils/die"
|
||||
"github.com/kisom/goutils/lib"
|
||||
)
|
||||
|
||||
func usage(w io.Writer) {
|
||||
fmt.Fprintf(w, `Usage: %s [-h] -t type sources
|
||||
|
||||
Flags:
|
||||
-h Display this help message.
|
||||
-t type Set the PEM type. This is required.
|
||||
|
||||
Sources may be a list of files or a single '-'. A single dash
|
||||
(or no arguments) will cause %s to use standard input.
|
||||
`, lib.ProgName(), lib.ProgName())
|
||||
}
|
||||
|
||||
func init() {
|
||||
flag.Usage = func() { usage(os.Stderr) }
|
||||
}
|
||||
|
||||
func copyFile(path string, buf *bytes.Buffer) error {
|
||||
assert.Bool(buf != nil, "buffer should not be nil")
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = io.Copy(buf, file)
|
||||
file.Close()
|
||||
return err
|
||||
}
|
||||
|
||||
func main() {
|
||||
var pemType string
|
||||
flag.StringVar(&pemType, "t", "", "Specify the `PEM type`.")
|
||||
flag.Parse()
|
||||
|
||||
die.When(len(pemType) == 0, "no PEM type specified.")
|
||||
|
||||
buf := &bytes.Buffer{}
|
||||
argc := flag.NArg()
|
||||
var err error
|
||||
|
||||
switch {
|
||||
case argc == 0:
|
||||
_, err = io.Copy(buf, os.Stdin)
|
||||
if err != nil {
|
||||
lib.Err(lib.ExitFailure, err, "failed to read input")
|
||||
}
|
||||
case argc == 1:
|
||||
path := flag.Arg(0)
|
||||
if path == "-" {
|
||||
_, err = io.Copy(buf, os.Stdin)
|
||||
} else {
|
||||
err = copyFile(path, buf)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
lib.Err(lib.ExitFailure, err, "failed to read input")
|
||||
}
|
||||
case argc > 1:
|
||||
for i := 0; i < argc; i++ {
|
||||
path := flag.Arg(i)
|
||||
err = copyFile(path, buf)
|
||||
if err != nil {
|
||||
lib.Err(lib.ExitFailure, err, "reading file failed")
|
||||
}
|
||||
}
|
||||
default:
|
||||
panic("shouldn't be here")
|
||||
}
|
||||
|
||||
p := &pem.Block{
|
||||
Type: pemType,
|
||||
Bytes: buf.Bytes(),
|
||||
}
|
||||
|
||||
encoded := string(pem.EncodeToMemory(p))
|
||||
fmt.Print(encoded)
|
||||
}
|
Loading…
Reference in New Issue