6.1. Encryption and Decryption (加密与解密)
6.1. Encryption and Decryption (加密与解密)
在许多情况下, 应用程序仅向接收者的公钥加密单个消息。本节提供了使用第 5.1.1 节和第 5.2 节中指定的 API 实现无状态"单次调用"加密和解密的 HPKE API 模板:
def Seal<MODE>(pkR, info, aad, pt, ...):
enc, ctx = Setup<MODE>S(pkR, info, ...)
ct = ctx.Seal(aad, pt)
return enc, ct
def Open<MODE>(enc, skR, info, aad, ct, ...):
ctx = Setup<MODE>R(enc, skR, info, ...)
return ctx.Open(aad, ct)
MODE 模板参数是 Base, PSK, Auth 或 AuthPSK 之一。由 "..." 表示的可选参数取决于 MODE, 可能为空。例如, SetupBase() 没有额外参数。SealAuthPSK() 和 OpenAuthPSK() 的实现如下:
def SealAuthPSK(pkR, info, aad, pt, psk, psk_id, skS):
enc, ctx = SetupAuthPSKS(pkR, info, psk, psk_id, skS)
ct = ctx.Seal(aad, pt)
return enc, ct
def OpenAuthPSK(enc, skR, info, aad, ct, psk, psk_id, pkS):
ctx = SetupAuthPSKR(enc, skR, info, psk, psk_id, pkS)
return ctx.Open(aad, ct)