Function hpke::SetupAuthS
source · [−]pub fn SetupAuthS(
config: HPKEConfig,
pkR: &HpkePublicKey,
info: &Info,
skS: &PrivateKey,
randomness: Randomness
) -> SenderContextResult
Expand description
Authentication using an Asymmetric Key - Sender
This variant extends the base mechanism by allowing the recipient
to authenticate that the sender possessed a given KEM private key.
This is because AuthDecap(enc, skR, pkS)
produces the correct KEM
shared secret only if the encapsulated value enc
was produced by
AuthEncap(pkR, skS)
, where skS
is the private key corresponding
to pkS
. In other words, at most two entities (precisely two, in the case
of DHKEM) could have produced this secret, so if the recipient is at most one, then
the sender is the other with overwhelming probability.
The primary difference from the base case is that the calls to
Encap()
and Decap()
are replaced with calls to AuthEncap()
and
AuthDecap()
, which add the sender public key to their internal
context string. The function parameters pkR
and pkS
are
public keys, and enc
is an encapsulated KEM shared secret.
Obviously, this variant can only be used with a KEM that provides
AuthEncap()
and AuthDecap()
procedures.
This mechanism authenticates only the key pair of the sender, not
any other identifier. If an application wishes to bind HPKE
ciphertexts or exported secrets to another identity for the sender
(e.g., an email address or domain name), then this identifier should be
included in the info
parameter to avoid identity mis-binding issues IMB.
def SetupAuthS(pkR, info, skS):
shared_secret, enc = AuthEncap(pkR, skS)
return enc, KeyScheduleS(mode_auth, shared_secret, info,
default_psk, default_psk_id)