Prepare release 2.7.5 with packet API (#269)
Adds the following API functions: - API to get signature key IDs for mobile: func (msg *PGPMessage) GetHexSignatureKeyIDsJson() []byte - API to get encryption key IDs for mobile: func (msg *PGPMessage) GetHexEncryptionKeyIDsJson() []byte - API to get the number of key packets in a PGP message: func (msg *PGPSplitMessage) GetNumberOfKeyPackets() (int, error) - API in package `helper` to encrypt a PGP message to an additional key: func EncryptPGPMessageToAdditionalKey(messageToModify *crypto.PGPSplitMessage, keyRing *crypto.KeyRing, additionalKey *crypto.KeyRing) error
This commit is contained in:
parent
02a4599829
commit
c6a3058e2e
7 changed files with 157 additions and 2 deletions
|
|
@ -3,6 +3,7 @@ package crypto
|
|||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
goerrors "errors"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
|
|
@ -287,6 +288,21 @@ func (msg *PGPMessage) GetHexEncryptionKeyIDs() ([]string, bool) {
|
|||
return getHexKeyIDs(msg.GetEncryptionKeyIDs())
|
||||
}
|
||||
|
||||
// GetHexEncryptionKeyIDsJson returns the key IDs of the keys to which the session key is encrypted as a JSON array.
|
||||
// If an error occurs it returns nil.
|
||||
// Helper function for go-mobile clients.
|
||||
func (msg *PGPMessage) GetHexEncryptionKeyIDsJson() []byte {
|
||||
hexIds, ok := msg.GetHexEncryptionKeyIDs()
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
hexIdsJson, err := json.Marshal(hexIds)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return hexIdsJson
|
||||
}
|
||||
|
||||
// GetSignatureKeyIDs Returns the key IDs of the keys to which the (readable) signature packets are encrypted to.
|
||||
func (msg *PGPMessage) GetSignatureKeyIDs() ([]uint64, bool) {
|
||||
return getSignatureKeyIDs(msg.Data)
|
||||
|
|
@ -297,6 +313,20 @@ func (msg *PGPMessage) GetHexSignatureKeyIDs() ([]string, bool) {
|
|||
return getHexKeyIDs(msg.GetSignatureKeyIDs())
|
||||
}
|
||||
|
||||
// GetHexSignatureKeyIDsJson returns the key IDs of the keys to which the (readable) signature packets
|
||||
// are encrypted to as a JSON array. Helper function for go-mobile clients.
|
||||
func (msg *PGPMessage) GetHexSignatureKeyIDsJson() []byte {
|
||||
sigHexSigIds, ok := msg.GetHexSignatureKeyIDs()
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
sigHexKeyIdsJSON, err := json.Marshal(sigHexSigIds)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return sigHexKeyIdsJSON
|
||||
}
|
||||
|
||||
// GetBinaryDataPacket returns the unarmored binary datapacket as a []byte.
|
||||
func (msg *PGPSplitMessage) GetBinaryDataPacket() []byte {
|
||||
return msg.DataPacket
|
||||
|
|
@ -324,6 +354,27 @@ func (msg *PGPSplitMessage) GetPGPMessage() *PGPMessage {
|
|||
return NewPGPMessage(append(msg.KeyPacket, msg.DataPacket...))
|
||||
}
|
||||
|
||||
// GetNumberOfKeyPackets returns the number of keys packets in this message.
|
||||
func (msg *PGPSplitMessage) GetNumberOfKeyPackets() (int, error) {
|
||||
bytesReader := bytes.NewReader(msg.KeyPacket)
|
||||
packets := packet.NewReader(bytesReader)
|
||||
var keyPacketCount int
|
||||
for {
|
||||
p, err := packets.Next()
|
||||
if goerrors.Is(err, io.EOF) {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
switch p.(type) {
|
||||
case *packet.SymmetricKeyEncrypted, *packet.EncryptedKey:
|
||||
keyPacketCount += 1
|
||||
}
|
||||
}
|
||||
return keyPacketCount, nil
|
||||
}
|
||||
|
||||
// SplitMessage splits the message into key and data packet(s).
|
||||
// Parameters are for backwards compatibility and are unused.
|
||||
func (msg *PGPMessage) SplitMessage() (*PGPSplitMessage, error) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue