@@ -642,7 +642,7 @@ class AES(object):
642642 0x5d80be9f , 0x548db591 , 0x4f9aa883 , 0x4697a38d
643643 ]
644644
645- def __init__ (self , key ):
645+ def __init__ (self , key ): # noqa: C901
646646
647647 if len (key ) not in (16 , 24 , 32 ):
648648 raise ValueError ('Invalid key size' )
@@ -675,10 +675,14 @@ def __init__(self, key):
675675 while t < round_key_count :
676676
677677 tt = tk [KC - 1 ]
678- tk [0 ] ^= ((self .S [(tt >> 16 ) & 0xFF ] << 24 ) ^
679- (self .S [(tt >> 8 ) & 0xFF ] << 16 ) ^
680- (self .S [tt & 0xFF ] << 8 ) ^ self .S [(tt >> 24 ) & 0xFF ] ^
681- (self .rcon [rconpointer ] << 24 ))
678+ # noqa: W504
679+ tk [0 ] ^= (
680+ (self .S [(tt >> 16 ) & 0xFF ] << 24 ) ^
681+ (self .S [(tt >> 8 ) & 0xFF ] << 16 ) ^
682+ (self .S [tt & 0xFF ] << 8 ) ^
683+ self .S [(tt >> 24 ) & 0xFF ] ^
684+ (self .rcon [rconpointer ] << 24 )
685+ )
682686 rconpointer += 1
683687
684688 if KC != 8 :
@@ -691,10 +695,12 @@ def __init__(self, key):
691695 tk [i ] ^= tk [i - 1 ]
692696 tt = tk [KC // 2 - 1 ]
693697
694- tk [KC //
695- 2 ] ^= (self .S [tt & 0xFF ] ^ (self .S [(tt >> 8 ) & 0xFF ] << 8 ) ^
696- (self .S [(tt >> 16 ) & 0xFF ] << 16 ) ^
697- (self .S [(tt >> 24 ) & 0xFF ] << 24 ))
698+ tk [KC // 2 ] ^= (
699+ self .S [tt & 0xFF ] ^
700+ (self .S [(tt >> 8 ) & 0xFF ] << 8 ) ^
701+ (self .S [(tt >> 16 ) & 0xFF ] << 16 ) ^
702+ (self .S [(tt >> 24 ) & 0xFF ] << 24 )
703+ )
698704
699705 for i in range (KC // 2 + 1 , KC ):
700706 tk [i ] ^= tk [i - 1 ]
@@ -711,10 +717,12 @@ def __init__(self, key):
711717 for r in range (1 , rounds ):
712718 for j in range (0 , 4 ):
713719 tt = self ._Kd [r ][j ]
714- self ._Kd [r ][j ] = (self .U1 [(tt >> 24 ) & 0xFF ]
715- ^ self .U2 [(tt >> 16 ) & 0xFF ]
716- ^ self .U3 [(tt >> 8 ) & 0xFF ]
717- ^ self .U4 [tt & 0xFF ])
720+ self ._Kd [r ][j ] = (
721+ self .U1 [(tt >> 24 ) & 0xFF ] ^
722+ self .U2 [(tt >> 16 ) & 0xFF ] ^
723+ self .U3 [(tt >> 8 ) & 0xFF ] ^
724+ self .U4 [tt & 0xFF ]
725+ )
718726
719727 def encrypt (self , plaintext ):
720728 'Encrypt a block of plain text using the AES block cipher.'
@@ -733,21 +741,22 @@ def encrypt(self, plaintext):
733741 # Apply round transforms
734742 for r in range (1 , rounds ):
735743 for i in range (0 , 4 ):
736- a [i ] = (self .T1 [(t [i ] >> 24 ) & 0xFF ]
737- ^ self .T2 [(t [(i + s1 ) % 4 ] >> 16 ) & 0xFF ]
738- ^ self .T3 [(t [(i + s2 ) % 4 ] >> 8 ) & 0xFF ]
739- ^ self .T4 [t [(i + s3 ) % 4 ] & 0xFF ] ^ self ._Ke [r ][i ])
744+ a [i ] = (
745+ self .T1 [(t [i ] >> 24 ) & 0xFF ] ^
746+ self .T2 [(t [(i + s1 ) % 4 ] >> 16 ) & 0xFF ] ^
747+ self .T3 [(t [(i + s2 ) % 4 ] >> 8 ) & 0xFF ] ^
748+ self .T4 [t [(i + s3 ) % 4 ] & 0xFF ] ^
749+ self ._Ke [r ][i ]
750+ )
740751 t = copy .copy (a )
741752
742753 # The last round is special
743754 result = []
744755 for i in range (0 , 4 ):
745756 tt = self ._Ke [rounds ][i ]
746757 result .append ((self .S [(t [i ] >> 24 ) & 0xFF ] ^ (tt >> 24 )) & 0xFF )
747- result .append ((self .S [(t [(i + s1 ) % 4 ] >> 16 ) & 0xFF ] ^ (tt >> 16 ))
748- & 0xFF )
749- result .append ((self .S [(t [(i + s2 ) % 4 ] >> 8 ) & 0xFF ] ^ (tt >> 8 ))
750- & 0xFF )
758+ result .append ((self .S [(t [(i + s1 ) % 4 ] >> 16 ) & 0xFF ] ^ (tt >> 16 )) & 0xFF )
759+ result .append ((self .S [(t [(i + s2 ) % 4 ] >> 8 ) & 0xFF ] ^ (tt >> 8 )) & 0xFF )
751760 result .append ((self .S [t [(i + s3 ) % 4 ] & 0xFF ] ^ tt ) & 0xFF )
752761
753762 return result
@@ -769,28 +778,29 @@ def decrypt(self, ciphertext):
769778 # Apply round transforms
770779 for r in range (1 , rounds ):
771780 for i in range (0 , 4 ):
772- a [i ] = (self .T5 [(t [i ] >> 24 ) & 0xFF ]
773- ^ self .T6 [(t [(i + s1 ) % 4 ] >> 16 ) & 0xFF ]
774- ^ self .T7 [(t [(i + s2 ) % 4 ] >> 8 ) & 0xFF ]
775- ^ self .T8 [t [(i + s3 ) % 4 ] & 0xFF ] ^ self ._Kd [r ][i ])
781+ a [i ] = (
782+ self .T5 [(t [i ] >> 24 ) & 0xFF ] ^
783+ self .T6 [(t [(i + s1 ) % 4 ] >> 16 ) & 0xFF ] ^
784+ self .T7 [(t [(i + s2 ) % 4 ] >> 8 ) & 0xFF ] ^
785+ self .T8 [t [(i + s3 ) % 4 ] & 0xFF ] ^ self ._Kd [r ][i ]
786+ )
776787 t = copy .copy (a )
777788
778789 # The last round is special
779790 result = []
780791 for i in range (0 , 4 ):
781792 tt = self ._Kd [rounds ][i ]
782793 result .append ((self .Si [(t [i ] >> 24 ) & 0xFF ] ^ (tt >> 24 )) & 0xFF )
783- result .append ((self .Si [(t [(i + s1 ) % 4 ] >> 16 ) & 0xFF ]
784- ^ (tt >> 16 )) & 0xFF )
785- result .append ((self .Si [(t [(i + s2 ) % 4 ] >> 8 ) & 0xFF ] ^ (tt >> 8 ))
786- & 0xFF )
794+ result .append ((self .Si [(t [(i + s1 ) % 4 ] >> 16 ) & 0xFF ] ^ (tt >> 16 )) & 0xFF )
795+ result .append ((self .Si [(t [(i + s2 ) % 4 ] >> 8 ) & 0xFF ] ^ (tt >> 8 )) & 0xFF )
787796 result .append ((self .Si [t [(i + s3 ) % 4 ] & 0xFF ] ^ tt ) & 0xFF )
788797
789798 return result
790799
791800
792801class AESBlockModeOfOperation (object ):
793802 '''Super-class for AES modes of operation that require blocks.'''
803+
794804 def __init__ (self , key ):
795805 self ._aes = AES (key )
796806
@@ -847,4 +857,3 @@ def aes_decrypt(data: bytes, key: str) -> bytes:
847857 for x in [data [i :i + 16 ] for i in range (0 , len (data ), 16 )]:
848858 plain .append (AESModeOfOperationECB (key ).decrypt (x ))
849859 return strip_padding (b'' .join (plain ))
850-
0 commit comments