Skip to content

Commit 715b6da

Browse files
committed
Refactored: Moved TLSGroupNames to constants
Added: Test group_to_name in tests/constants.c Refactored: Moved tests in separate functions in tests/constants.c
1 parent c4d7585 commit 715b6da

File tree

4 files changed

+57
-159
lines changed

4 files changed

+57
-159
lines changed

src/constants.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,27 @@ pub fn sig_scheme_to_type_nid(scheme: SignatureScheme) -> Option<c_int> {
120120
}
121121
}
122122

123+
pub fn named_group_to_tls_name(id: NamedGroup) -> Option<&'static CStr> {
124+
match id {
125+
NamedGroup::secp256r1 => Some(c"secp256r1"),
126+
NamedGroup::secp384r1 => Some(c"secp384r1"),
127+
NamedGroup::secp521r1 => Some(c"secp521r1"),
128+
NamedGroup::X25519 => Some(c"x25519"),
129+
NamedGroup::X448 => Some(c"x448"),
130+
NamedGroup::FFDHE2048 => Some(c"ffdhe2048"),
131+
NamedGroup::FFDHE3072 => Some(c"ffdhe3072"),
132+
NamedGroup::FFDHE4096 => Some(c"ffdhe4096"),
133+
NamedGroup::FFDHE6144 => Some(c"ffdhe6144"),
134+
NamedGroup::FFDHE8192 => Some(c"ffdhe8192"),
135+
NamedGroup::MLKEM512 => Some(c"MLKEM512"),
136+
NamedGroup::MLKEM768 => Some(c"MLKEM768"),
137+
NamedGroup::MLKEM1024 => Some(c"MLKEM1024"),
138+
NamedGroup::X25519MLKEM768 => Some(c"X25519MLKEM768"),
139+
NamedGroup::secp256r1MLKEM768 => Some(c"SecP256r1MLKEM768"),
140+
_ => None,
141+
}
142+
}
143+
123144
pub fn named_group_to_nid(group: NamedGroup) -> Option<c_int> {
124145
use NamedGroup::*;
125146

src/entry.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use rustls::pki_types::{CertificateDer, PrivateKeyDer, PrivatePkcs8KeyDer};
2222

2323
use crate::bio::{Bio, BIO, BIO_METHOD};
2424
use crate::callbacks::SslCallbackContext;
25-
use crate::constants::{named_group_to_nid, sig_scheme_to_type_nid};
25+
use crate::constants::{named_group_to_nid, named_group_to_tls_name, sig_scheme_to_type_nid};
2626
use crate::error::{ffi_panic_boundary, Error, MysteriouslyOppositeReturnValue};
2727
use crate::evp_pkey::EvpPkey;
2828
use crate::ex_data::ExData;
@@ -1481,10 +1481,12 @@ entry! {
14811481
.get()
14821482
.get_groups()
14831483
.iter()
1484-
.find(|group| named_group_to_nid(group.name()) == Some(id))
1485-
.map(|group| group.name())
1486-
.and_then(crate::TlsGroupInfo::find_by_id)
1487-
.map(|group| group.tls_name.as_ptr())
1484+
.find_map(|group| match named_group_to_nid(group.name()) {
1485+
Some(nid) if nid == id => {
1486+
named_group_to_tls_name(group.name()).map(|info| info.as_ptr())
1487+
}
1488+
_ => None,
1489+
})
14881490
.unwrap_or_else(ptr::null)
14891491
}
14901492
}

src/lib.rs

Lines changed: 2 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use rustls::pki_types::{CertificateDer, ServerName};
1818
use rustls::server::{Accepted, Acceptor, ProducesTickets};
1919
use rustls::{
2020
AlertDescription, CipherSuite, ClientConfig, ClientConnection, Connection, HandshakeKind,
21-
NamedGroup, ProtocolVersion, ServerConfig, SignatureScheme, SupportedProtocolVersion,
21+
ProtocolVersion, ServerConfig, SignatureScheme, SupportedProtocolVersion,
2222
};
2323

2424
use not_thread_safe::NotThreadSafe;
@@ -240,158 +240,6 @@ static TLS13_CHACHA20_POLY1305_SHA256: SslCipher = SslCipher {
240240
description: c"TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD\n",
241241
};
242242

243-
#[allow(dead_code)]
244-
struct TlsGroupInfo {
245-
pub tls_name: &'static CStr,
246-
pub standard_name: &'static CStr,
247-
pub algorithm: &'static CStr,
248-
pub secbits: usize,
249-
pub group_id: NamedGroup,
250-
}
251-
252-
impl TlsGroupInfo {
253-
pub fn find_by_id(id: NamedGroup) -> Option<&'static Self> {
254-
match id {
255-
NamedGroup::secp256r1 => Some(&SECP256R1),
256-
NamedGroup::secp384r1 => Some(&SECP384R1),
257-
NamedGroup::secp521r1 => Some(&SECP521R1),
258-
NamedGroup::X25519 => Some(&X25519),
259-
NamedGroup::X448 => Some(&X448),
260-
NamedGroup::FFDHE2048 => Some(&FFDHE2048),
261-
NamedGroup::FFDHE3072 => Some(&FFDHE3072),
262-
NamedGroup::FFDHE4096 => Some(&FFDHE4096),
263-
NamedGroup::FFDHE6144 => Some(&FFDHE6144),
264-
NamedGroup::FFDHE8192 => Some(&FFDHE8192),
265-
NamedGroup::MLKEM512 => Some(&MLKEM512),
266-
NamedGroup::MLKEM768 => Some(&MLKEM768),
267-
NamedGroup::MLKEM1024 => Some(&MLKEM1024),
268-
NamedGroup::X25519MLKEM768 => Some(&X25519MLKEM768),
269-
NamedGroup::secp256r1MLKEM768 => Some(&SECP256R1_MLKEM768),
270-
_ => None,
271-
}
272-
}
273-
}
274-
275-
static SECP256R1: TlsGroupInfo = TlsGroupInfo {
276-
tls_name: c"secp256r1",
277-
standard_name: c"prime256v1",
278-
algorithm: c"EC",
279-
secbits: 128,
280-
group_id: NamedGroup::secp256r1,
281-
};
282-
283-
static SECP384R1: TlsGroupInfo = TlsGroupInfo {
284-
tls_name: c"secp384r1",
285-
standard_name: c"secp384r1",
286-
algorithm: c"EC",
287-
secbits: 192,
288-
group_id: NamedGroup::secp384r1,
289-
};
290-
291-
static SECP521R1: TlsGroupInfo = TlsGroupInfo {
292-
tls_name: c"secp521r1",
293-
standard_name: c"secp521r1",
294-
algorithm: c"EC",
295-
secbits: 256,
296-
group_id: NamedGroup::secp521r1,
297-
};
298-
299-
static X25519: TlsGroupInfo = TlsGroupInfo {
300-
tls_name: c"x25519",
301-
standard_name: c"X25519",
302-
algorithm: c"X25519",
303-
secbits: 128,
304-
group_id: NamedGroup::X25519,
305-
};
306-
307-
static X448: TlsGroupInfo = TlsGroupInfo {
308-
tls_name: c"x448",
309-
standard_name: c"X448",
310-
algorithm: c"X448",
311-
secbits: 224,
312-
group_id: NamedGroup::X448,
313-
};
314-
315-
static FFDHE2048: TlsGroupInfo = TlsGroupInfo {
316-
tls_name: c"ffdhe2048",
317-
standard_name: c"ffdhe2048",
318-
algorithm: c"DH",
319-
secbits: 112,
320-
group_id: NamedGroup::FFDHE2048,
321-
};
322-
323-
static FFDHE3072: TlsGroupInfo = TlsGroupInfo {
324-
tls_name: c"ffdhe3072",
325-
standard_name: c"ffdhe3072",
326-
algorithm: c"DH",
327-
secbits: 128,
328-
group_id: NamedGroup::FFDHE3072,
329-
};
330-
331-
static FFDHE4096: TlsGroupInfo = TlsGroupInfo {
332-
tls_name: c"ffdhe4096",
333-
standard_name: c"ffdhe4096",
334-
algorithm: c"DH",
335-
secbits: 128,
336-
group_id: NamedGroup::FFDHE4096,
337-
};
338-
339-
static FFDHE6144: TlsGroupInfo = TlsGroupInfo {
340-
tls_name: c"ffdhe6144",
341-
standard_name: c"ffdhe6144",
342-
algorithm: c"DH",
343-
secbits: 128,
344-
group_id: NamedGroup::FFDHE6144,
345-
};
346-
347-
static FFDHE8192: TlsGroupInfo = TlsGroupInfo {
348-
tls_name: c"ffdhe8192",
349-
standard_name: c"ffdhe8192",
350-
algorithm: c"DH",
351-
secbits: 192,
352-
group_id: NamedGroup::FFDHE8192,
353-
};
354-
355-
static MLKEM512: TlsGroupInfo = TlsGroupInfo {
356-
tls_name: c"MLKEM512",
357-
standard_name: c"",
358-
algorithm: c"ML-KEM-512",
359-
secbits: 128,
360-
group_id: NamedGroup::MLKEM512,
361-
};
362-
363-
static MLKEM768: TlsGroupInfo = TlsGroupInfo {
364-
tls_name: c"MLKEM768",
365-
standard_name: c"",
366-
algorithm: c"ML-KEM-768",
367-
secbits: 192,
368-
group_id: NamedGroup::MLKEM768,
369-
};
370-
371-
static MLKEM1024: TlsGroupInfo = TlsGroupInfo {
372-
tls_name: c"MLKEM1024",
373-
standard_name: c"",
374-
algorithm: c"ML-KEM-1024",
375-
secbits: 256,
376-
group_id: NamedGroup::MLKEM1024,
377-
};
378-
379-
static X25519MLKEM768: TlsGroupInfo = TlsGroupInfo {
380-
tls_name: c"X25519MLKEM768",
381-
standard_name: c"",
382-
algorithm: c"X25519MLKEM768",
383-
secbits: 192,
384-
group_id: NamedGroup::X25519MLKEM768,
385-
};
386-
387-
static SECP256R1_MLKEM768: TlsGroupInfo = TlsGroupInfo {
388-
tls_name: c"SecP256r1MLKEM768",
389-
standard_name: c"",
390-
algorithm: c"SecP256r1MLKEM768",
391-
secbits: 192,
392-
group_id: NamedGroup::secp256r1MLKEM768,
393-
};
394-
395243
/// Backs a server-side SSL_SESSION object
396244
///
397245
/// Note that this has equality and ordering entirely based on the `id` field.
@@ -1261,6 +1109,7 @@ impl Ssl {
12611109
if let ConnMode::Unknown = self.mode {
12621110
self.set_client_mode();
12631111
}
1112+
12641113
if matches!(self.conn, ConnState::Nothing) {
12651114
self.init_client_conn()?;
12661115
}

tests/constants.c

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,36 @@
66

77
#include <openssl/ssl.h>
88

9-
int main(void) {
9+
void print_group_to_name(){
10+
// secp{256, 384, 521}r1, x{25519, 448}, ffdhe{2048, 3072, 4096, 6144, 8192}
11+
int supported_nids[] = {415, 715, 716, 1034, 1035, 1126, 1127, 1128, 1129, 1130};
12+
SSL_CTX *ctx = SSL_CTX_new(TLS_method());
13+
if (!ctx) {
14+
printf("Failed allocating SSL context\n");
15+
return;
16+
}
17+
SSL *ssl_inst = SSL_new(ctx);
18+
if (!ssl_inst) {
19+
printf("Failed allocating SSL struct\n");
20+
return;
21+
}
22+
23+
for(size_t i=0; i < sizeof(supported_nids)/sizeof(int); i += 1){
24+
printf("%s\n", SSL_group_to_name(ssl_inst, supported_nids[i]));
25+
}
26+
27+
SSL_free(ssl_inst);
28+
SSL_CTX_free(ctx);
29+
}
30+
31+
void print_alert_desc_string(){
1032
for (int i = -1; i < 260; i++) {
1133
printf("%d: '%s' '%s'\n", i, SSL_alert_desc_string(i),
1234
SSL_alert_desc_string_long(i));
1335
}
36+
}
37+
int main(void) {
38+
print_alert_desc_string();
39+
print_group_to_name();
1440
return 0;
1541
}

0 commit comments

Comments
 (0)