Implements Hybrid Public Key Encryption (HPKE) as per RFC9180.
authorStephen Farrell <stephen.farrell@cs.tcd.ie>
Tue, 22 Nov 2022 02:42:04 +0000 (02:42 +0000)
committerMatt Caswell <matt@openssl.org>
Fri, 25 Nov 2022 16:26:55 +0000 (16:26 +0000)
commitad062480f7490197b174edad8625ce40d74f6e68
treef4ac43084558412509820b4d167b4c2906f5cfb2
parent0dbd3a81e46dd7ea9f7832307fdd0b2ac207a5bf
Implements Hybrid Public Key Encryption (HPKE) as per RFC9180.

This supports all the modes, suites and export mechanisms defined
in RFC9180 and should be relatively easily extensible if/as new
suites are added.  The APIs are based on the pseudo-code from the
RFC, e.g. OSS_HPKE_encap() roughly maps to SetupBaseS().  External
APIs are defined in include/openssl/hpke.h and documented in
doc/man3/OSSL_HPKE_CTX_new.pod.  Tests (test/hpke_test.c) include
verifying a number of the test vectors from the RFC as well as
round-tripping for all the modes and suites.  We have demonstrated
interoperability with other HPKE implementations via a fork [1]
that implements TLS Encrypted ClientHello (ECH) which uses HPKE.

@slontis provided huge help in getting this done and this makes
extensive use of the KEM handling code from his PR#19068.

[1] https://github.com/sftcd/openssl/tree/ECH-draft-13c

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/17172)
21 files changed:
CHANGES.md
crypto/err/openssl.txt
crypto/hpke/build.info
crypto/hpke/hpke.c [new file with mode: 0644]
crypto/hpke/hpke_util.c
doc/build.info
doc/man3/OSSL_HPKE_CTX_new.pod [new file with mode: 0644]
include/crypto/hpke.h [deleted file]
include/internal/hpke_util.h [new file with mode: 0644]
include/openssl/hpke.h [new file with mode: 0644]
include/openssl/proverr.h
providers/common/include/prov/proverr.h
providers/common/provider_err.c
providers/implementations/kem/ec_kem.c
providers/implementations/kem/eckem.h
providers/implementations/kem/ecx_kem.c
providers/implementations/kem/kem_util.c
test/build.info
test/hpke_test.c [new file with mode: 0644]
test/recipes/30-test_hpke.t [new file with mode: 0644]
util/libcrypto.num