github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/internal/build/pgp.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:38</date> 10 //</624450091691806720> 11 12 13 //signfile读取输入文件的内容并对其进行签名(装甲格式) 14 //在提供密钥的情况下,将签名放入输出文件。 15 16 package build 17 18 import ( 19 "bytes" 20 "fmt" 21 "os" 22 23 "golang.org/x/crypto/openpgp" 24 ) 25 26 //pgpsignfile从指定的字符串分析pgp私钥并创建 27 //signature file into the output parameter of the input file. 28 // 29 //注意,此方法假定一个键将是pgpkey参数中的容器, 30 //此外,它是装甲格式。 31 func PGPSignFile(input string, output string, pgpkey string) error { 32 //解析密钥环并确保我们只有一个私钥。 33 keys, err := openpgp.ReadArmoredKeyRing(bytes.NewBufferString(pgpkey)) 34 if err != nil { 35 return err 36 } 37 if len(keys) != 1 { 38 return fmt.Errorf("key count mismatch: have %d, want %d", len(keys), 1) 39 } 40 //创建用于签名的输入和输出流 41 in, err := os.Open(input) 42 if err != nil { 43 return err 44 } 45 defer in.Close() 46 47 out, err := os.Create(output) 48 if err != nil { 49 return err 50 } 51 defer out.Close() 52 53 //生成签名并返回 54 return openpgp.ArmoredDetachSign(out, keys[0], in, nil) 55 } 56 57 //PGPKeyID parses an armored key and returns the key ID. 58 func PGPKeyID(pgpkey string) (string, error) { 59 keys, err := openpgp.ReadArmoredKeyRing(bytes.NewBufferString(pgpkey)) 60 if err != nil { 61 return "", err 62 } 63 if len(keys) != 1 { 64 return "", fmt.Errorf("key count mismatch: have %d, want %d", len(keys), 1) 65 } 66 return keys[0].PrimaryKey.KeyIdString(), nil 67 } 68