def _get_candidate_block_from(self, block): integer = BytesToInt(block).value() root = NthRoot(self.e).value(integer) next_power = (root + 1)**self.e candidate_block = self._to_bytes(next_power) return root + 1, LeftPadder(candidate_block).value(self.n_size, char='\x00')
def _decode(self, string): bin_string = str() string = string.strip() for char in string: if char == '=': break index = self._index_of(char) if index is None: continue bin_index = IntToBinary(index).value() padded_bin_index = LeftPadder(bin_index).value(6) bin_string += padded_bin_index bin_string = self._remove_base64_padding(string, bin_string) return bin_string
def value(self, size=None): hex_string = IntToHex(self.integer).value() int_bytes = HexToBytes(hex_string).value() if size is not None and len(int_bytes) < size: int_bytes = LeftPadder(int_bytes).value(size, char='\0') return int_bytes
def _ensure_length_multiple_of(string, value): length = len(string) if length % value != 0: pad_size = int(value*math.ceil(length/float(value))) string = LeftPadder(string).value(pad_size) return string
def _to_bin(self, char): bin_string = bin(ord(char))[2:] return LeftPadder(bin_string).value(8)
def _decrypt(self, signature): decrypted_block = self.rsa.encrypt(signature) return LeftPadder(decrypted_block).value(self.n_size, char='\0')
def has_valid_padding(self, ciphertext): plaintext = self.rsa.decrypt(ciphertext) plaintext = LeftPadder(plaintext).value(self.n_size, char='\0') return plaintext[0] == '\x00' and plaintext[1] == '\x02'
def _from_int(self, integer): converter = self._from_int_converter() string = converter(integer).value() length = max(map(len, self.strings)) pad_char = self._pad_char() return LeftPadder(string).value(length, char=pad_char)