Skip to content
Snippets Groups Projects
Commit 4540be74 authored by Adrien Béraud's avatar Adrien Béraud
Browse files

python: add more crypto bindings

parent 7c85b74d
No related branches found
No related tags found
No related merge requests found
......@@ -250,7 +250,10 @@ struct OPENDHT_PUBLIC Certificate {
* ordered from subject to issuer
*/
Certificate(const Blob& crt);
Certificate(const uint8_t* dat, size_t dat_size) {
Certificate(const std::string& pem) : cert(nullptr) {
unpack((const uint8_t*)pem.data(), pem.size());
}
Certificate(const uint8_t* dat, size_t dat_size) : cert(nullptr) {
unpack(dat, dat_size);
}
......
......@@ -241,6 +241,24 @@ cdef class NodeSet(object):
def __iter__(self):
return NodeSetIter(self)
cdef class PrivateKey(_WithID):
cdef cpp.PrivateKey _key
def getId(self):
h = InfoHash()
h._infohash = self._key.getPublicKey().getId()
return h
def getPublicKey(self):
pk = PublicKey()
pk._key = self._key.getPublicKey()
return pk
def __str__(self):
return self.getId().toString().decode()
@staticmethod
def generate():
k = PrivateKey()
k._key = cpp.PrivateKey.generate()
return k
cdef class PublicKey(_WithID):
cdef cpp.PublicKey _key
def getId(self):
......@@ -250,10 +268,23 @@ cdef class PublicKey(_WithID):
cdef class Certificate(_WithID):
cdef shared_ptr[cpp.Certificate] _cert
def __init__(self, bytes dat = None):
if dat:
self._cert = cpp.make_shared[cpp.Certificate](<cpp.string>dat)
def getId(self):
h = InfoHash()
if self._cert:
h._infohash = self._cert.get().getId()
return h
def toString(self):
return self._cert.get().toString().decode()
@staticmethod
def generate(PrivateKey k, str name, Identity i = Identity(), bool is_ca = False):
c = Certificate()
c._cert = cpp.make_shared[cpp.Certificate](cpp.Certificate.generate(k._key, name.encode(), i._id, is_ca))
return c
def __bytes__(self):
return self._cert.get().toString() if self._cert else b''
cdef class ListenToken(object):
cdef cpp.InfoHash _h
......@@ -297,6 +328,7 @@ cdef class DhtRunner(_WithID):
self.thisptr.reset(new cpp.DhtRunner())
def getId(self):
h = InfoHash()
if self.thisptr:
h._infohash = self.thisptr.get().getId()
return h
def getNodeId(self):
......
......@@ -32,7 +32,9 @@ cdef extern from "<memory>" namespace "std" nogil:
shared_ptr(T*) except +
T* get()
T operator*()
bool operator bool() const
void reset(T*)
shared_ptr[T] make_shared[T](...) except +
cdef extern from "<functional>" namespace "std" nogil:
cdef cppclass hash[T]:
......@@ -82,6 +84,8 @@ cdef extern from "opendht/crypto.h" namespace "dht::crypto":
cdef cppclass PrivateKey:
PrivateKey()
PublicKey getPublicKey() const
@staticmethod
PrivateKey generate()
cdef cppclass PublicKey:
PublicKey()
......@@ -89,7 +93,11 @@ cdef extern from "opendht/crypto.h" namespace "dht::crypto":
cdef cppclass Certificate:
Certificate()
Certificate(string pem)
InfoHash getId() const
string toString() const
@staticmethod
Certificate generate(PrivateKey key, string name, Identity ca, bool is_ca)
cdef extern from "opendht/value.h" namespace "dht":
cdef cppclass Value:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment