MCPcopy Create free account
hub / github.com/SecurityInnovation/PGPy / decrypt

Method decrypt

pgpy/packet/fields.py:1755–1773  ·  view source on GitHub ↗
(self, pk, *args)

Source from the content-addressed store, hash-verified

1753 return ct
1754
1755 def decrypt(self, pk, *args):
1756 km = pk.keymaterial
1757 if km.oid == EllipticCurveOID.Curve25519:
1758 v = x25519.X25519PublicKey.from_public_bytes(self.p.x)
1759 s = km.__privkey__().exchange(v)
1760 else:
1761 # assemble the public component of ephemeral key v
1762 v = ec.EllipticCurvePublicNumbers(self.p.x, self.p.y, km.oid.curve()).public_key(default_backend())
1763 # compute s using the inverse of how it was derived during encryption
1764 s = km.__privkey__().exchange(ec.ECDH(), v)
1765
1766 # derive the wrapping key
1767 z = km.kdf.derive_key(s, km.oid, PubKeyAlgorithm.ECDH, pk.fingerprint)
1768
1769 # unwrap and unpad m
1770 _m = aes_key_unwrap(z, self.c, default_backend())
1771
1772 padder = PKCS7(64).unpadder()
1773 return padder.update(_m) + padder.finalize()
1774
1775 def __init__(self):
1776 super(ECDHCipherText, self).__init__()

Callers

nothing calls this directly

Calls 3

updateMethod · 0.80
__privkey__Method · 0.45
derive_keyMethod · 0.45

Tested by

no test coverage detected