aboutsummaryrefslogtreecommitdiff
path: root/sign_input.go
diff options
context:
space:
mode:
Diffstat (limited to 'sign_input.go')
-rw-r--r--sign_input.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/sign_input.go b/sign_input.go
new file mode 100644
index 0000000..e2c2320
--- /dev/null
+++ b/sign_input.go
@@ -0,0 +1,50 @@
+package main
+
+import (
+ "crypto"
+ "encoding/base64"
+ "flag"
+ "io"
+ "io/ioutil"
+)
+
+func SignInput(args []string) error {
+ fs := flag.NewFlagSet("pkictl sign-input", flag.ExitOnError)
+ flagPrivate := fs.String("private-key", "", "path to the private key or read from stdin")
+ flagInput := fs.String("input", "stdin", "path to the message to sign or stdin")
+ flagOutput := fs.String("output", "stdout", "write private key to file")
+ fs.Parse(args)
+
+ pk, err := loadPrivateKey(*flagPrivate)
+ if err != nil {
+ return err
+ }
+
+ out, err := openOutput(*flagOutput)
+ if err != nil {
+ return err
+ }
+ defer out.Close()
+
+ in, err := openInput(*flagInput)
+ if err != nil {
+ return err
+ }
+ defer in.Close()
+
+ message, err := ioutil.ReadAll(in)
+ if err != nil {
+ return err
+ }
+
+ signature, err := pk.Sign(message, crypto.SHA256)
+ if err != nil {
+ return err
+ }
+
+ _, err = io.WriteString(out, base64.StdEncoding.EncodeToString(signature))
+ if err != nil {
+ return err
+ }
+ return nil
+}