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