mirror of https://github.com/nucypher/nucypher.git
PRE reencryption to pubkey
parent
a7e2f70ddb
commit
8febc2798c
|
@ -1,3 +1,39 @@
|
|||
from npre.bbs98 import PRE # noqa
|
||||
import base64
|
||||
import msgpack
|
||||
from nkms import crypto
|
||||
from npre.bbs98 import PRE as BasePRE
|
||||
|
||||
# This is just to develop the interface, some more secure algos should be used
|
||||
|
||||
def convert_priv(sk):
|
||||
return b'0:' + base64.encodebytes(sk).strip()
|
||||
|
||||
|
||||
class PRE(BasePRE):
|
||||
"""
|
||||
Public key based single-hop version of BBS98.
|
||||
"""
|
||||
KEY_SIZE = 32
|
||||
|
||||
def priv2pub(self, priv):
|
||||
"""
|
||||
Private key isa pure 32-bytes random number
|
||||
"""
|
||||
if type(priv) is str:
|
||||
priv = priv.encode()
|
||||
if type(priv) is bytes:
|
||||
priv = convert_priv(priv)
|
||||
return super(PRE, self).priv2pub(priv)
|
||||
|
||||
def rekey(self, priv1, pub2):
|
||||
priv_to = crypto.random(self.KEY_SIZE)
|
||||
rk = self.rekey(convert_priv(priv1), convert_priv(priv_to), dtype=bytes)
|
||||
epriv_to = self.encrypt(pub2, priv_to)
|
||||
return msgpack.dumps([rk, epriv_to])
|
||||
|
||||
def reencrypt(self, rekey, emsg):
|
||||
rk, epriv = msgpack.loads(rekey)
|
||||
remsg = super(PRE, self).reencrypt(rk, emsg)
|
||||
return msgpack.dumps([2, epriv, remsg]) # type 2 emsg
|
||||
|
||||
def decrypt(self, priv, emsg, padding=True):
|
||||
pass
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from nkms.crypto import default_algorithm
|
||||
from nkms.crypto import symmetric_from_algorithm
|
||||
from nkms.crypto import pre_from_algorithm
|
||||
from nkms import crypto
|
||||
|
||||
|
||||
|
@ -12,3 +13,7 @@ def test_symmetric():
|
|||
edata = cipher.encrypt(data)
|
||||
assert edata != data
|
||||
assert cipher.decrypt(edata) == data
|
||||
|
||||
|
||||
def test_pre():
|
||||
pre = pre_from_algorithm(default_algorithm)
|
||||
|
|
Loading…
Reference in New Issue