Exemplo n.º 1
0
    def decrypt_ECB_mode(self, message, padding):
        array = Translater.from_string_to_intarray(message)
        decrypt_array = []
        for t in range(0, len(array), 8):
            decrypt_array += self.run(array[0 + t:8 + t], True)
        decrypt_array = Translater.from_bytarray_to_intarray(decrypt_array)

        if padding:
            decrypt_array = Padding.undo_padding(decrypt_array,
                                                 self.type_padding)
        return Translater.from_intarray_to_string(decrypt_array)
Exemplo n.º 2
0
 def decrypt_CFB_mode(self, message, padding, IV):
     array = Translater.from_string_to_intarray(message)
     Y_prev = IV
     decrypt_array = []
     for t in range(0, len(array), 8):
         Y = array[0 + t:8 + t]
         decrypt_array += Translater.xor_intarray_64(Y, self.run(Y_prev))
         Y_prev = Y
     if padding:
         decrypt_array = Padding.undo_padding(decrypt_array,
                                              self.type_padding)
     return Translater.from_intarray_to_string(decrypt_array)
Exemplo n.º 3
0
    def encrypt_ECB_mode(self, message):
        array = Padding.do_padding(Translater.from_string_to_intarray(message),
                                   self.type_padding)
        paddingBoolean = array[1]
        array = array[0]
        encrypt_array = []
        print array
        for t in range(0, len(array), 8):
            encrypt_array += self.run(array[0 + t:8 + t], False)

        return ciphertext(Translater.from_intarray_to_string(encrypt_array),
                          paddingBoolean)
Exemplo n.º 4
0
    def decrypt_CTR_mode(self, message, padding, IV):
        array = Translater.from_string_to_intarray(message)
        decrypt_array = []
        S = self.run(IV)
        for t in range(0, len(array), 8):
            S = Translater.sum_intarray_64(S, 1)
            decrypt_array += Translater.xor_intarray_64(
                array[0 + t:8 + t], self.run(S))

        if padding:
            decrypt_array = Padding.undo_padding(decrypt_array,
                                                 self.type_padding)
        return Translater.from_intarray_to_string(decrypt_array)
Exemplo n.º 5
0
 def encrypt_CBC_mode(self, message):
     Y = IV = self.generate_IV()
     array = Padding.do_padding(Translater.from_string_to_intarray(message),
                                self.type_padding)
     paddingBoolean = array[1]
     encrypt_array = []
     array = array[0]
     for t in range(0, len(array), 8):
         Y = self.run(Translater.xor_intarray_64(array[0 + t:8 + t], Y))
         encrypt_array += Y
     return ciphertext(Translater.from_intarray_to_string(encrypt_array),
                       paddingBoolean,
                       Translater.from_intarray_to_string(IV))
Exemplo n.º 6
0
 def f3(self, D, roundn):
     I = Translater.rotate_shift_left(
         Translater.mode_32(self.keyM[roundn] - D),
         Translater.get_last_bites(self.keyR[roundn], 5))
     return Translater.mode_32((
         (S1[Translater.get_byte(I, 0x0)] + S2[Translater.get_byte(I, 0x1)])
         ^ S3[Translater.get_byte(I, 0x2)]) -
                               S4[Translater.get_byte(I, 0x3)])
Exemplo n.º 7
0
 def ecncrypt_CTR_mode(self, message):
     IV = self.generate_IV()
     array = Padding.do_padding(Translater.from_string_to_intarray(message),
                                self.type_padding)
     paddingBoolean = array[1]
     encrypt_array = []
     array = array[0]
     S = self.run(IV)
     for t in range(0, len(array), 8):
         S = Translater.sum_intarray_64(S, 1)
         encrypt_array += Translater.xor_intarray_64(
             array[0 + t:8 + t], self.run(S))
     return ciphertext(Translater.from_intarray_to_string(encrypt_array),
                       paddingBoolean,
                       Translater.from_intarray_to_string(IV))
Exemplo n.º 8
0
 def decrypt(self, message, padding, IV=None):
     if self.type_mode == 1:
         return self.decrypt_ECB_mode(message, padding)
     IV = Translater.from_string_to_intarray(IV)
     if self.type_mode == 2:
         return self.decrypt_CFB_mode(message, padding, IV)
     if self.type_mode == 3:
         return self.decrypt_CBC_mode(message, padding, IV)
     return self.decrypt_CTR_mode(message, padding, IV)
Exemplo n.º 9
0
 def run(self, message, reverse=False):
     """Function which encrypt or decrypt message(it depends on the value of var reverse(Boolean)), using Feistel's net."""
     L = message[:4]
     L = (L[0] << 24) + (L[1] << 16) + (L[2] << 8) + L[3]
     R = message[4:]
     R = (R[0] << 24) + (R[1] << 16) + (R[2] << 8) + R[3]
     L_next = R_next = 0
     for i in range(0, 16):
         L_next = R
         if reverse:
             R_next = L ^ self.non_identical_rounds(R, 15 - i)
         else:
             R_next = L ^ self.non_identical_rounds(R, i)
         L = L_next
         R = R_next
     return Translater.from_bytarray_to_intarray([R, L])