41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
package tbget
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/ProtonMail/go-crypto/openpgp"
|
|
)
|
|
|
|
func Verify(keyrings, detached, target string) error {
|
|
keyRingReader, err := os.Open(keyrings)
|
|
if err != nil {
|
|
return fmt.Errorf("Verify: failed to open keyrings: %s\n\t%s", err, keyrings)
|
|
}
|
|
|
|
signature, err := os.Open(detached)
|
|
if err != nil {
|
|
return fmt.Errorf("Verify: failed to open detached signature: %s\n\t%s", err, detached)
|
|
}
|
|
|
|
verification_target, err := os.Open(target)
|
|
if err != nil {
|
|
return fmt.Errorf("Verify: failed to open verification target: %s\n\t%s", err, target)
|
|
}
|
|
|
|
entities, err := openpgp.ReadArmoredKeyRing(keyRingReader)
|
|
if err != nil {
|
|
return fmt.Errorf("Verify: failed to read keyrings: %s\n\t%s", err, keyrings)
|
|
}
|
|
log.Printf("Verify: %s", fmt.Sprintf("Read %d keyrings", len(entities)))
|
|
log.Printf("Verifying: %s against %s\n", target, detached)
|
|
log.Printf("Verify: using keyring %s\n", keyrings)
|
|
_, err = openpgp.CheckArmoredDetachedSignature(entities, verification_target, signature, nil)
|
|
if err != nil {
|
|
return fmt.Errorf("Verify: failed to verify signature: %s\n\t%s\n\t%s\n\t%s", err, keyrings, detached, target)
|
|
}
|
|
|
|
return nil
|
|
}
|