Skip to content

Commit

Permalink
pubkey packet parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
bennomadic committed Jan 4, 2012
1 parent f12ea13 commit f81e8a4
Showing 1 changed file with 33 additions and 1 deletion.
34 changes: 33 additions & 1 deletion pgpdump/packet.py
@@ -1,6 +1,8 @@
import binascii
import math

from datetime import datetime

NEW_TAG_FLAG = 0x40
TAG_MASK = 0x3f
PARTIAL_MASK = 0x1f
Expand Down Expand Up @@ -279,6 +281,36 @@ def lookup_signature_subtype(typ):
return "reserved"
return subpacket_types.get(typ, "unknown")


class PublicKeyPacket(Packet, AlgoLookup):
def __init__(self, *args, **kwargs):
self.pubkey_version = None
self.creation_time = None
self.datetime = None
self.mod = None
self.exp = None
super(PublicKeyPacket, self).__init__(*args, **kwargs)

def parse(self):
self.pubkey_version = self.data[0]
offset = 1
if self.pubkey_version == 4:
ts = _getint(self.data, offset, 4)
self.creation_time = ts
self.datetime = datetime.fromtimestamp(ts)
offset += 4

self.raw_pub_algorithm = self.data[offset]
self.pub_algorithm = self.lookup_pub_algorithm(self.data[offset])
offset += 1

#If RSA:
if self.raw_pub_algorithm == 1:
self.mod, offset = _get_mpi(self.data, offset)
self.exp, offset = _get_mpi(self.data, offset)
self.exp_int = int(self.exp, 16)


TAG_TYPES = {
# (Name, PacketType) tuples
0: ("Reserved", None),
Expand All @@ -287,7 +319,7 @@ def lookup_signature_subtype(typ):
3: ("Symmetric-Key Encrypted Session Key Packet", None),
4: ("One-Pass Signature Packet", None),
5: ("Secret Key Packet", None),
6: ("Public Key Packet", None),
6: ("Public Key Packet", PublicKeyPacket),
7: ("Secret Subkey Packet", None),
8: ("Compressed Data Packet", None),
9: ("Symmetrically Encrypted Data Packet", None),
Expand Down

0 comments on commit f81e8a4

Please sign in to comment.