Add KeyIDs public API functionality (#76)
* Add public KeyIDs functions * Add signature keyIDs functions * Lint code
This commit is contained in:
parent
1f4d966115
commit
2f89b9fa0e
7 changed files with 212 additions and 9 deletions
|
|
@ -223,8 +223,8 @@ func (msg *PGPMessage) GetArmoredWithCustomHeaders(comment, version string) (str
|
|||
return armor.ArmorWithTypeAndCustomHeaders(msg.Data, constants.PGPMessageHeader, version, comment)
|
||||
}
|
||||
|
||||
// getEncryptionKeyIds Returns the key IDs of the keys to which the session key is encrypted.
|
||||
func (msg *PGPMessage) getEncryptionKeyIDs() ([]uint64, bool) {
|
||||
// GetEncryptionKeyIDs Returns the key IDs of the keys to which the session key is encrypted.
|
||||
func (msg *PGPMessage) GetEncryptionKeyIDs() ([]uint64, bool) {
|
||||
packets := packet.NewReader(bytes.NewReader(msg.Data))
|
||||
var err error
|
||||
var ids []uint64
|
||||
|
|
@ -252,6 +252,21 @@ Loop:
|
|||
return ids, false
|
||||
}
|
||||
|
||||
// GetHexEncryptionKeyIDs Returns the key IDs of the keys to which the session key is encrypted.
|
||||
func (msg *PGPMessage) GetHexEncryptionKeyIDs() ([]string, bool) {
|
||||
return getHexKeyIDs(msg.GetEncryptionKeyIDs())
|
||||
}
|
||||
|
||||
// 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)
|
||||
}
|
||||
|
||||
// GetHexSignatureKeyIDs Returns the key IDs of the keys to which the session key is encrypted.
|
||||
func (msg *PGPMessage) GetHexSignatureKeyIDs() ([]string, bool) {
|
||||
return getHexKeyIDs(msg.GetSignatureKeyIDs())
|
||||
}
|
||||
|
||||
// GetBinaryDataPacket returns the unarmored binary datapacket as a []byte.
|
||||
func (msg *PGPSplitMessage) GetBinaryDataPacket() []byte {
|
||||
return msg.DataPacket
|
||||
|
|
@ -386,6 +401,16 @@ func (msg *PGPSignature) GetArmored() (string, error) {
|
|||
return armor.ArmorWithType(msg.Data, constants.PGPSignatureHeader)
|
||||
}
|
||||
|
||||
// GetSignatureKeyIDs Returns the key IDs of the keys to which the (readable) signature packets are encrypted to.
|
||||
func (msg *PGPSignature) GetSignatureKeyIDs() ([]uint64, bool) {
|
||||
return getSignatureKeyIDs(msg.Data)
|
||||
}
|
||||
|
||||
// GetHexSignatureKeyIDs Returns the key IDs of the keys to which the session key is encrypted.
|
||||
func (msg *PGPSignature) GetHexSignatureKeyIDs() ([]string, bool) {
|
||||
return getHexKeyIDs(msg.GetSignatureKeyIDs())
|
||||
}
|
||||
|
||||
// GetBinary returns the unarmored signed data as a []byte.
|
||||
func (msg *ClearTextMessage) GetBinary() []byte {
|
||||
return msg.Data
|
||||
|
|
@ -425,3 +450,48 @@ func IsPGPMessage(data string) bool {
|
|||
constants.PGPMessageHeader + "-----")
|
||||
return re.MatchString(data)
|
||||
}
|
||||
|
||||
func getSignatureKeyIDs(data []byte) ([]uint64, bool) {
|
||||
packets := packet.NewReader(bytes.NewReader(data))
|
||||
var err error
|
||||
var ids []uint64
|
||||
var onePassSignaturePacket *packet.OnePassSignature
|
||||
var signaturePacket *packet.Signature
|
||||
|
||||
Loop:
|
||||
for {
|
||||
var p packet.Packet
|
||||
if p, err = packets.Next(); err == io.EOF {
|
||||
break
|
||||
}
|
||||
switch p := p.(type) {
|
||||
case *packet.OnePassSignature:
|
||||
onePassSignaturePacket = p
|
||||
ids = append(ids, onePassSignaturePacket.KeyId)
|
||||
case *packet.Signature:
|
||||
signaturePacket = p
|
||||
if signaturePacket.IssuerKeyId != nil {
|
||||
ids = append(ids, *signaturePacket.IssuerKeyId)
|
||||
}
|
||||
case *packet.SymmetricallyEncrypted,
|
||||
*packet.AEADEncrypted,
|
||||
*packet.Compressed,
|
||||
*packet.LiteralData:
|
||||
break Loop
|
||||
}
|
||||
}
|
||||
if len(ids) > 0 {
|
||||
return ids, true
|
||||
}
|
||||
return ids, false
|
||||
}
|
||||
|
||||
func getHexKeyIDs(keyIDs []uint64, ok bool) ([]string, bool) {
|
||||
hexIDs := make([]string, len(keyIDs))
|
||||
|
||||
for i, id := range keyIDs {
|
||||
hexIDs[i] = keyIDToHex(id)
|
||||
}
|
||||
|
||||
return hexIDs, ok
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue