PROOF.ap.round_inv: def of bend-osdev-aes@0.1.0.0 Import: import bend-osdev-aes@0.1.0.0/PROOF.bend as PROOF Lines 2107-2115 of bend-osdev-aes@0.1.0.0/PROOF.bend: https://jend.leeeet.dev/read.txt?path=bend-osdev-aes@0.1.0.0/PROOF.bend&start_line=2107&end_line=2115 import Base import bend-osdev-aes@0.1.0.0/aes.bend as X import bend-collections@1.0.0.0/src/crypto/aes/aes.bend as A import bend-collections@1.0.0.0/src/crypto/aes/types.bend as TT def ap.round_inv(+z: TT.State, +k: TT.State) -> {X.aes.inv_round(A.round(X.aes.mask(z), X.aes.mask(k)), X.aes.mask(k)) == X.aes.mask(z) : TT.State}: %Equal.sym(TT.State, A.add_round_key(A.add_round_key(A.mix_columns(A.shift_rows(A.sub_bytes(X.aes.mask(z)))), X.aes.mask(k)), X.aes.mask(k)), A.mix_columns(A.shift_rows(A.sub_bytes(X.aes.mask(z)))), ap.ark2(A.mix_columns(A.shift_rows(A.sub_bytes(X.aes.mask(z)))), X.aes.mask(k))) : {X.aes.inv_sub(X.aes.inv_shift(X.aes.inv_mix(_))) == X.aes.mask(z) : TT.State} %Equal.sym(TT.State, A.sub_bytes(X.aes.mask(z)), X.aes.mask(A.sub_bytes(X.aes.mask(z))), ap.subl(z)) : {X.aes.inv_sub(X.aes.inv_shift(X.aes.inv_mix(A.mix_columns(A.shift_rows(_))))) == X.aes.mask(z) : TT.State} %Equal.sym(TT.State, A.shift_rows(X.aes.mask(A.sub_bytes(X.aes.mask(z)))), X.aes.mask(A.shift_rows(A.sub_bytes(X.aes.mask(z)))), ap.shm(A.sub_bytes(X.aes.mask(z)))) : {X.aes.inv_sub(X.aes.inv_shift(X.aes.inv_mix(A.mix_columns(_)))) == X.aes.mask(z) : TT.State} %Equal.sym(TT.State, X.aes.inv_mix(A.mix_columns(X.aes.mask(A.shift_rows(A.sub_bytes(X.aes.mask(z)))))), X.aes.mask(A.shift_rows(A.sub_bytes(X.aes.mask(z)))), ap.mixi(A.shift_rows(A.sub_bytes(X.aes.mask(z))))) : {X.aes.inv_sub(X.aes.inv_shift(_)) == X.aes.mask(z) : TT.State} %ap.shm(A.sub_bytes(X.aes.mask(z))) : {X.aes.inv_sub(X.aes.inv_shift(_)) == X.aes.mask(z) : TT.State} %Equal.sym(TT.State, X.aes.inv_shift(A.shift_rows(X.aes.mask(A.sub_bytes(X.aes.mask(z))))), X.aes.mask(A.sub_bytes(X.aes.mask(z))), ap.shift(X.aes.mask(A.sub_bytes(X.aes.mask(z))))) : {X.aes.inv_sub(_) == X.aes.mask(z) : TT.State} %ap.subl(z) : {X.aes.inv_sub(_) == X.aes.mask(z) : TT.State} ap.subi(z) Uses (18): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.sym https://jend.leeeet.dev/definition.txt?path=bend-collections@1.0.0.0/src/crypto/aes/aes.bend&name=add_round_key https://jend.leeeet.dev/definition.txt?path=bend-collections@1.0.0.0/src/crypto/aes/aes.bend&name=mix_columns https://jend.leeeet.dev/definition.txt?path=bend-collections@1.0.0.0/src/crypto/aes/aes.bend&name=round https://jend.leeeet.dev/definition.txt?path=bend-collections@1.0.0.0/src/crypto/aes/aes.bend&name=shift_rows https://jend.leeeet.dev/definition.txt?path=bend-collections@1.0.0.0/src/crypto/aes/aes.bend&name=sub_bytes https://jend.leeeet.dev/definition.txt?path=bend-collections@1.0.0.0/src/crypto/aes/types.bend&name=State https://jend.leeeet.dev/definition.txt?path=bend-osdev-aes@0.1.0.0/PROOF.bend&name=ap.ark2 https://jend.leeeet.dev/definition.txt?path=bend-osdev-aes@0.1.0.0/PROOF.bend&name=ap.mixi https://jend.leeeet.dev/definition.txt?path=bend-osdev-aes@0.1.0.0/PROOF.bend&name=ap.shift https://jend.leeeet.dev/definition.txt?path=bend-osdev-aes@0.1.0.0/PROOF.bend&name=ap.shm https://jend.leeeet.dev/definition.txt?path=bend-osdev-aes@0.1.0.0/PROOF.bend&name=ap.subi https://jend.leeeet.dev/definition.txt?path=bend-osdev-aes@0.1.0.0/PROOF.bend&name=ap.subl https://jend.leeeet.dev/definition.txt?path=bend-osdev-aes@0.1.0.0/aes.bend&name=aes.inv_mix https://jend.leeeet.dev/definition.txt?path=bend-osdev-aes@0.1.0.0/aes.bend&name=aes.inv_round https://jend.leeeet.dev/definition.txt?path=bend-osdev-aes@0.1.0.0/aes.bend&name=aes.inv_shift https://jend.leeeet.dev/definition.txt?path=bend-osdev-aes@0.1.0.0/aes.bend&name=aes.inv_sub https://jend.leeeet.dev/definition.txt?path=bend-osdev-aes@0.1.0.0/aes.bend&name=aes.mask