LAWS.seqiv_round_trip_if: law of bend-osdev-aead@0.1.0.0 Import: import bend-osdev-aead@0.1.0.0/LAWS.bend as LAWS Lines 134-146 of bend-osdev-aead@0.1.0.0/LAWS.bend: https://jend.leeeet.dev/read.txt?path=bend-osdev-aead@0.1.0.0/LAWS.bend&start_line=134&end_line=146 import Base import bend-osdev-bytes@0.1.0.0/bytes.bend as B import bend-osdev-crypto@0.1.0.0/crypto.bend as Cr import bend-osdev-aead@0.1.0.0/seqiv.bend as Sq law seqiv_round_trip_if: for ~KA: Data for ~seal: KA -> B.Octets -> B.Octets -> B.Octets -> Result<&2, &2, Cr.CrError, B.Octets> for ~open: KA -> B.Octets -> B.Octets -> B.Octets -> Result<&2, &2, Cr.CrError, B.Octets> for ~ivlen: Nat for +ka: KA for +salt: B.Octets for +seq: B.Octets for +aad: B.Octets for +p: B.Octets for hl: {B.Octets.len(Sq.AdSeqiv.iv(~KA, Sq.AdSeqivKey{ka, salt}, seq)) == ivlen : Nat} for h: {Result.bind(&2, &2, Cr.CrError, B.Octets, B.Octets, seal(ka, Sq.AdSeqiv.iv(~KA, Sq.AdSeqivKey{ka, salt}, seq), B.Octets.append(aad, Sq.AdSeqiv.iv(~KA, Sq.AdSeqivKey{ka, salt}, seq)), p), c => open(ka, Sq.AdSeqiv.iv(~KA, Sq.AdSeqivKey{ka, salt}, seq), B.Octets.append(aad, Sq.AdSeqiv.iv(~KA, Sq.AdSeqivKey{ka, salt}, seq)), c)) == Result.map(&2, &2, Cr.CrError, B.Octets, B.Octets, c => p, seal(ka, Sq.AdSeqiv.iv(~KA, Sq.AdSeqivKey{ka, salt}, seq), B.Octets.append(aad, Sq.AdSeqiv.iv(~KA, Sq.AdSeqivKey{ka, salt}, seq)), p)) : Result<&2, &2, Cr.CrError, B.Octets>} {Result.bind(&2, &2, Cr.CrError, B.Octets, B.Octets, Sq.AdSeqiv.seal(~KA, ~seal, Sq.AdSeqivKey{ka, salt}, seq, aad, p), c => Sq.AdSeqiv.open(~KA, ~open, ~ivlen, Sq.AdSeqivKey{ka, salt}, seq, aad, c)) == Result.map(&2, &2, Cr.CrError, B.Octets, B.Octets, c => p, Sq.AdSeqiv.seal(~KA, ~seal, Sq.AdSeqivKey{ka, salt}, seq, aad, p)) : Result<&2, &2, Cr.CrError, B.Octets>} Uses (13): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Result https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Result.bind https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Result.map https://jend.leeeet.dev/definition.txt?path=bend-osdev-aead@0.1.0.0/PROOF.bend&name=seqiv_r https://jend.leeeet.dev/definition.txt?path=bend-osdev-aead@0.1.0.0/seqiv.bend&name=AdSeqiv.iv https://jend.leeeet.dev/definition.txt?path=bend-osdev-aead@0.1.0.0/seqiv.bend&name=AdSeqiv.open https://jend.leeeet.dev/definition.txt?path=bend-osdev-aead@0.1.0.0/seqiv.bend&name=AdSeqiv.seal https://jend.leeeet.dev/definition.txt?path=bend-osdev-aead@0.1.0.0/seqiv.bend&name=AdSeqivKey https://jend.leeeet.dev/definition.txt?path=bend-osdev-bytes@0.1.1.0/bytes.bend&name=Octets https://jend.leeeet.dev/definition.txt?path=bend-osdev-bytes@0.1.1.0/bytes.bend&name=Octets.append https://jend.leeeet.dev/definition.txt?path=bend-osdev-bytes@0.1.1.0/bytes.bend&name=Octets.len https://jend.leeeet.dev/definition.txt?path=bend-osdev-crypto@0.1.0.0/crypto.bend&name=CrError