aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-04-19 05:13:50 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-04-19 05:13:50 +0200
commit3fdfe01e0c04d1e7b846eec690c1446d0760d283 (patch)
tree969ad5c14764c81553b02250b8e08618521d8937
parentf221c4644877dcce83e5bb73b086f833f75dfc4a (diff)
...
-rw-r--r--main.go55
1 files changed, 48 insertions, 7 deletions
diff --git a/main.go b/main.go
index 7419752..2f3b8eb 100644
--- a/main.go
+++ b/main.go
@@ -21,6 +21,8 @@ const (
signify -V [-eqz] [-p pubkey] [-t keytype] [-x sigfile] -m message
*/
+var ErrInvalidKey = errors.New("invalid key")
+
var (
checksum = flag.Bool("C", false, "Verify a signed checksum list")
generate = flag.Bool("G", false, "Generate a new key pair")
@@ -104,25 +106,64 @@ func Generate(pubFile, secFile, comment string, rounds int) error {
return nil
}
-func Sign(msgFile, secFile string, embed bool) error {
- sfile, err := ParseFile(secFile)
+func OpenSec(fname string) (*EncKey, error) {
+ f, err := ParseFile(fname)
if err != nil {
- return err
+ return nil, err
}
encKey := new(EncKey)
- if err := Unmarshal(sfile.RawKey, encKey); err != nil {
- return err
+ if err := Unmarshal(f.RawKey, encKey); err != nil {
+ return nil, err
}
if encKey.KDFRounds > 0 {
pass, err := AskPassword(nil, false)
if err != nil {
- return err
+ return nil, err
}
encKey.Kdf(pass, int(encKey.KDFRounds))
}
if !encKey.IsValid() {
- return errors.New("invalid key")
+ return nil, ErrInvalidKey
+ }
+ return encKey, nil
+}
+
+func OpenPub(fname string) (*PubKey, error) {
+ f, err := ParseFile(fname)
+ if err != nil {
+ return nil, err
+ }
+ pubKey := new(PubKey)
+ if err := Unmarshal(f.RawKey, pubKey); err != nil {
+ return nil, err
+ }
+ if !pubKey.IsValid() {
+ return nil, ErrInvalidKey
+ }
+ return pubKey, nil
+}
+
+func OpenSig(fname string) (*Sig, error) {
+ f, err := ParseFile(fname)
+ if err != nil {
+ return nil, err
+ }
+ sig := new(Sig)
+ if err := Unmarshal(f.RawKey, sig); err != nil {
+ return nil, err
+ }
+ if !sig.IsValid() {
+ return nil, ErrInvalidKey
+ }
+ return sig, nil
+}
+
+func Sign(msgFile, secFile string, embed bool) error {
+ encKey, err := OpenSec(secFile)
+ if err != nil {
+ return err
}
+
body, err := ioutil.ReadFile(msgFile)
if err != nil {
return err