Я разрабатываю API с использованием Golang, и у меня есть файл JSON keys.json
следующим образом:
{
"publicKeys": {
"Flex": "<valid pgp public key>",
"Flex2": "<valid pgp public key>"
},
"privateKey": "<valid pgp private key>"
}
Чтобы разобрать это, у меня есть следующая модель
type PGPKeys struct {
PublicKeys map[string]string `json:"publicKeys"`
PrivateKey string `json:"privateKey"`
}
и я отменяю код, используя
keysJSONFile, err := os.Open(keysPath)
if keysJSONFile != nil {
defer keysJSONFile.Close()
}
if err != nil {
return nil, err
}
keysJSONBytes, err := ioutil.ReadAll(keysJSONFile)
if err != nil {
return nil, err
}
var pgpKeys PGPKeys
err = json.Unmarshal(keysJSONBytes, &pgpKeys)
if err != nil {
return nil, err
}
Позже, когда я использую openpgp
для получения пакета открытого ключа, меня встречает ошибка EOF
, которая armor.Decode
возвращает, когда не удается найти какие-либо блоки - но я не уверен, почему это происходит
func GetPublicKeyPacket(publicKey []byte) (*packet.PublicKey, error) {
publicKeyReader := bytes.NewReader(publicKey)
block, err := armor.Decode(publicKeyReader)
if err != nil {
return nil, err
}
if block.Type != openpgp.PublicKeyType {
return nil, errors.New("Invalid public key data")
}
packetReader := packet.NewReader(block.Body)
pkt, err := packetReader.Next()
if err != nil {
return nil, err
}
key, ok := pkt.(*packet.PublicKey)
if !ok {
return nil, err
}
return key, nil
}
ПРИМЕЧАНИЕ: Когда я вызываю функцию, я выполняю преобразование типов, используя что-то вроде
publicKeyPacket, err := pgp.GetPublicKeyPacket([]byte(h.PGPKeys.PublicKeys[h.Config.PGPIdentifier]))
Наконец, я попытался переместить ключи в отдельные файлы TXT и , который работает , но по какой-то причине наличие их в JSON не