def __init__(self, fname, fid=None, signer=None, create_if_notexisting=False): self.fname = fname self.fid = fid self.signer = signer self.cine = create_if_notexisting self.seq = 0 self.pcap = pcap.PCAP(fname) self.hprev = None try: self.pcap.open('r') # find highest seq number: w = self.pcap.read_backwards(True) e = event.EVENT() e.from_wire(w) if fid != None and e.fid != fid: print("feed ID mismatch:", e.fid, "instead of", fid) self.pcap.close() self.pcap = None return self.fid, self.seq = e.fid, e.seq self.hprev = event.get_hash(e.metabits) self.pcap.close() except Exception as e: if not self.cine: self.pcap = None print(f"error opening file {fname}") else: self.pcap.open('w') self.pcap.close()
def write(self, c): # create new log extension with given content if self.seq == 0: self.hprev = None e = event.EVENT(fid=self.fid, seq=self.seq+1, hprev=self.hprev, content=c) metabits = e.get_metabits(self.signer.get_sinfo()) signature = self.signer.sign(metabits) w = e.to_wire(signature) self._append(w) self.hprev = event.get_hash(metabits) return w
def f_read(self,pcapfile,fid,signer): f = FEED(pcapfile, fid, signer) f.seq = 0 f.hprev = None print("Checking feed " + str(fid)) for e in f: if not f.is_valid_extension(e): print("-> event " + str(f.seq+1) + ": chaining or signature problem") else: print("-> event " + str(e.seq) + ": ok, content= " + str(e.content())) f.seq += 1 f.hprev = event.get_hash(e.metabits) return f
def ingest(self, e): # append event to log only if a valid extension # return False if failing try: if not self.is_valid_extension(e): print(" invalid extension") return False self._append(e.to_wire()) self.hprev = event.get_hash(e.metabits) return True except Exception as x: print(x) pass print(" invalid packet") return False
def get_feed_content(self, fid): # reads content from log and returns feed if fid == self.sensor_feed.fid: f = self.sensor_feed elif fid == self.control_feed.fid: f = self.control_feed f.seq = 0 f.hprev = None for e in f: if not f.is_valid_extension(e): print("-> event " + str(f.seq+1) + ": chaining or signature problem") else: print("-> event " + str(e.seq) + ": ok, content= " + str(e.content())) f.seq += 1 f.hprev = event.get_hash(e.metabits) return f
def get_event_seq(self, fid, nr): if fid == self.sensor_feed.fid: f = self.sensor_feed elif fid == self.control_feed.fid: f = self.control_feed nr_now = 0 seq = '' f.seq = 0 f.hprev = None for e in f: if not f.is_valid_extension(e): print("-> event " + str(f.seq+1) + ": chaining or signature problem") else: if nr_now == nr: e_now = str(e.content()) nr_now += 1 f.seq += 1 f.hprev = event.get_hash(e.metabits) return e_now
def get_event_content_list(self, fid, nr): # reads one event from log if fid == self.sensor_feed.fid: f = self.sensor_feed elif fid == self.control_feed.fid: f = self.control_feed nr_now = 0 e_now = '' f.seq = 0 f.hprev = None for e in f: if not f.is_valid_extension(e): print("-> event " + str(f.seq+1) + ": chaining or signature problem") else: e_now += str(e.content()) + '\n' nr_now += 1 f.seq += 1 f.hprev = event.get_hash(e.metabits) return e_now
from logStore.transconn.database_connector import DatabaseConnector import cbor2 import event dc = DatabaseConnector() feed_ids = dc.get_all_feed_ids() n = dc.get_current_seq_no(feed_ids[1]) print("seq num:", n, "(feed 1)") tmp = 0 for i in range(0, n + 1): l = cbor2.loads(dc.get_event(feed_ids[1], i)) tmp = cbor2.dumps(l) print(cbor2.loads(l[0])) # content bits # print(l[1]) ev = cbor2.loads(l[2]) ev = str(ev[0]).split("/") print(ev[0]) # event print(event.get_hash(l[0])) print("-------------------")
pcap.get_all_info(args.pcapfile1) print('-----------------------------') print('-----------------------------') if args.pcapfile2 is not None: pcap.get_all_info(args.pcapfile2) elif args.CMD == 'sync': print("Synchronisation...") Sync(args.pcapfile1, args.pcapfile2).sync_files() elif args.CMD == 'check': if args.keyfile1 is not None: fid, signer = load_keyfile(args.keyfile1) else: fid, signer = None, None f = FEED(args.pcapfile1, fid=fid, signer=signer) if f.pcap is None: sys.exit() f.seq = 0 f.hprev = None print(f"Checking feed {f.fid.hex()}") for e in f: print(e.content()) if not f.is_valid_extension(e): print(f"-> event {f.seq + 1}: chaining or signature problem") else: print(f"-> event {e.seq}: ok, content={e.content()}") f.seq += 1 f.hprev = event.get_hash(e.metabits)