Skip to content

Commit 0c76072

Browse files
authored
Convert the remaining extensions to use Asn1Operation (#12030)
1 parent f01ee1d commit 0c76072

File tree

3 files changed

+25
-45
lines changed

3 files changed

+25
-45
lines changed

src/rust/cryptography-x509/src/extensions.rs

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -273,45 +273,34 @@ pub struct NamingAuthority<'a> {
273273
pub text: Option<DisplayText<'a>>,
274274
}
275275

276-
type SequenceOfDisplayTexts<'a> = common::Asn1ReadableOrWritable<
277-
asn1::SequenceOf<'a, DisplayText<'a>>,
278-
asn1::SequenceOfWriter<'a, DisplayText<'a>, Vec<DisplayText<'a>>>,
279-
>;
276+
type SequenceOfDisplayTexts<'a, Op> = <Op as Asn1Operation>::SequenceOfVec<'a, DisplayText<'a>>;
280277

281-
type SequenceOfObjectIdentifiers<'a> = common::Asn1ReadableOrWritable<
282-
asn1::SequenceOf<'a, asn1::ObjectIdentifier>,
283-
asn1::SequenceOfWriter<'a, asn1::ObjectIdentifier, Vec<asn1::ObjectIdentifier>>,
284-
>;
278+
type SequenceOfObjectIdentifiers<'a, Op> =
279+
<Op as Asn1Operation>::SequenceOfVec<'a, asn1::ObjectIdentifier>;
285280

286281
#[derive(asn1::Asn1Read, asn1::Asn1Write)]
287-
pub struct ProfessionInfo<'a> {
282+
pub struct ProfessionInfo<'a, Op: Asn1Operation> {
288283
#[explicit(0)]
289284
pub naming_authority: Option<NamingAuthority<'a>>,
290-
pub profession_items: SequenceOfDisplayTexts<'a>,
291-
pub profession_oids: Option<SequenceOfObjectIdentifiers<'a>>,
285+
pub profession_items: SequenceOfDisplayTexts<'a, Op>,
286+
pub profession_oids: Option<SequenceOfObjectIdentifiers<'a, Op>>,
292287
pub registration_number: Option<asn1::PrintableString<'a>>,
293288
pub add_profession_info: Option<&'a [u8]>,
294289
}
295290

296291
#[derive(asn1::Asn1Read, asn1::Asn1Write)]
297-
pub struct Admission<'a> {
292+
pub struct Admission<'a, Op: Asn1Operation + 'a> {
298293
#[explicit(0)]
299294
pub admission_authority: Option<name::GeneralName<'a>>,
300295
#[explicit(1)]
301296
pub naming_authority: Option<NamingAuthority<'a>>,
302-
pub profession_infos: common::Asn1ReadableOrWritable<
303-
asn1::SequenceOf<'a, ProfessionInfo<'a>>,
304-
asn1::SequenceOfWriter<'a, ProfessionInfo<'a>, Vec<ProfessionInfo<'a>>>,
305-
>,
297+
pub profession_infos: Op::SequenceOfVec<'a, ProfessionInfo<'a, Op>>,
306298
}
307299

308300
#[derive(asn1::Asn1Read, asn1::Asn1Write)]
309-
pub struct Admissions<'a> {
301+
pub struct Admissions<'a, Op: Asn1Operation> {
310302
pub admission_authority: Option<name::GeneralName<'a>>,
311-
pub contents_of_admissions: common::Asn1ReadableOrWritable<
312-
asn1::SequenceOf<'a, Admission<'a>>,
313-
asn1::SequenceOfWriter<'a, Admission<'a>, Vec<Admission<'a>>>,
314-
>,
303+
pub contents_of_admissions: Op::SequenceOfVec<'a, Admission<'a, Op>>,
315304
}
316305

317306
#[cfg(test)]

src/rust/src/x509/certificate.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -726,7 +726,7 @@ fn parse_naming_authority<'p>(
726726

727727
fn parse_profession_infos<'p, 'a>(
728728
py: pyo3::Python<'p>,
729-
profession_infos: &asn1::SequenceOf<'a, ProfessionInfo<'a>>,
729+
profession_infos: &asn1::SequenceOf<'a, ProfessionInfo<'a, Asn1Read>>,
730730
) -> CryptographyResult<pyo3::Bound<'p, pyo3::PyAny>> {
731731
let py_infos = pyo3::types::PyList::empty(py);
732732
for info in profession_infos.clone() {
@@ -735,14 +735,14 @@ fn parse_profession_infos<'p, 'a>(
735735
None => py.None().into_bound(py),
736736
};
737737
let py_profession_items = pyo3::types::PyList::empty(py);
738-
for item in info.profession_items.unwrap_read().clone() {
738+
for item in info.profession_items {
739739
let py_item = parse_display_text(py, item)?;
740740
py_profession_items.append(py_item)?;
741741
}
742742
let py_profession_oids = match info.profession_oids {
743743
Some(oids) => {
744744
let py_oids = pyo3::types::PyList::empty(py);
745-
for oid in oids.unwrap_read().clone() {
745+
for oid in oids {
746746
let py_oid = oid_to_py_oid(py, &oid)?;
747747
py_oids.append(py_oid)?;
748748
}
@@ -772,7 +772,7 @@ fn parse_profession_infos<'p, 'a>(
772772

773773
fn parse_admissions<'p, 'a>(
774774
py: pyo3::Python<'p>,
775-
admissions: &asn1::SequenceOf<'a, Admission<'a>>,
775+
admissions: &asn1::SequenceOf<'a, Admission<'a, Asn1Read>>,
776776
) -> CryptographyResult<pyo3::Bound<'p, pyo3::PyAny>> {
777777
let py_admissions = pyo3::types::PyList::empty(py);
778778
for admission in admissions.clone() {
@@ -784,7 +784,7 @@ fn parse_admissions<'p, 'a>(
784784
Some(data) => parse_naming_authority(py, data)?,
785785
None => py.None().into_bound(py),
786786
};
787-
let py_infos = parse_profession_infos(py, admission.profession_infos.unwrap_read())?;
787+
let py_infos = parse_profession_infos(py, &admission.profession_infos)?;
788788

789789
let py_entry = types::ADMISSION.get(py)?.call1((
790790
py_admission_authority,
@@ -935,13 +935,12 @@ pub fn parse_cert_ext<'p>(
935935
))?))
936936
}
937937
oid::ADMISSIONS_OID => {
938-
let admissions = ext.value::<Admissions<'_>>()?;
938+
let admissions = ext.value::<Admissions<'_, Asn1Read>>()?;
939939
let admission_authority = match admissions.admission_authority {
940940
Some(authority) => x509::parse_general_name(py, authority)?,
941941
None => py.None().into_bound(py),
942942
};
943-
let py_admissions =
944-
parse_admissions(py, admissions.contents_of_admissions.unwrap_read())?;
943+
let py_admissions = parse_admissions(py, &admissions.contents_of_admissions)?;
945944
Ok(Some(
946945
types::ADMISSIONS
947946
.get(py)?

src/rust/src/x509/extensions.rs

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22
// 2.0, and the BSD License. See the LICENSE file in the root of this repository
33
// for complete details.
44

5-
use cryptography_x509::{
6-
common::{self, Asn1Write},
7-
crl, extensions, oid,
8-
};
5+
use cryptography_x509::{common::Asn1Write, crl, extensions, oid};
96

107
use crate::asn1::{py_oid_to_oid, py_uint_to_big_endian_bytes};
118
use crate::error::{CryptographyError, CryptographyResult};
@@ -456,7 +453,7 @@ fn encode_profession_info<'a>(
456453
ka_bytes: &'a cryptography_keepalive::KeepAlive<pyo3::pybacked::PyBackedBytes>,
457454
ka_str: &'a cryptography_keepalive::KeepAlive<pyo3::pybacked::PyBackedStr>,
458455
py_info: &pyo3::Bound<'a, pyo3::PyAny>,
459-
) -> CryptographyResult<extensions::ProfessionInfo<'a>> {
456+
) -> CryptographyResult<extensions::ProfessionInfo<'a, Asn1Write>> {
460457
let py_naming_authority = py_info.getattr(pyo3::intern!(py, "naming_authority"))?;
461458
let naming_authority = if !py_naming_authority.is_none() {
462459
Some(encode_naming_authority(py, ka_str, &py_naming_authority)?)
@@ -471,8 +468,7 @@ fn encode_profession_info<'a>(
471468
let item = extensions::DisplayText::Utf8String(asn1::Utf8String::new(py_item_str));
472469
profession_items.push(item);
473470
}
474-
let profession_items =
475-
common::Asn1ReadableOrWritable::new_write(asn1::SequenceOfWriter::new(profession_items));
471+
let profession_items = asn1::SequenceOfWriter::new(profession_items);
476472
let py_oids = py_info.getattr(pyo3::intern!(py, "profession_oids"))?;
477473
let profession_oids = if !py_oids.is_none() {
478474
let mut profession_oids = vec![];
@@ -481,9 +477,7 @@ fn encode_profession_info<'a>(
481477
let oid = py_oid_to_oid(py_oid)?;
482478
profession_oids.push(oid);
483479
}
484-
Some(common::Asn1ReadableOrWritable::new_write(
485-
asn1::SequenceOfWriter::new(profession_oids),
486-
))
480+
Some(asn1::SequenceOfWriter::new(profession_oids))
487481
} else {
488482
None
489483
};
@@ -524,7 +518,7 @@ fn encode_admission<'a>(
524518
ka_bytes: &'a cryptography_keepalive::KeepAlive<pyo3::pybacked::PyBackedBytes>,
525519
ka_str: &'a cryptography_keepalive::KeepAlive<pyo3::pybacked::PyBackedStr>,
526520
py_admission: &pyo3::Bound<'a, pyo3::PyAny>,
527-
) -> CryptographyResult<extensions::Admission<'a>> {
521+
) -> CryptographyResult<extensions::Admission<'a, Asn1Write>> {
528522
let py_admission_authority = py_admission.getattr(pyo3::intern!(py, "admission_authority"))?;
529523
let admission_authority = if !py_admission_authority.is_none() {
530524
Some(x509::common::encode_general_name(
@@ -548,8 +542,7 @@ fn encode_admission<'a>(
548542
for py_info in py_profession_infos.try_iter()? {
549543
profession_infos.push(encode_profession_info(py, ka_bytes, ka_str, &py_info?)?);
550544
}
551-
let profession_infos =
552-
common::Asn1ReadableOrWritable::new_write(asn1::SequenceOfWriter::new(profession_infos));
545+
let profession_infos = asn1::SequenceOfWriter::new(profession_infos);
553546
Ok(extensions::Admission {
554547
admission_authority,
555548
naming_authority,
@@ -726,10 +719,9 @@ pub(crate) fn encode_extension(
726719
admissions.push(admission);
727720
}
728721

729-
let contents_of_admissions =
730-
common::Asn1ReadableOrWritable::new_write(asn1::SequenceOfWriter::new(admissions));
722+
let contents_of_admissions = asn1::SequenceOfWriter::new(admissions);
731723

732-
let admission = extensions::Admissions {
724+
let admission = extensions::Admissions::<Asn1Write> {
733725
admission_authority,
734726
contents_of_admissions,
735727
};

0 commit comments

Comments
 (0)