2015-11-27 42 views
7

Używam pisania programu Go, który pobiera i weryfikuje pliki. Mam nadzieję, że nie będę zmuszał użytkownika do instalacji gnupg (jeśli to możliwe).Weryfikacja podpisu gpg w Go openpgp

Czy można zweryfikować pobrany plik z podpisem gpg (plik asc) zgodnie z opisem here lub here przy użyciu Go's openpgp lib lub innej biblioteki Go?

Wszelkie przykłady pokazujące, jak używać openpgp do weryfikacji pliku z podpisem asc, byłyby mile widziane.

+0

https://godoc.org/golang.org/x/crypto/openpgp – saarrrr

+0

@ Saarrrr, już się zetknąłem z tą biblioteką, ale nie jest dla mnie oczywiste, jak z niej korzystać w ten sposób. Jeśli mógłbyś podać przykład, byłoby to docenione. Próbowałem trochę wyjaśnić moje pytanie. – mikewilliamson

+0

https://gist.github.com/stuart-warren/93750a142d3de4e8fdd2 – saarrrr

Odpowiedz

3

byłem w stanie zweryfikować podpis gpg stosując następujący kod:

package main 

import (
     "fmt" 
     "golang.org/x/crypto/openpgp" 
     "os" 
) 

func main() { 
     keyRingReader, err := os.Open("signer-pubkey.asc") 
     if err != nil { 
       fmt.Println(err) 
       return 
     } 

     signature, err := os.Open("signature.asc") 
     if err != nil { 
       fmt.Println(err) 
       return 
     } 

     verification_target, err := os.Open("mysql-5.7.9-win32.zip") 
     if err != nil { 
       fmt.Println(err) 
       return 
     } 

     keyring, err := openpgp.ReadArmoredKeyRing(keyRingReader) 
     if err != nil { 
       fmt.Println("Read Armored Key Ring: " + err.Error()) 
       return 
     } 
     entity, err := openpgp.CheckArmoredDetachedSignature(keyring, verification_target, signature) 
     if err != nil { 
       fmt.Println("Check Detached Signature: " + err.Error()) 
       return 
     } 

     fmt.Println(entity) 
} 

Pełny kod: https://gist.github.com/lsowen/d420a64821414cd2adfb