2015-11-27 23 views
7

Sto giocando con la scrittura di un programma Go che scarica e verifica i file. Spero di evitare di forzare l'utente a installare gnupg (se possibile).Verifica firma gpg in Go openpgp

È possibile verificare un file scaricato con una firma gpg (file asc) come descritto here o here utilizzando la lib di openpgp di Go o qualche altra libreria Go?

Sarebbe gradito qualsiasi esempio che dimostri come utilizzare openpgp per verificare un file con una firma asc.

+0

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

+0

@ saarrrr, ho già incontrato quella libreria, ma non è ovvio per me come usarla in questo modo. Se potessi fornire un esempio, sarebbe apprezzato. Ho cercato di chiarire un po 'la mia domanda. – mikewilliamson

+0

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

risposta

3

ho potuto verificare una firma gpg utilizzando il seguente codice:

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) 
} 

codice completo: https://gist.github.com/lsowen/d420a64821414cd2adfb