def verify(self, pk, M, S): modbits = int(pk['N']).bit_length() k = int(ceil(modbits / 8.0)) emLen = int(ceil((modbits - 1) / 8.0)) if len(S) != k: if debug: print("Sig is %s octets long, not %" % (len(S), k)) return False s = Conversion.OS2IP(S) s = integer(s) % pk['N'] #Convert to modular integer m = (s**pk['e']) % pk['N'] EM = Conversion.IP2OS(m, emLen) if debug: print("Verifying") print("k =>", k) print("emLen =>", emLen) print("s =>", s) print("m =>", m) print("em =>", EM) print("S =>", S) return self.paddingscheme.verify(M, EM, modbits - 1)
def testIP2OSLen(self): i = 9202000 os = Conversion.IP2OS(i, 200) i2 = Conversion.OS2IP(os) self.assertEqual(i, i2)
def testIP2OS(self): #9,202,000 = (0x)8c 69 50. os = Conversion.IP2OS(9202000) self.assertEqual(os, b'\x8c\x69\x50')
def decrypt(self, pk, sk, c): octetlen = int(ceil(int(pk['N']).bit_length() / 8.0)) M = (c**(sk['d'] % sk['phi_N'])) % pk['N'] os = Conversion.IP2OS(int(M), octetlen) if debug: print("OS =>", os) return self.paddingscheme.decode(os)
def getRandomBits(self, length): i = randomBits(length) len = math.ceil(length / 8) return Conversion.IP2OS(i, len)
def getRandomBytes(self, length): bits = length * 8 val = randomBits(bits) return Conversion.IP2OS(val, length)