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