def batchRun(self, batchsize=1024, random_key=True, random_pt=True, seed=None): """ Run multiple encryptions on random data Args: batchsize (int): The number of encryption to run (default 1024). random_key (bool): True if the key is random (default False). random_pt (bool): True if the plaintext are random (default True). seed (int): random int32 for the PRG. """ if seed is None: seed = random.randint(0, 2**32) data = [] data.extend( packuint32(1 | (random_key << 1) | (random_pt << 2) | (batchsize << 16))) data.extend(packuint32(seed)) self.sam3u_write(0, data) # generate the inputs if random_key: key = [[0 for x in range(16)] for y in range(batchsize)] else: key = None if random_pt: pt = [[0 for x in range(16)] for y in range(batchsize)] else: pt = None for b in range(batchsize): if random_key: for j in range(16): key[b][15 - j] = seed >> 24 seed += ((seed * seed) & 0xffffffff) | 0x5 seed &= 0xffffffff if random_pt: for j in range(16): pt[b][15 - j] = seed >> 24 seed += ((seed * seed) & 0xffffffff) | 0x5 seed &= 0xffffffff return key, pt
def samples(self, numsamples): nresp = packuint32(numsamples) self.usb.sendCtrl(self.USB_SAMPLES, 0, nresp)
def repeat(self, width): resp = self.usb.readCtrl(self.USB_GLITCH_SETTINGS, 0, 8) nresp = resp[0:4] nresp.extend(packuint32(width)) self.usb.sendCtrl(self.USB_GLITCH_SETTINGS, 0, nresp)
def ext_offset(self, offset): resp = self.usb.readCtrl(self.USB_GLITCH_SETTINGS, 0, 8) nresp = packuint32(offset) nresp.extend(resp[4:8]) self.usb.sendCtrl(self.USB_GLITCH_SETTINGS, 0, nresp)