law echainiv_round_trip_if

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

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/echainiv.bend as Ec

148law echainiv_round_trip_if:
149  for ~KA: Data
150  for ~KC: Data
151  for ~Blk: Data
152  for ~enc: KC -> Blk -> Blk
153  for ~blk_of: B.Octets -> Maybe<&2, Blk>
154  for ~blk_to: Blk -> B.Octets
155  for ~seal: KA -> B.Octets -> B.Octets -> B.Octets -> Result<&2, &2, Cr.CrError, B.Octets>
156  for ~open: KA -> B.Octets -> B.Octets -> B.Octets -> Result<&2, &2, Cr.CrError, B.Octets>
157  for ~ivlen: Nat
158  for +ka: KA
159  for +kc: KC
160  for +salt: B.Octets
161  for +seq: B.Octets
162  for +aad: B.Octets
163  for +p: B.Octets
164  for hl: {B.Octets.len(Ec.AdEchainiv.iv(~KA, ~KC, ~Blk, ~enc, ~blk_of, ~blk_to, Ec.AdEchainivKey{ka, kc, salt}, seq)) == ivlen : Nat}
165  for h: {Result.bind(&2, &2, Cr.CrError, B.Octets, B.Octets, seal(ka, Ec.AdEchainiv.iv(~KA, ~KC, ~Blk, ~enc, ~blk_of, ~blk_to, Ec.AdEchainivKey{ka, kc, salt}, seq), B.Octets.append(aad, Ec.AdEchainiv.iv(~KA, ~KC, ~Blk, ~enc, ~blk_of, ~blk_to, Ec.AdEchainivKey{ka, kc, salt}, seq)), p), c => open(ka, Ec.AdEchainiv.iv(~KA, ~KC, ~Blk, ~enc, ~blk_of, ~blk_to, Ec.AdEchainivKey{ka, kc, salt}, seq), B.Octets.append(aad, Ec.AdEchainiv.iv(~KA, ~KC, ~Blk, ~enc, ~blk_of, ~blk_to, Ec.AdEchainivKey{ka, kc, salt}, seq)), c)) == Result.map(&2, &2, Cr.CrError, B.Octets, B.Octets, c => p, seal(ka, Ec.AdEchainiv.iv(~KA, ~KC, ~Blk, ~enc, ~blk_of, ~blk_to, Ec.AdEchainivKey{ka, kc, salt}, seq), B.Octets.append(aad, Ec.AdEchainiv.iv(~KA, ~KC, ~Blk, ~enc, ~blk_of, ~blk_to, Ec.AdEchainivKey{ka, kc, salt}, seq)), p)) : Result<&2, &2, Cr.CrError, B.Octets>}
166  {Result.bind(&2, &2, Cr.CrError, B.Octets, B.Octets, Ec.AdEchainiv.seal(~KA, ~KC, ~Blk, ~enc, ~blk_of, ~blk_to, ~seal, Ec.AdEchainivKey{ka, kc, salt}, seq, aad, p), c => Ec.AdEchainiv.open(~KA, ~KC, ~open, ~ivlen, Ec.AdEchainivKey{ka, kc, salt}, seq, aad, c)) == Result.map(&2, &2, Cr.CrError, B.Octets, B.Octets, c => p, Ec.AdEchainiv.seal(~KA, ~KC, ~Blk, ~enc, ~blk_of, ~blk_to, ~seal, Ec.AdEchainivKey{ka, kc, salt}, seq, aad, p)) : Result<&2, &2, Cr.CrError, B.Octets>}

Uses (14)

Used by (0)

No other definition uses this definition.