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