Skip to content

Commit 4f70914

Browse files
committed
add HPKE bindings
1 parent 6a45982 commit 4f70914

File tree

12 files changed

+789
-2
lines changed

12 files changed

+789
-2
lines changed

openssl-sys/build/expando.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ RUST_CONF_OPENSSL_NO_EC
6363
RUST_CONF_OPENSSL_NO_EC2M
6464
#endif
6565

66+
#ifdef OPENSSL_NO_ECX
67+
RUST_CONF_OPENSSL_NO_ECX
68+
#endif
69+
6670
#ifdef OPENSSL_NO_ENGINE
6771
RUST_CONF_OPENSSL_NO_ENGINE
6872
#endif

openssl-sys/build/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ fn check_ssl_kind() {
120120
}
121121

122122
fn main() {
123-
println!("cargo:rustc-check-cfg=cfg(osslconf, values(\"OPENSSL_NO_OCB\", \"OPENSSL_NO_SM4\", \"OPENSSL_NO_SEED\", \"OPENSSL_NO_CHACHA\", \"OPENSSL_NO_CAST\", \"OPENSSL_NO_IDEA\", \"OPENSSL_NO_CAMELLIA\", \"OPENSSL_NO_RC4\", \"OPENSSL_NO_BF\", \"OPENSSL_NO_PSK\", \"OPENSSL_NO_DEPRECATED_3_0\", \"OPENSSL_NO_SCRYPT\", \"OPENSSL_NO_SM3\", \"OPENSSL_NO_RMD160\", \"OPENSSL_NO_EC2M\", \"OPENSSL_NO_OCSP\", \"OPENSSL_NO_CMS\", \"OPENSSL_NO_COMP\", \"OPENSSL_NO_SOCK\", \"OPENSSL_NO_STDIO\", \"OPENSSL_NO_EC\", \"OPENSSL_NO_SSL3_METHOD\", \"OPENSSL_NO_KRB5\", \"OPENSSL_NO_TLSEXT\", \"OPENSSL_NO_SRP\", \"OPENSSL_NO_RFC3779\", \"OPENSSL_NO_SHA\", \"OPENSSL_NO_NEXTPROTONEG\", \"OPENSSL_NO_ENGINE\", \"OPENSSL_NO_BUF_FREELISTS\", \"OPENSSL_NO_RC2\"))");
123+
println!("cargo:rustc-check-cfg=cfg(osslconf, values(\"OPENSSL_NO_OCB\", \"OPENSSL_NO_SM4\", \"OPENSSL_NO_SEED\", \"OPENSSL_NO_CHACHA\", \"OPENSSL_NO_CAST\", \"OPENSSL_NO_IDEA\", \"OPENSSL_NO_CAMELLIA\", \"OPENSSL_NO_RC4\", \"OPENSSL_NO_BF\", \"OPENSSL_NO_PSK\", \"OPENSSL_NO_DEPRECATED_3_0\", \"OPENSSL_NO_SCRYPT\", \"OPENSSL_NO_SM3\", \"OPENSSL_NO_RMD160\", \"OPENSSL_NO_EC2M\", \"OPENSSL_NO_OCSP\", \"OPENSSL_NO_CMS\", \"OPENSSL_NO_COMP\", \"OPENSSL_NO_SOCK\", \"OPENSSL_NO_STDIO\", \"OPENSSL_NO_EC\", \"OPENSSL_NO_SSL3_METHOD\", \"OPENSSL_NO_KRB5\", \"OPENSSL_NO_TLSEXT\", \"OPENSSL_NO_SRP\", \"OPENSSL_NO_RFC3779\", \"OPENSSL_NO_SHA\", \"OPENSSL_NO_NEXTPROTONEG\", \"OPENSSL_NO_ENGINE\", \"OPENSSL_NO_BUF_FREELISTS\", \"OPENSSL_NO_RC2\", \"OPENSSL_NO_ECX\"))");
124124

125125
println!("cargo:rustc-check-cfg=cfg(openssl)");
126126
println!("cargo:rustc-check-cfg=cfg(libressl)");

openssl-sys/build/run_bindgen.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ const INCLUDES: &str = "
7272
#if OPENSSL_VERSION_NUMBER >= 0x30200000
7373
#include <openssl/thread.h>
7474
#endif
75+
76+
#if OPENSSL_VERSION_NUMBER >= 0x30200000
77+
#include <openssl/hpke.h>
78+
#endif
7579
";
7680

7781
#[cfg(feature = "bindgen")]

openssl-sys/src/handwritten/hpke.rs

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
use super::super::*;
2+
use libc::*;
3+
4+
extern "C" {
5+
pub fn OSSL_HPKE_CTX_new(
6+
mode: c_int,
7+
suite: OSSL_HPKE_SUITE,
8+
role: c_int,
9+
libctx: *mut OSSL_LIB_CTX,
10+
propq: *const c_char,
11+
) -> *mut OSSL_HPKE_CTX;
12+
pub fn OSSL_HPKE_CTX_free(ctx: *mut OSSL_HPKE_CTX);
13+
pub fn OSSL_HPKE_encap(
14+
ctx: *mut OSSL_HPKE_CTX,
15+
enc: *mut u8,
16+
enclen: *mut usize,
17+
pub_: *const u8,
18+
publen: usize,
19+
info: *const u8,
20+
infolen: usize,
21+
) -> c_int;
22+
pub fn OSSL_HPKE_seal(
23+
ctx: *mut OSSL_HPKE_CTX,
24+
ct: *mut u8,
25+
ctlen: *mut usize,
26+
aad: *const u8,
27+
aadlen: usize,
28+
pt: *const u8,
29+
ptlen: usize,
30+
) -> c_int;
31+
pub fn OSSL_HPKE_keygen(
32+
suite: OSSL_HPKE_SUITE,
33+
pub_: *mut u8,
34+
publen: *mut usize,
35+
priv_: *mut *mut EVP_PKEY,
36+
ikm: *const u8,
37+
ikmlen: usize,
38+
libctx: *mut OSSL_LIB_CTX,
39+
propq: *const c_char,
40+
) -> c_int;
41+
pub fn OSSL_HPKE_decap(
42+
ctx: *mut OSSL_HPKE_CTX,
43+
enc: *const u8,
44+
enclen: usize,
45+
recippriv: *mut EVP_PKEY,
46+
info: *const u8,
47+
infolen: usize,
48+
) -> c_int;
49+
pub fn OSSL_HPKE_open(
50+
ctx: *mut OSSL_HPKE_CTX,
51+
pt: *mut u8,
52+
ptlen: *mut usize,
53+
aad: *const u8,
54+
aadlen: usize,
55+
ct: *const u8,
56+
ctlen: usize,
57+
) -> c_int;
58+
pub fn OSSL_HPKE_export(
59+
ctx: *mut OSSL_HPKE_CTX,
60+
secret: *mut u8,
61+
secretlen: usize,
62+
label: *const u8,
63+
labellen: usize,
64+
) -> c_int;
65+
pub fn OSSL_HPKE_CTX_set1_authpriv(ctx: *mut OSSL_HPKE_CTX, priv_: *mut EVP_PKEY) -> c_int;
66+
pub fn OSSL_HPKE_CTX_set1_authpub(
67+
ctx: *mut OSSL_HPKE_CTX,
68+
pub_: *const u8,
69+
publen: usize,
70+
) -> c_int;
71+
pub fn OSSL_HPKE_CTX_set1_psk(
72+
ctx: *mut OSSL_HPKE_CTX,
73+
pskid: *const c_char,
74+
psk: *const u8,
75+
psklen: usize,
76+
) -> c_int;
77+
pub fn OSSL_HPKE_CTX_set1_ikme(
78+
ctx: *mut OSSL_HPKE_CTX,
79+
ikme: *const u8,
80+
ikmelen: usize,
81+
) -> c_int;
82+
pub fn OSSL_HPKE_CTX_set_seq(ctx: *mut OSSL_HPKE_CTX, seq: u64) -> c_int;
83+
pub fn OSSL_HPKE_CTX_get_seq(ctx: *mut OSSL_HPKE_CTX, seq: *mut u64) -> c_int;
84+
pub fn OSSL_HPKE_suite_check(suite: OSSL_HPKE_SUITE) -> c_int;
85+
pub fn OSSL_HPKE_get_grease_value(
86+
suite_in: *const OSSL_HPKE_SUITE,
87+
suite: *mut OSSL_HPKE_SUITE,
88+
enc: *mut u8,
89+
enclen: *mut usize,
90+
ct: *mut u8,
91+
ctlen: usize,
92+
libctx: *mut OSSL_LIB_CTX,
93+
propq: *const c_char,
94+
) -> c_int;
95+
pub fn OSSL_HPKE_str2suite(str_: *const c_char, suite: *mut OSSL_HPKE_SUITE) -> c_int;
96+
pub fn OSSL_HPKE_get_ciphertext_size(suite: OSSL_HPKE_SUITE, clearlen: usize) -> usize;
97+
pub fn OSSL_HPKE_get_public_encap_size(suite: OSSL_HPKE_SUITE) -> usize;
98+
pub fn OSSL_HPKE_get_recommended_ikmelen(suite: OSSL_HPKE_SUITE) -> usize;
99+
}

openssl-sys/src/handwritten/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ pub use self::ec::*;
1212
pub use self::err::*;
1313
pub use self::evp::*;
1414
pub use self::hmac::*;
15+
#[cfg(ossl320)]
16+
pub use self::hpke::*;
1517
pub use self::kdf::*;
1618
pub use self::object::*;
1719
pub use self::ocsp::*;
@@ -51,6 +53,8 @@ mod ec;
5153
mod err;
5254
mod evp;
5355
mod hmac;
56+
#[cfg(ossl320)]
57+
mod hpke;
5458
mod kdf;
5559
mod object;
5660
mod ocsp;

openssl-sys/src/handwritten/types.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,3 +1144,15 @@ pub struct OSSL_PARAM {
11441144
pub enum EVP_KDF {}
11451145
#[cfg(ossl300)]
11461146
pub enum EVP_KDF_CTX {}
1147+
1148+
#[cfg(ossl320)]
1149+
pub enum OSSL_HPKE_CTX {}
1150+
1151+
#[cfg(ossl320)]
1152+
#[repr(C)]
1153+
#[derive(Debug, Copy, Clone)]
1154+
pub struct OSSL_HPKE_SUITE {
1155+
pub kem_id: u16,
1156+
pub kdf_id: u16,
1157+
pub aead_id: u16,
1158+
}

openssl-sys/src/hpke.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#[cfg(ossl320)]
2+
use crate::OSSL_HPKE_SUITE;
3+
use libc::c_int;
4+
5+
#[cfg(ossl320)]
6+
pub const OSSL_HPKE_MODE_BASE: c_int = 0x00;
7+
#[cfg(ossl320)]
8+
pub const OSSL_HPKE_MODE_PSK: c_int = 0x01;
9+
#[cfg(ossl320)]
10+
pub const OSSL_HPKE_MODE_AUTH: c_int = 0x02;
11+
#[cfg(ossl320)]
12+
pub const OSSL_HPKE_MODE_PSKAUTH: c_int = 0x03;
13+
14+
#[cfg(ossl320)]
15+
pub const OSSL_HPKE_ROLE_SENDER: c_int = 0x00;
16+
#[cfg(ossl320)]
17+
pub const OSSL_HPKE_ROLE_RECEIVER: c_int = 0x01;
18+
19+
#[cfg(ossl320)]
20+
pub const OSSL_HPKE_KEM_ID_P256: u16 = 0x10;
21+
#[cfg(ossl320)]
22+
pub const OSSL_HPKE_KEM_ID_P384: u16 = 0x11;
23+
#[cfg(ossl320)]
24+
pub const OSSL_HPKE_KEM_ID_P521: u16 = 0x12;
25+
#[cfg(ossl320)]
26+
pub const OSSL_HPKE_KEM_ID_X25519: u16 = 0x20;
27+
#[cfg(ossl320)]
28+
pub const OSSL_HPKE_KEM_ID_X448: u16 = 0x21;
29+
30+
#[cfg(ossl320)]
31+
pub const OSSL_HPKE_KDF_ID_HKDF_SHA256: u16 = 0x01;
32+
#[cfg(ossl320)]
33+
pub const OSSL_HPKE_KDF_ID_HKDF_SHA384: u16 = 0x02;
34+
#[cfg(ossl320)]
35+
pub const OSSL_HPKE_KDF_ID_HKDF_SHA512: u16 = 0x03;
36+
37+
#[cfg(ossl320)]
38+
pub const OSSL_HPKE_AEAD_ID_AES_GCM_128: u16 = 0x01;
39+
#[cfg(ossl320)]
40+
pub const OSSL_HPKE_AEAD_ID_AES_GCM_256: u16 = 0x02;
41+
#[cfg(ossl320)]
42+
pub const OSSL_HPKE_AEAD_ID_CHACHA_POLY1305: u16 = 0x03;
43+
#[cfg(ossl320)]
44+
pub const OSSL_HPKE_AEAD_ID_EXPORTONLY: u16 = 0xFFFF;
45+
46+
#[cfg(all(ossl320, not(osslconf = "OPENSSL_NO_ECX")))]
47+
pub const OSSL_HPKE_SUITE_DEFAULT: OSSL_HPKE_SUITE = OSSL_HPKE_SUITE {
48+
kem_id: OSSL_HPKE_KEM_ID_X25519,
49+
kdf_id: OSSL_HPKE_KDF_ID_HKDF_SHA256,
50+
aead_id: OSSL_HPKE_AEAD_ID_AES_GCM_128,
51+
};
52+
53+
#[cfg(all(ossl320, osslconf = "OPENSSL_NO_ECX"))]
54+
pub const OSSL_HPKE_SUITE_DEFAULT: OSSL_HPKE_SUITE = OSSL_HPKE_SUITE {
55+
kem_id: OSSL_HPKE_KEM_ID_P256,
56+
kdf_id: OSSL_HPKE_KDF_ID_HKDF_SHA256,
57+
aead_id: OSSL_HPKE_AEAD_ID_AES_GCM_128,
58+
};

openssl-sys/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ mod openssl {
7676
pub use self::evp::*;
7777
#[cfg(not(feature = "bindgen"))]
7878
pub use self::handwritten::*;
79+
pub use self::hpke::*;
7980
pub use self::obj_mac::*;
8081
pub use self::ocsp::*;
8182
pub use self::pem::*;
@@ -106,6 +107,7 @@ mod openssl {
106107
mod evp;
107108
#[cfg(not(feature = "bindgen"))]
108109
mod handwritten;
110+
mod hpke;
109111
mod obj_mac;
110112
mod ocsp;
111113
mod pem;

openssl/build.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use std::env;
88

99
fn main() {
10-
println!("cargo:rustc-check-cfg=cfg(osslconf, values(\"OPENSSL_NO_OCB\", \"OPENSSL_NO_SM4\", \"OPENSSL_NO_SEED\", \"OPENSSL_NO_CHACHA\", \"OPENSSL_NO_CAST\", \"OPENSSL_NO_IDEA\", \"OPENSSL_NO_CAMELLIA\", \"OPENSSL_NO_RC4\", \"OPENSSL_NO_BF\", \"OPENSSL_NO_PSK\", \"OPENSSL_NO_DEPRECATED_3_0\", \"OPENSSL_NO_SCRYPT\", \"OPENSSL_NO_SM3\", \"OPENSSL_NO_RMD160\", \"OPENSSL_NO_EC2M\", \"OPENSSL_NO_OCSP\", \"OPENSSL_NO_CMS\", \"OPENSSL_NO_EC\", \"OPENSSL_NO_ARGON2\", \"OPENSSL_NO_RC2\"))");
10+
println!("cargo:rustc-check-cfg=cfg(osslconf, values(\"OPENSSL_NO_OCB\", \"OPENSSL_NO_SM4\", \"OPENSSL_NO_SEED\", \"OPENSSL_NO_CHACHA\", \"OPENSSL_NO_CAST\", \"OPENSSL_NO_IDEA\", \"OPENSSL_NO_CAMELLIA\", \"OPENSSL_NO_RC4\", \"OPENSSL_NO_BF\", \"OPENSSL_NO_PSK\", \"OPENSSL_NO_DEPRECATED_3_0\", \"OPENSSL_NO_SCRYPT\", \"OPENSSL_NO_SM3\", \"OPENSSL_NO_RMD160\", \"OPENSSL_NO_EC2M\", \"OPENSSL_NO_OCSP\", \"OPENSSL_NO_CMS\", \"OPENSSL_NO_EC\", \"OPENSSL_NO_ARGON2\", \"OPENSSL_NO_RC2\", \"OPENSSL_NO_ECX\"))");
1111

1212
println!("cargo:rustc-check-cfg=cfg(libressl)");
1313
println!("cargo:rustc-check-cfg=cfg(boringssl)");

0 commit comments

Comments
 (0)