6.2. Shared secret computation
Definition6.3
Group: PQXDH protocol definitions and roadmap from X3DH to full post-quantum security. (11)
-
Definition 6.1Blueprint label
-
pqxdh_bundle
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Definition 6.2Blueprint label
-
pqxdh_verify_signatures
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Definition 6.4Blueprint label
-
pqxdh_bob
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Definition 6.5Blueprint label
-
pqxdh_sk_alice
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Definition 6.6Blueprint label
-
pqxdh_sk_bob
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.7Blueprint label
-
pqxdh_agree
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.8Blueprint label
-
pqxdh_symbolic_security
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.9Blueprint label
-
pqxdh_classical_security
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.10Blueprint label
-
pqxdh_postquantum_security
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.11Blueprint label
-
kyber_sh_cr
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.12Blueprint label
-
pqxdh_kem_pubkey_agreement
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
Preview
Definition 6.1
Blueprint label
-
pqxdh_bundle
Group
- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
Associated Lean declarations
-
PQXDH_Alice[complete]
Alice computes the extended DH tuple, including the classical X3DH components and the post-quantum KEM encapsulation.
Code for Definition6.3●1 definition
Associated Lean declarations
-
PQXDH_Alice[complete]
Associated Lean declarations
-
PQXDH_Alice[complete]
-
def PQXDH_Alice.{u_1, u_2, u_3, u_4, u_5, u_6, u_7} {F
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.FType u_1] {GType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.GType u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.FType u_1GType u_2] {PK_kemType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {SK_kemType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {CTType u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {SSType u_6: Type u_6A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {S_sigType u_7: Type u_7A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} (kemKEM PK_kem SK_kem CT SS: KEMKEM.{u_1, u_2, u_3, u_4} (PK : Type u_1) (SK_kem : Type u_2) (CT : Type u_3) (SS : Type u_4) : Type (max (max (max u_1 u_2) u_3) u_4)KEM parameterized by public key `PK`, secret key `SK_kem`, ciphertext `CT`, and shared secret `SS`. The `correctness` field guarantees that honest encapsulation/decapsulation round-trips.PK_kemType u_3SK_kemType u_4CTType u_5SSType u_6) (ikₐFekₐF: FType u_1) (bundlePQXDHBundle G PK_kem S_sig: PQXDHBundlePQXDHBundle.{u_1, u_2, u_3} (G : Type u_1) (PK_kem : Type u_2) (S_sig : Type u_3) [AddCommGroup G] : Type (max (max u_1 u_2) u_3)§2.3, p. 472 and Figure 1, p. 471: Bob's prekey bundle including the post-quantum KEM public key and signatures authenticating the signed prekeys. "In the initial message to Alex, Blake includes PQSPKᵦᵖᵏ and sign(PQSPKᵦᵖᵏ, IKᵦˢᵏ)." (§2.3, item 2, p. 472)GType u_2PK_kemType u_3S_sigType u_7) : (Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2)Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.CTType u_5×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.SSType u_6def PQXDH_Alice.{u_1, u_2, u_3, u_4, u_5, u_6, u_7} {F
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.FType u_1] {GType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.GType u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.FType u_1GType u_2] {PK_kemType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {SK_kemType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {CTType u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {SSType u_6: Type u_6A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {S_sigType u_7: Type u_7A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} (kemKEM PK_kem SK_kem CT SS: KEMKEM.{u_1, u_2, u_3, u_4} (PK : Type u_1) (SK_kem : Type u_2) (CT : Type u_3) (SS : Type u_4) : Type (max (max (max u_1 u_2) u_3) u_4)KEM parameterized by public key `PK`, secret key `SK_kem`, ciphertext `CT`, and shared secret `SS`. The `correctness` field guarantees that honest encapsulation/decapsulation round-trips.PK_kemType u_3SK_kemType u_4CTType u_5SSType u_6) (ikₐFekₐF: FType u_1) (bundlePQXDHBundle G PK_kem S_sig: PQXDHBundlePQXDHBundle.{u_1, u_2, u_3} (G : Type u_1) (PK_kem : Type u_2) (S_sig : Type u_3) [AddCommGroup G] : Type (max (max u_1 u_2) u_3)§2.3, p. 472 and Figure 1, p. 471: Bob's prekey bundle including the post-quantum KEM public key and signatures authenticating the signed prekeys. "In the initial message to Alex, Blake includes PQSPKᵦᵖᵏ and sign(PQSPKᵦᵖᵏ, IKᵦˢᵏ)." (§2.3, item 2, p. 472)GType u_2PK_kemType u_3S_sigType u_7) : (Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2)Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.CTType u_5×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.SSType u_6§2.3, p. 472 and Figure 1, p. 471: Alice's view of the PQXDH key exchange. Four DH values plus the KEM encapsulation output (ct, ss). "When computing the session secret, Alex also computes CT, SS ← KEM.encaps(PQSPKᵦᵖᵏ) and concatenates SS to the X3DH Key Derivation Function input." (§2.3, item 3)
Definition6.4
Group: PQXDH protocol definitions and roadmap from X3DH to full post-quantum security. (11)
-
Definition 6.1Blueprint label
-
pqxdh_bundle
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Definition 6.2Blueprint label
-
pqxdh_verify_signatures
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Definition 6.3Blueprint label
-
pqxdh_alice
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Definition 6.5Blueprint label
-
pqxdh_sk_alice
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Definition 6.6Blueprint label
-
pqxdh_sk_bob
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.7Blueprint label
-
pqxdh_agree
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.8Blueprint label
-
pqxdh_symbolic_security
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.9Blueprint label
-
pqxdh_classical_security
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.10Blueprint label
-
pqxdh_postquantum_security
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.11Blueprint label
-
kyber_sh_cr
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
-
Theorem 6.12Blueprint label
-
pqxdh_kem_pubkey_agreement
Group- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
-
Preview
Definition 6.1
Blueprint label
-
pqxdh_bundle
Group
- PQXDH protocol definitions and roadmap from X3DH to full post-quantum security.
Associated Lean declarations
-
PQXDH_Bob[complete]
Bob computes the same extended DH tuple, using his private keys and the KEM decapsulation.
Code for Definition6.4●1 definition
Associated Lean declarations
-
PQXDH_Bob[complete]
Associated Lean declarations
-
PQXDH_Bob[complete]
-
def PQXDH_Bob.{u_1, u_2, u_3, u_4, u_5, u_6} {F
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.FType u_1] {GType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.GType u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.FType u_1GType u_2] {PK_kemType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {SK_kemType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {CTType u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {SSType u_6: Type u_6A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} (kemKEM PK_kem SK_kem CT SS: KEMKEM.{u_1, u_2, u_3, u_4} (PK : Type u_1) (SK_kem : Type u_2) (CT : Type u_3) (SS : Type u_4) : Type (max (max (max u_1 u_2) u_3) u_4)KEM parameterized by public key `PK`, secret key `SK_kem`, ciphertext `CT`, and shared secret `SS`. The `correctness` field guarantees that honest encapsulation/decapsulation round-trips.PK_kemType u_3SK_kemType u_4CTType u_5SSType u_6) (ikᵦFspkᵦFopkᵦF: FType u_1) (sk_kemSK_kem: SK_kemType u_4) (IKₐGEKₐG: GType u_2) (ctCT: CTType u_5) : (Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2)Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.SSType u_6def PQXDH_Bob.{u_1, u_2, u_3, u_4, u_5, u_6} {F
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.FType u_1] {GType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.GType u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.FType u_1GType u_2] {PK_kemType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {SK_kemType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {CTType u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {SSType u_6: Type u_6A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} (kemKEM PK_kem SK_kem CT SS: KEMKEM.{u_1, u_2, u_3, u_4} (PK : Type u_1) (SK_kem : Type u_2) (CT : Type u_3) (SS : Type u_4) : Type (max (max (max u_1 u_2) u_3) u_4)KEM parameterized by public key `PK`, secret key `SK_kem`, ciphertext `CT`, and shared secret `SS`. The `correctness` field guarantees that honest encapsulation/decapsulation round-trips.PK_kemType u_3SK_kemType u_4CTType u_5SSType u_6) (ikᵦFspkᵦFopkᵦF: FType u_1) (sk_kemSK_kem: SK_kemType u_4) (IKₐGEKₐG: GType u_2) (ctCT: CTType u_5) : (Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.GType u_2)Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.SSType u_6§2.3, p. 472 and Figure 1, p. 471: Bob's view of the PQXDH key exchange. Four DH values plus the KEM decapsulation of ct. "Blake uses their private key to compute SS = KEM.decaps(CT, PQSPKᵦˢᵏ) and also concatenates it to the X3DH Key Derivation Function input." (§2.3, item 5)