diff --git a/python/opendht.pyx b/python/opendht.pyx
index f54c7aff35a9b9b48ee86ab64222ab7ff408c66f..024ac9b030769804ff955cdf087a05651458dc4d 100644
--- a/python/opendht.pyx
+++ b/python/opendht.pyx
@@ -251,6 +251,15 @@ cdef class PrivateKey(_WithID):
         pk = PublicKey()
         pk._key = self._key.get().getPublicKey()
         return pk
+    def decrypt(self, bytes dat):
+        cdef size_t d_len = len(dat)
+        cdef cpp.uint8_t* d_ptr = <cpp.uint8_t*>dat
+        cdef cpp.Blob indat
+        indat.assign(d_ptr, <cpp.uint8_t*>(d_ptr + d_len))
+        cdef cpp.Blob decrypted = self._key.get().decrypt(indat)
+        cdef char* decrypted_c_str = <char *>decrypted.data()
+        cdef Py_ssize_t length = decrypted.size()
+        return decrypted_c_str[:length]
     def __str__(self):
         return self.getId().toString().decode()
     @staticmethod
@@ -265,6 +274,15 @@ cdef class PublicKey(_WithID):
         h = InfoHash()
         h._infohash = self._key.getId()
         return h
+    def encrypt(self, bytes dat):
+        cdef size_t d_len = len(dat)
+        cdef cpp.uint8_t* d_ptr = <cpp.uint8_t*>dat
+        cdef cpp.Blob indat
+        indat.assign(d_ptr, <cpp.uint8_t*>(d_ptr + d_len))
+        cdef cpp.Blob encrypted = self._key.encrypt(indat)
+        cdef char* encrypted_c_str = <char *>encrypted.data()
+        cdef Py_ssize_t length = encrypted.size()
+        return encrypted_c_str[:length]
 
 cdef class Certificate(_WithID):
     cdef shared_ptr[cpp.Certificate] _cert
diff --git a/python/opendht_cpp.pxd b/python/opendht_cpp.pxd
index 1b62f4367603b156f0937c0b4694ea1f03cb8346..9cf1330e0b7af9bb0bd658b18dbc3fdfd330aa7a 100644
--- a/python/opendht_cpp.pxd
+++ b/python/opendht_cpp.pxd
@@ -77,6 +77,8 @@ cdef extern from "opendht/sockaddr.h" namespace "dht":
         sa_family_t getFamily() const
         void setFamily(sa_family_t f)
 
+ctypedef vector[uint8_t] Blob
+
 cdef extern from "opendht/crypto.h" namespace "dht::crypto":
     ctypedef pair[shared_ptr[PrivateKey], shared_ptr[Certificate]] Identity
     cdef Identity generateIdentity(string name, Identity ca, unsigned bits)
@@ -84,12 +86,14 @@ cdef extern from "opendht/crypto.h" namespace "dht::crypto":
     cdef cppclass PrivateKey:
         PrivateKey()
         PublicKey getPublicKey() const
+        Blob decrypt(Blob data) const
         @staticmethod
         PrivateKey generate()
 
     cdef cppclass PublicKey:
         PublicKey()
         InfoHash getId() const
+        Blob encrypt(Blob data) const
 
     cdef cppclass Certificate:
         Certificate()