law seqiv_round_trip_if

bend-osdev-aead@0.1.0.0 · LAWS.bend:134

import bend-osdev-aead@0.1.0.0/LAWS.bend as LAWS
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

134law seqiv_round_trip_if:
135  for ~KA: Data
136  for ~seal: KA -> B.Octets -> B.Octets -> B.Octets -> Result<&2, &2, Cr.CrError, B.Octets>
137  for ~open: KA -> B.Octets -> B.Octets -> B.Octets -> Result<&2, &2, Cr.CrError, B.Octets>
138  for ~ivlen: Nat
139  for +ka: KA
140  for +salt: B.Octets
141  for +seq: B.Octets
142  for +aad: B.Octets
143  for +p: B.Octets
144  for hl: {B.Octets.len(Sq.AdSeqiv.iv(~KA, Sq.AdSeqivKey{ka, salt}, seq)) == ivlen : Nat}
145  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>}
146  {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)

Used by (0)

No other definition uses this definition.