Source code for cpsim.attack

import numpy as np


[docs] class Attack: def __init__(self, category, param, start_index, end_index=None): """ category: 'bias', 'delay', 'replay' todo: 'stealthy' param """ self.cat = category self.param = param self.start_index = start_index self.end_index = end_index if end_index is not None else np.Inf self.cur_index = None self.disabled = False
[docs] def update_param(self, param): self.param = param
[docs] def disable(self): self.disabled = True
[docs] def launch(self, cur_data, cur_index, history_intact_data): self.cur_index = cur_index if cur_index < self.start_index or cur_index > self.end_index or self.disabled: return cur_data if self.cat == 'bias': # param is the bias on each element return cur_data + self.param if self.cat == 'delay': # param is the number of delay steps if self.cur_index - self.start_index > self.param: return history_intact_data[self.cur_index - self.param] else: return history_intact_data[self.start_index] if self.cat == 'replay': # replay interval param['start'] ~ param['end'] delta_index = self.cur_index - self.start_index offset_index = self.param['start'] + delta_index % (self.param['end']-self.param['start']) return history_intact_data[offset_index]
[docs] def get_C_filter(self): if self.cat == 'bias': cnt = len(self.param) bias_e = np.full((cnt,), False) for i in range(cnt): if self.param[i] != 0: bias_e[i] = True C_filter = [] for i in range(4): if bias_e[i]: continue else: tmp = [0, 0, 0, 0] tmp[i] = 1 C_filter.append(tmp) return C_filter else: raise NotImplementedError()
if __name__ == "__main__": attack = Attack('bias', np.array([1, 0, 0, 0]), 0) print(attack.get_C_filter())