<s> """<STR_LIT>""" <EOL> import copy <EOL> import string <EOL> import os <EOL> if os . name != "<STR_LIT>" : <EOL> import exceptions <EOL> if hasattr ( exceptions , "<STR_LIT>" ) : <EOL> import warnings <EOL> warnings . filterwarnings ( "<STR_LIT:ignore>" , category = FutureWarning , append = <NUM_LIT:1> ) <EOL> shifts = [ [ [ <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:1> , <NUM_LIT:3> ] , [ <NUM_LIT:2> , <NUM_LIT:2> ] , [ <NUM_LIT:3> , <NUM_LIT:1> ] ] , <EOL> [ [ <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:1> , <NUM_LIT:5> ] , [ <NUM_LIT:2> , <NUM_LIT:4> ] , [ <NUM_LIT:3> , <NUM_LIT:3> ] ] , <EOL> [ [ <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:1> , <NUM_LIT:7> ] , [ <NUM_LIT:3> , <NUM_LIT:5> ] , [ <NUM_LIT:4> , <NUM_LIT:4> ] ] ] <EOL> num_rounds = { <NUM_LIT:16> : { <NUM_LIT:16> : <NUM_LIT:10> , <NUM_LIT> : <NUM_LIT:12> , <NUM_LIT:32> : <NUM_LIT> } , <NUM_LIT> : { <NUM_LIT:16> : <NUM_LIT:12> , <NUM_LIT> : <NUM_LIT:12> , <NUM_LIT:32> : <NUM_LIT> } , <NUM_LIT:32> : { <NUM_LIT:16> : <NUM_LIT> , <NUM_LIT> : <NUM_LIT> , <NUM_LIT:32> : <NUM_LIT> } } <EOL> A = [ [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> ] ] <EOL> alog = [ <NUM_LIT:1> ] <EOL> for i in range ( <NUM_LIT:255> ) : <EOL> j = ( alog [ - <NUM_LIT:1> ] << <NUM_LIT:1> ) ^ alog [ - <NUM_LIT:1> ] <EOL> if j & <NUM_LIT> != <NUM_LIT:0> : <EOL> j ^= <NUM_LIT> <EOL> alog . append ( j ) <EOL> log = [ <NUM_LIT:0> ] * <NUM_LIT> <EOL> for i in range ( <NUM_LIT:1> , <NUM_LIT:255> ) : <EOL> log [ alog [ i ] ] = i <EOL> def mul ( a , b ) : <EOL> if a == <NUM_LIT:0> or b == <NUM_LIT:0> : <EOL> return <NUM_LIT:0> <EOL> return alog [ ( log [ a & <NUM_LIT> ] + log [ b & <NUM_LIT> ] ) % <NUM_LIT:255> ] <EOL> box = [ [ <NUM_LIT:0> ] * <NUM_LIT:8> for i in range ( <NUM_LIT> ) ] <EOL> box [ <NUM_LIT:1> ] [ <NUM_LIT:7> ] = <NUM_LIT:1> <EOL> for i in range ( <NUM_LIT:2> , <NUM_LIT> ) : <EOL> j = alog [ <NUM_LIT:255> - log [ i ] ] <EOL> for t in range ( <NUM_LIT:8> ) : <EOL> box [ i ] [ t ] = ( j >> ( <NUM_LIT:7> - t ) ) & <NUM_LIT> <EOL> B = [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> ] <EOL> cox = [ [ <NUM_LIT:0> ] * <NUM_LIT:8> for i in range ( <NUM_LIT> ) ] <EOL> for i in range ( <NUM_LIT> ) : <EOL> for t in range ( <NUM_LIT:8> ) : <EOL> cox [ i ] [ t ] = B [ t ] <EOL> for j in range ( <NUM_LIT:8> ) : <EOL> cox [ i ] [ t ] ^= A [ t ] [ j ] * box [ i ] [ j ] <EOL> S = [ <NUM_LIT:0> ] * <NUM_LIT> <EOL> Si = [ <NUM_LIT:0> ] * <NUM_LIT> <EOL> for i in range ( <NUM_LIT> ) : <EOL> S [ i ] = cox [ i ] [ <NUM_LIT:0> ] << <NUM_LIT:7> <EOL> for t in range ( <NUM_LIT:1> , <NUM_LIT:8> ) : <EOL> S [ i ] ^= cox [ i ] [ t ] << ( <NUM_LIT:7> - t ) <EOL> Si [ S [ i ] & <NUM_LIT> ] = i <EOL> G = [ [ <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:3> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:1> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:2> , <NUM_LIT:1> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:2> ] ] <EOL> AA = [ [ <NUM_LIT:0> ] * <NUM_LIT:8> for i in range ( <NUM_LIT:4> ) ] <EOL> for i in range ( <NUM_LIT:4> ) : <EOL> for j in range ( <NUM_LIT:4> ) : <EOL> AA [ i ] [ j ] = G [ i ] [ j ] <EOL> AA [ i ] [ i + <NUM_LIT:4> ] = <NUM_LIT:1> <EOL> for i in range ( <NUM_LIT:4> ) : <EOL> pivot = AA [ i ] [ i ] <EOL> if pivot == <NUM_LIT:0> : <EOL> t = i + <NUM_LIT:1> <EOL> while AA [ t ] [ i ] == <NUM_LIT:0> and t < <NUM_LIT:4> : <EOL> t += <NUM_LIT:1> <EOL> assert t != <NUM_LIT:4> , '<STR_LIT>' <EOL> for j in range ( <NUM_LIT:8> ) : <EOL> AA [ i ] [ j ] , AA [ t ] [ j ] = AA [ t ] [ j ] , AA [ i ] [ j ] <EOL> pivot = AA [ i ] [ i ] <EOL> for j in range ( <NUM_LIT:8> ) : <EOL> if AA [ i ] [ j ] != <NUM_LIT:0> : <EOL> AA [ i ] [ j ] = alog [ ( <NUM_LIT:255> + log [ AA [ i ] [ j ] & <NUM_LIT> ] - log [ pivot & <NUM_LIT> ] ) % <NUM_LIT:255> ] <EOL> for t in range ( <NUM_LIT:4> ) : <EOL> if i != t : <EOL> for j in range ( i + <NUM_LIT:1> , <NUM_LIT:8> ) : <EOL> AA [ t ] [ j ] ^= mul ( AA [ i ] [ j ] , AA [ t ] [ i ] ) <EOL> AA [ t ] [ i ] = <NUM_LIT:0> <EOL> iG = [ [ <NUM_LIT:0> ] * <NUM_LIT:4> for i in range ( <NUM_LIT:4> ) ] <EOL> for i in range ( <NUM_LIT:4> ) : <EOL> for j in range ( <NUM_LIT:4> ) : <EOL> iG [ i ] [ j ] = AA [ i ] [ j + <NUM_LIT:4> ] <EOL> def mul4 ( a , bs ) : <EOL> if a == <NUM_LIT:0> : <EOL> return <NUM_LIT:0> <EOL> r = <NUM_LIT:0> <EOL> for b in bs : <EOL> r <<= <NUM_LIT:8> <EOL> if b != <NUM_LIT:0> : <EOL> r = r | mul ( a , b ) <EOL> return r <EOL> T1 = [ ] <EOL> T2 = [ ] <EOL> T3 = [ ] <EOL> T4 = [ ] <EOL> T5 = [ ] <EOL> T6 = [ ] <EOL> T7 = [ ] <EOL> T8 = [ ] <EOL> U1 = [ ] <EOL> U2 = [ ] <EOL> U3 = [ ] <EOL> U4 = [ ] <EOL> for t in range ( <NUM_LIT> ) : <EOL> s = S [ t ] <EOL> T1 . append ( mul4 ( s , G [ <NUM_LIT:0> ] ) ) <EOL> T2 . append ( mul4 ( s , G [ <NUM_LIT:1> ] ) ) <EOL> T3 . append ( mul4 ( s , G [ <NUM_LIT:2> ] ) ) <EOL> T4 . append ( mul4 ( s , G [ <NUM_LIT:3> ] ) ) <EOL> s = Si [ t ] <EOL> T5 . append ( mul4 ( s , iG [ <NUM_LIT:0> ] ) ) <EOL> T6 . append ( mul4 ( s , iG [ <NUM_LIT:1> ] ) ) <EOL> T7 . append ( mul4 ( s , iG [ <NUM_LIT:2> ] ) ) <EOL> T8 . append ( mul4 ( s , iG [ <NUM_LIT:3> ] ) ) <EOL> U1 . append ( mul4 ( t , iG [ <NUM_LIT:0> ] ) ) <EOL> U2 . append ( mul4 ( t , iG [ <NUM_LIT:1> ] ) ) <EOL> U3 . append ( mul4 ( t , iG [ <NUM_LIT:2> ] ) ) <EOL> U4 . append ( mul4 ( t , iG [ <NUM_LIT:3> ] ) ) <EOL> rcon = [ <NUM_LIT:1> ] <EOL> r = <NUM_LIT:1> <EOL> for t in range ( <NUM_LIT:1> , <NUM_LIT:30> ) : <EOL> r = mul ( <NUM_LIT:2> , r ) <EOL> rcon . append ( r ) <EOL> del A <EOL> del AA <EOL> del pivot <EOL> del B <EOL> del G <EOL> del box <EOL> del log <EOL> del alog <EOL> del i <EOL> del j <EOL> del r <EOL> del s <EOL> del t <EOL> del mul <EOL> del mul4 <EOL> del cox <EOL> del iG <EOL> class rijndael : <EOL> def __init__ ( self , key , block_size = <NUM_LIT:16> ) : <EOL> if block_size != <NUM_LIT:16> and block_size != <NUM_LIT> and block_size != <NUM_LIT:32> : <EOL> raise ValueError ( '<STR_LIT>' + str ( block_size ) ) <EOL> if len ( key ) != <NUM_LIT:16> and len ( key ) != <NUM_LIT> and len ( key ) != <NUM_LIT:32> : <EOL> raise ValueError ( '<STR_LIT>' + str ( len ( key ) ) ) <EOL> self . block_size = block_size <EOL> ROUNDS = num_rounds [ len ( key ) ] [ block_size ] <EOL> BC = block_size / <NUM_LIT:4> <EOL> Ke = [ [ <NUM_LIT:0> ] * BC for i in range ( ROUNDS + <NUM_LIT:1> ) ] <EOL> Kd = [ [ <NUM_LIT:0> ] * BC for i in range ( ROUNDS + <NUM_LIT:1> ) ] <EOL> ROUND_KEY_COUNT = ( ROUNDS + <NUM_LIT:1> ) * BC <EOL> KC = len ( key ) / <NUM_LIT:4> <EOL> tk = [ ] <EOL> for i in range ( <NUM_LIT:0> , KC ) : <EOL> tk . append ( ( ord ( key [ i * <NUM_LIT:4> ] ) << <NUM_LIT> ) | ( ord ( key [ i * <NUM_LIT:4> + <NUM_LIT:1> ] ) << <NUM_LIT:16> ) | <EOL> ( ord ( key [ i * <NUM_LIT:4> + <NUM_LIT:2> ] ) << <NUM_LIT:8> ) | ord ( key [ i * <NUM_LIT:4> + <NUM_LIT:3> ] ) ) <EOL> t = <NUM_LIT:0> <EOL> j = <NUM_LIT:0> <EOL> while j < KC and t < ROUND_KEY_COUNT : <EOL> Ke [ t / BC ] [ t % BC ] = tk [ j ] <EOL> Kd [ ROUNDS - ( t / BC ) ] [ t % BC ] = tk [ j ] <EOL> j += <NUM_LIT:1> <EOL> t += <NUM_LIT:1> <EOL> tt = <NUM_LIT:0> <EOL> rconpointer = <NUM_LIT:0> <EOL> while t < ROUND_KEY_COUNT : <EOL> tt = tk [ KC - <NUM_LIT:1> ] <EOL> tk [ <NUM_LIT:0> ] ^= ( S [ ( tt >> <NUM_LIT:16> ) & <NUM_LIT> ] & <NUM_LIT> ) << <NUM_LIT> ^ ( S [ ( tt >> <NUM_LIT:8> ) & <NUM_LIT> ] & <NUM_LIT> ) << <NUM_LIT:16> ^ ( S [ tt & <NUM_LIT> ] & <NUM_LIT> ) << <NUM_LIT:8> ^ ( S [ ( tt >> <NUM_LIT> ) & <NUM_LIT> ] & <NUM_LIT> ) ^ ( rcon [ rconpointer ] & <NUM_LIT> ) << <NUM_LIT> <EOL> rconpointer += <NUM_LIT:1> <EOL> if KC != <NUM_LIT:8> : <EOL> for i in range ( <NUM_LIT:1> , KC ) : <EOL> tk [ i ] ^= tk [ i - <NUM_LIT:1> ] <EOL> else : <EOL> for i in range ( <NUM_LIT:1> , KC / <NUM_LIT:2> ) : <EOL> tk [ i ] ^= tk [ i - <NUM_LIT:1> ] <EOL> tt = tk [ KC / <NUM_LIT:2> - <NUM_LIT:1> ] <EOL> tk [ KC / <NUM_LIT:2> ] ^= ( S [ tt & <NUM_LIT> ] & <NUM_LIT> ) ^ ( S [ ( tt >> <NUM_LIT:8> ) & <NUM_LIT> ] & <NUM_LIT> ) << <NUM_LIT:8> ^ ( S [ ( tt >> <NUM_LIT:16> ) & <NUM_LIT> ] & <NUM_LIT> ) << <NUM_LIT:16> ^ ( S [ ( tt >> <NUM_LIT> ) & <NUM_LIT> ] & <NUM_LIT> ) << <NUM_LIT> <EOL> for i in range ( KC / <NUM_LIT:2> + <NUM_LIT:1> , KC ) : <EOL> tk [ i ] ^= tk [ i - <NUM_LIT:1> ] <EOL> j = <NUM_LIT:0> <EOL> while j < KC and t < ROUND_KEY_COUNT : <EOL> Ke [ t / BC ] [ t % BC ] = tk [ j ] <EOL> Kd [ ROUNDS - ( t / BC ) ] [ t % BC ] = tk [ j ] <EOL> j += <NUM_LIT:1> <EOL> t += <NUM_LIT:1> <EOL> for r in range ( <NUM_LIT:1> , ROUNDS ) : <EOL> for j in range ( BC ) : <EOL> tt = Kd [ r ] [ j ] <EOL> Kd [ r ] [ j ] = U1 [ ( tt >> <NUM_LIT> ) & <NUM_LIT> ] ^ U2 [ ( tt >> <NUM_LIT:16> ) & <NUM_LIT> ] ^ U3 [ ( tt >> <NUM_LIT:8> ) & <NUM_LIT> ] ^ U4 [ tt & <NUM_LIT> ] <EOL> self . Ke = Ke <EOL> self . Kd = Kd <EOL> def encrypt ( self , plaintext ) : <EOL> if len ( plaintext ) != self . block_size : <EOL> raise ValueError ( '<STR_LIT>' + str ( self . block_size ) + '<STR_LIT>' + str ( len ( plaintext ) ) ) <EOL> Ke = self . Ke <EOL> BC = self . block_size / <NUM_LIT:4> <EOL> ROUNDS = len ( Ke ) - <NUM_LIT:1> <EOL> if BC == <NUM_LIT:4> : <EOL> SC = <NUM_LIT:0> <EOL> elif BC == <NUM_LIT:6> : <EOL> SC = <NUM_LIT:1> <EOL> else : <EOL> SC = <NUM_LIT:2> <EOL> s1 = shifts [ SC ] [ <NUM_LIT:1> ] [ <NUM_LIT:0> ] <EOL> s2 = shifts [ SC ] [ <NUM_LIT:2> ] [ <NUM_LIT:0> ] <EOL> s3 = shifts [ SC ] [ <NUM_LIT:3> ] [ <NUM_LIT:0> ] <EOL> a = [ <NUM_LIT:0> ] * BC <EOL> t = [ ] <EOL> for i in range ( BC ) : <EOL> t . append ( ( ord ( plaintext [ i * <NUM_LIT:4> ] ) << <NUM_LIT> | <EOL> ord ( plaintext [ i * <NUM_LIT:4> + <NUM_LIT:1> ] ) << <NUM_LIT:16> | <EOL> ord ( plaintext [ i * <NUM_LIT:4> + <NUM_LIT:2> ] ) << <NUM_LIT:8> | <EOL> ord ( plaintext [ i * <NUM_LIT:4> + <NUM_LIT:3> ] ) ) ^ Ke [ <NUM_LIT:0> ] [ i ] ) <EOL> for r in range ( <NUM_LIT:1> , ROUNDS ) : <EOL> for i in range ( BC ) : <EOL> a [ i ] = ( T1 [ ( t [ i ] >> <NUM_LIT> ) & <NUM_LIT> ] ^ <EOL> T2 [ ( t [ ( i + s1 ) % BC ] >> <NUM_LIT:16> ) & <NUM_LIT> ] ^ <EOL> T3 [ ( t [ ( i + s2 ) % BC ] >> <NUM_LIT:8> ) & <NUM_LIT> ] ^ <EOL> T4 [ t [ ( i + s3 ) % BC ] & <NUM_LIT> ] ) ^ Ke [ r ] [ i ] <EOL> t = copy . copy ( a ) <EOL> result = [ ] <EOL> for i in range ( BC ) : <EOL> tt = Ke [ ROUNDS ] [ i ] <EOL> result . append ( ( S [ ( t [ i ] >> <NUM_LIT> ) & <NUM_LIT> ] ^ ( tt >> <NUM_LIT> ) ) & <NUM_LIT> ) <EOL> result . append ( ( S [ ( t [ ( i + s1 ) % BC ] >> <NUM_LIT:16> ) & <NUM_LIT> ] ^ ( tt >> <NUM_LIT:16> ) ) & <NUM_LIT> ) <EOL> result . append ( ( S [ ( t [ ( i + s2 ) % BC ] >> <NUM_LIT:8> ) & <NUM_LIT> ] ^ ( tt >> <NUM_LIT:8> ) ) & <NUM_LIT> ) <EOL> result . append ( ( S [ t [ ( i + s3 ) % BC ] & <NUM_LIT> ] ^ tt ) & <NUM_LIT> ) <EOL> return string . join ( list ( map ( chr , result ) ) , '<STR_LIT>' ) <EOL> def decrypt ( self , ciphertext ) : <EOL> if len ( ciphertext ) != self . block_size : <EOL> raise ValueError ( '<STR_LIT>' + str ( self . block_size ) + '<STR_LIT>' + str ( len ( plaintext ) ) ) <EOL> Kd = self . Kd <EOL> BC = self . block_size / <NUM_LIT:4> <EOL> ROUNDS = len ( Kd ) - <NUM_LIT:1> <EOL> if BC == <NUM_LIT:4> : <EOL> SC = <NUM_LIT:0> <EOL> elif BC == <NUM_LIT:6> : <EOL> SC = <NUM_LIT:1> <EOL> else : <EOL> SC = <NUM_LIT:2> <EOL> s1 = shifts [ SC ] [ <NUM_LIT:1> ] [ <NUM_LIT:1> ] <EOL> s2 = shifts [ SC ] [ <NUM_LIT:2> ] [ <NUM_LIT:1> ] <EOL> s3 = shifts [ SC ] [ <NUM_LIT:3> ] [ <NUM_LIT:1> ] <EOL> a = [ <NUM_LIT:0> ] * BC <EOL> t = [ <NUM_LIT:0> ] * BC <EOL> for i in range ( BC ) : <EOL> t [ i ] = ( ord ( ciphertext [ i * <NUM_LIT:4> ] ) << <NUM_LIT> | <EOL> ord ( ciphertext [ i * <NUM_LIT:4> + <NUM_LIT:1> ] ) << <NUM_LIT:16> | <EOL> ord ( ciphertext [ i * <NUM_LIT:4> + <NUM_LIT:2> ] ) << <NUM_LIT:8> | <EOL> ord ( ciphertext [ i * <NUM_LIT:4> + <NUM_LIT:3> ] ) ) ^ Kd [ <NUM_LIT:0> ] [ i ] <EOL> for r in range ( <NUM_LIT:1> , ROUNDS ) : <EOL> for i in range ( BC ) : <EOL> a [ i ] = ( T5 [ ( t [ i ] >> <NUM_LIT> ) & <NUM_LIT> ] ^ <EOL> T6 [ ( t [ ( i + s1 ) % BC ] >> <NUM_LIT:16> ) & <NUM_LIT> ] ^ <EOL> T7 [ ( t [ ( i + s2 ) % BC ] >> <NUM_LIT:8> ) & <NUM_LIT> ] ^ <EOL> T8 [ t [ ( i + s3 ) % BC ] & <NUM_LIT> ] ) ^ Kd [ r ] [ i ] <EOL> t = copy . copy ( a ) <EOL> result = [ ] <EOL> for i in range ( BC ) : <EOL> tt = Kd [ ROUNDS ] [ i ] <EOL> result . append ( ( Si [ ( t [ i ] >> <NUM_LIT> ) & <NUM_LIT> ] ^ ( tt >> <NUM_LIT> ) ) & <NUM_LIT> ) <EOL> result . append ( ( Si [ ( t [ ( i + s1 ) % BC ] >> <NUM_LIT:16> ) & <NUM_LIT> ] ^ ( tt >> <NUM_LIT:16> ) ) & <NUM_LIT> ) <EOL> result . append ( ( Si [ ( t [ ( i + s2 ) % BC ] >> <NUM_LIT:8> ) & <NUM_LIT> ] ^ ( tt >> <NUM_LIT:8> ) ) & <NUM_LIT> ) <EOL> result . append ( ( Si [ t [ ( i + s3 ) % BC ] & <NUM_LIT> ] ^ tt ) & <NUM_LIT> ) <EOL> return string . join ( list ( map ( chr , result ) ) , '<STR_LIT>' ) <EOL> def encrypt ( key , block ) : <EOL> return rijndael ( key , len ( block ) ) . encrypt ( block ) <EOL> def decrypt ( key , block ) : <EOL> return rijndael ( key , len ( block ) ) . decrypt ( block ) <EOL> def test ( ) : <EOL> def t ( kl , bl ) : <EOL> b = '<STR_LIT:b>' * bl <EOL> r = rijndael ( '<STR_LIT:a>' * kl , bl ) <EOL> assert r . decrypt ( r . encrypt ( b ) ) == b <EOL> t ( <NUM_LIT:16> , <NUM_LIT:16> ) <EOL> t ( <NUM_LIT:16> , <NUM_LIT> ) <EOL> t ( <NUM_LIT:16> , <NUM_LIT:32> ) <EOL> t ( <NUM_LIT> , <NUM_LIT:16> ) <EOL> t ( <NUM_LIT> , <NUM_LIT> ) <EOL> t ( <NUM_LIT> , <NUM_LIT:32> ) <EOL> t ( <NUM_LIT:32> , <NUM_LIT:16> ) <EOL> t ( <NUM_LIT:32> , <NUM_LIT> ) <EOL> t ( <NUM_LIT:32> , <NUM_LIT:32> ) </s>
