cic-cli/cic/proof.py
2021-10-10 21:30:18 +02:00

96 lines
2.1 KiB
Python

# standard imports
import os
import json
import logging
import tempfile
import cbor2
# external imports
from hexathon import strip_0x
# local imports
from .base import *
logg = logging.getLogger(__name__)
class Proof(Data):
def __init__(self, path='.', attachments=None):
super(Proof, self).__init__()
self.namespace = 'ge'
self.description = None
self.path = path
self.extra_attachments = attachments
self.attachments = {}
self.proof_path = os.path.join(self.path, 'proof.json')
self.temp_proof_path = tempfile.mkstemp()[1]
def load(self):
super(Proof, self).load()
f = open(self.proof_path, 'r')
o = json.load(f)
f.close()
self.set_version(o['version'])
self.description = o['description']
self.namespace = o['namespace']
self.inited = True
def start(self):
super(Proof, self).start()
proof_template_file_path = os.path.join(data_dir, 'proof_template_v{}.json'.format(self.version()))
f = open(proof_template_file_path)
o = json.load(f)
f.close()
f = open(self.proof_path, 'w')
json.dump(o, f)
f.close()
def asdict(self):
return {
'version': self.version(),
'namespace': self.namespace,
'description': self.description,
}
def __get_ordered_hashes(self):
ks = list(self.attachments.keys())
ks.sort()
return ks
def get(self):
v = self.asdict()
b = cbor2.dumps(v)
f = open(self.temp_proof_path, 'wb')
f.write(b)
f.close()
hsh = self.hash(b).hex()
self.attachments[hsh] = self.temp_proof_path
if self.extra_attachments != None:
a = self.extra_attachments.asdict()
for k in a.keys():
self.attachments[k] = a[k]
hshs = self.__get_ordered_hashes()
return hshs
def __str__(self):
return "description = {}\n".format(self.description)