This commit is contained in:
Ben Toews 2017-11-22 11:41:34 -07:00
Родитель a14102fc65
Коммит 2cdd39cbaf
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E9C423BE17EFEE70
3 изменённых файлов: 113 добавлений и 0 удалений

1
.gitignore поставляемый Normal file
Просмотреть файл

@ -0,0 +1 @@
gss

Просмотреть файл

@ -1,5 +1,115 @@
package main
import (
"bytes"
"encoding/pem"
"fmt"
"io"
"os"
"github.com/mastahyeti/cms"
)
func commandVerify() int {
if len(fileArgs) < 2 {
return verifyAttached()
}
return verifyDetached()
}
func verifyAttached() int {
var (
f *os.File
err error
)
// Read in signature
if len(fileArgs) == 1 {
if f, err = os.Open(fileArgs[0]); err != nil {
panic(err)
}
defer f.Close()
} else {
f = os.Stdin
}
buf := new(bytes.Buffer)
if _, err = io.Copy(buf, f); err != nil {
panic(err)
}
// Try decoding as PEM
var der []byte
if blk, _ := pem.Decode(buf.Bytes()); blk != nil {
der = blk.Bytes
} else {
der = buf.Bytes()
}
// Parse signature
sd, err := cms.ParseSignedData(der)
if err != nil {
panic(err)
}
// Verify signature
if err = sd.Verify(); err != nil {
fmt.Printf("Sinature verification failed: %s\n", err.Error())
return 1
}
fmt.Println("Signature verified")
return 0
}
func verifyDetached() int {
// Read in signature
f, err := os.Open(fileArgs[0])
if err != nil {
panic(err)
}
defer f.Close()
buf := new(bytes.Buffer)
if _, err = io.Copy(buf, f); err != nil {
panic(err)
}
// Try decoding as PEM
var der []byte
if blk, _ := pem.Decode(buf.Bytes()); blk != nil {
der = blk.Bytes
} else {
der = buf.Bytes()
}
// Parse signature
sd, err := cms.ParseSignedData(der)
if err != nil {
panic(err)
}
// Read in signed data
if fileArgs[1] == "-" {
f = os.Stdin
} else {
if f, err = os.Open(fileArgs[1]); err != nil {
panic(err)
}
defer f.Close()
}
// Verify signature
buf.Reset()
if _, err = io.Copy(buf, f); err != nil {
panic(err)
}
if err = sd.VerifyDetached(buf.Bytes()); err != nil {
fmt.Printf("Sinature verification failed: %s\n", err.Error())
return 1
}
fmt.Println("Signature verified")
return 0
}

Просмотреть файл

@ -19,12 +19,14 @@ var (
armorFlag = getopt.BoolLong("armor", 'a', "create ascii armored output")
statusFdOpt = getopt.IntLong("status-fd", 0, -1, "Write special status strings to the file descriptor n.", "n")
keyFormatOpt = getopt.EnumLong("keyid-format", 0, []string{"short", "0xshort", "long", "0xlong"}, "short", "Select how to display key IDs.", "{short|0xshort|long|0xlong}")
fileArgs []string
)
func main() {
getopt.HelpColumn = 30
getopt.SetParameters("[files]")
getopt.Parse()
fileArgs = getopt.Args()
status := 1
if *helpFlag {