From a952ddec53f5657a31f4c205aaf19bbb421ff8be Mon Sep 17 00:00:00 2001
From: Adrien Beraud <adrien.beraud@savoirfairelinux.com>
Date: Thu, 27 Apr 2017 03:21:42 +0200
Subject: [PATCH] python: add crypto encrypt/decrypt

---
 python/opendht.pyx     | 18 ++++++++++++++++++
 python/opendht_cpp.pxd |  4 ++++
 2 files changed, 22 insertions(+)

diff --git a/python/opendht.pyx b/python/opendht.pyx
index f54c7aff..024ac9b0 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 1b62f436..9cf1330e 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()
-- 
GitLab