PRE reencryption to pubkey

pull/15/head
Michael Egorov 2017-08-19 13:17:54 -07:00
parent a7e2f70ddb
commit 8febc2798c
2 changed files with 43 additions and 2 deletions

View File

@ -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

View File

@ -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)