Skip to content

Commit 3035ab0

Browse files
fix(pki): Add sign algo to pki list result
Closes #11536
1 parent f9928ba commit 3035ab0

File tree

21 files changed

+130
-4
lines changed

21 files changed

+130
-4
lines changed

bindings/electron/src/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ export interface PkiEnrollmentListItem {
292292
submittedOn: number
293293
derX509Certificate: Uint8Array
294294
payloadSignature: Uint8Array
295+
payloadSignatureAlgorithm: string
295296
payload: Uint8Array
296297
}
297298

bindings/electron/src/meths.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2476,6 +2476,15 @@ fn struct_pki_enrollment_list_item_js_to_rs<'a>(
24762476
}
24772477
}
24782478
};
2479+
let payload_signature_algorithm = {
2480+
let js_val: Handle<JsString> = obj.get(cx, "payloadSignatureAlgorithm")?;
2481+
{
2482+
match js_val.value(cx).parse() {
2483+
Ok(val) => val,
2484+
Err(err) => return cx.throw_type_error(err),
2485+
}
2486+
}
2487+
};
24792488
let payload = {
24802489
let js_val: Handle<JsTypedArray<u8>> = obj.get(cx, "payload")?;
24812490
{
@@ -2495,6 +2504,7 @@ fn struct_pki_enrollment_list_item_js_to_rs<'a>(
24952504
submitted_on,
24962505
der_x509_certificate,
24972506
payload_signature,
2507+
payload_signature_algorithm,
24982508
payload,
24992509
})
25002510
}
@@ -2537,6 +2547,20 @@ fn struct_pki_enrollment_list_item_rs_to_js<'a>(
25372547
js_buff
25382548
};
25392549
js_obj.set(cx, "payloadSignature", js_payload_signature)?;
2550+
let js_payload_signature_algorithm = JsString::try_new(cx, {
2551+
let custom_to_rs_string =
2552+
|v| -> Result<_, std::convert::Infallible> { Ok(std::string::ToString::to_string(&v)) };
2553+
match custom_to_rs_string(rs_obj.payload_signature_algorithm) {
2554+
Ok(ok) => ok,
2555+
Err(err) => return cx.throw_type_error(err.to_string()),
2556+
}
2557+
})
2558+
.or_throw(cx)?;
2559+
js_obj.set(
2560+
cx,
2561+
"payloadSignatureAlgorithm",
2562+
js_payload_signature_algorithm,
2563+
)?;
25402564
let js_payload = {
25412565
let rs_buff = { rs_obj.payload.as_ref() };
25422566
let js_buff = JsTypedArray::from_slice(cx, rs_buff.as_ref())?;

bindings/generator/api/pki.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ class PkiEnrollmentListItem(Structure):
9292
submitted_on: DateTime
9393
der_x509_certificate: Bytes
9494
payload_signature: Bytes
95+
payload_signature_algorithm: PkiSignatureAlgorithm
9596
payload: Bytes
9697

9798

bindings/web/src/meths.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2620,6 +2620,16 @@ fn struct_pki_enrollment_list_item_js_to_rs(
26202620
custom_from_rs_bytes(&x).map_err(|e| TypeError::new(e.as_ref()))
26212621
})?
26222622
};
2623+
let payload_signature_algorithm = {
2624+
let js_val = Reflect::get(&obj, &"payloadSignatureAlgorithm".into())?;
2625+
js_val
2626+
.dyn_into::<JsString>()
2627+
.ok()
2628+
.and_then(|s| s.as_string())
2629+
.ok_or_else(|| TypeError::new("Not a string"))?
2630+
.parse()
2631+
.map_err(|_| TypeError::new("Not a valid PkiSignatureAlgorithm"))?
2632+
};
26232633
let payload = {
26242634
let js_val = Reflect::get(&obj, &"payload".into())?;
26252635
js_val
@@ -2637,6 +2647,7 @@ fn struct_pki_enrollment_list_item_js_to_rs(
26372647
submitted_on,
26382648
der_x509_certificate,
26392649
payload_signature,
2650+
payload_signature_algorithm,
26402651
payload,
26412652
})
26422653
}
@@ -2676,6 +2687,20 @@ fn struct_pki_enrollment_list_item_rs_to_js(
26762687
)?;
26772688
let js_payload_signature = JsValue::from(Uint8Array::from(rs_obj.payload_signature.as_ref()));
26782689
Reflect::set(&js_obj, &"payloadSignature".into(), &js_payload_signature)?;
2690+
let js_payload_signature_algorithm = JsValue::from_str({
2691+
let custom_to_rs_string =
2692+
|v| -> Result<_, std::convert::Infallible> { Ok(std::string::ToString::to_string(&v)) };
2693+
match custom_to_rs_string(rs_obj.payload_signature_algorithm) {
2694+
Ok(ok) => ok,
2695+
Err(err) => return Err(JsValue::from(TypeError::new(&err.to_string()))),
2696+
}
2697+
.as_ref()
2698+
});
2699+
Reflect::set(
2700+
&js_obj,
2701+
&"payloadSignatureAlgorithm".into(),
2702+
&js_payload_signature_algorithm,
2703+
)?;
26792704
let js_payload = JsValue::from(Uint8Array::from(rs_obj.payload.as_ref()));
26802705
Reflect::set(&js_obj, &"payload".into(), &js_payload)?;
26812706
Ok(js_obj)

client/src/plugins/libparsec/definitions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ export interface PkiEnrollmentListItem {
311311
submittedOn: DateTime
312312
derX509Certificate: Bytes
313313
payloadSignature: Bytes
314+
payloadSignatureAlgorithm: PkiSignatureAlgorithm
314315
payload: Bytes
315316
}
316317

libparsec/crates/client/tests/unit/client/pki_enrollment_list.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ async fn ok(env: &TestbedEnv) {
1919
enrollment_id: PKIEnrollmentID::from_hex("e1fe88bd0f054261887a6c8039710b40").unwrap(),
2020
payload: hex!("3c64756d6d793e").as_ref().into(),
2121
payload_signature: hex!("3c7369676e61747572653e").as_ref().into(),
22+
payload_signature_algorithm: PkiSignatureAlgorithm::RsassaPssSha256,
2223
submitted_on: DateTime::from_timestamp_micros(1668594983390001).unwrap(),
2324
};
2425
let pki_enrollment_item_clone = pki_enrollment_item.clone();

libparsec/crates/protocol/schema/authenticated_cmds/pki_enrollment_list.json5

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@
4646
"name": "payload_signature",
4747
"type": "Bytes"
4848
},
49+
{
50+
"name": "payload_signature_algorithm",
51+
"type": "PkiSignatureAlgorithm"
52+
},
4953
{
5054
// The payload, it's a `PkiEnrollmentSubmitPayload` formatted in msgpack
5155
"name": "payload",

libparsec/crates/protocol/tests/authenticated_cmds/v5/pki_enrollment_list.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ pub fn req() {
4242
pub fn rep_ok() {
4343
let raw_expected = [
4444
(
45-
// Generated from Parsec 3.5.1-a.0+dev
45+
// Generated from Parsec 3.5.3-a.0+dev
4646
// Content:
4747
// status: 'ok'
4848
// enrollments: [
@@ -51,15 +51,17 @@ pub fn rep_ok() {
5151
// enrollment_id: ext(2, 0xe1fe88bd0f054261887a6c8039710b40),
5252
// payload: 0x3c64756d6d793e,
5353
// payload_signature: 0x3c7369676e61747572653e,
54+
// payload_signature_algorithm: 'RSASSA-PSS-SHA256',
5455
// submitted_on: ext(1, 1668594983390001) i.e. 2022-11-16T11:36:23.390001Z,
5556
// },
5657
// ]
5758
hex!(
58-
"82a6737461747573a26f6bab656e726f6c6c6d656e74739185b46465725f783530395f"
59+
"82a6737461747573a26f6bab656e726f6c6c6d656e74739186b46465725f783530395f"
5960
"6365727469666963617465c40d3c78353039206365727469663ead656e726f6c6c6d65"
6061
"6e745f6964d802e1fe88bd0f054261887a6c8039710b40a77061796c6f6164c4073c64"
6162
"756d6d793eb17061796c6f61645f7369676e6174757265c40b3c7369676e6174757265"
62-
"3eac7375626d69747465645f6f6ed7010005ed940b424b31"
63+
"3ebb7061796c6f61645f7369676e61747572655f616c676f726974686db15253415353"
64+
"412d5053532d534841323536ac7375626d69747465645f6f6ed7010005ed940b424b31"
6365
)
6466
.as_ref(),
6567
authenticated_cmds::pki_enrollment_list::Rep::Ok {
@@ -71,6 +73,7 @@ pub fn rep_ok() {
7173
.unwrap(),
7274
payload: hex!("3c64756d6d793e").as_ref().into(),
7375
payload_signature: hex!("3c7369676e61747572653e").as_ref().into(),
76+
payload_signature_algorithm: PkiSignatureAlgorithm::RsassaPssSha256,
7477
submitted_on: DateTime::from_timestamp_micros(1668594983390001).unwrap(),
7578
der_x509_certificate: hex!("3c78353039206365727469663e").as_ref().into(),
7679
},
@@ -90,6 +93,7 @@ pub fn rep_ok() {
9093
];
9194

9295
for (raw, expected) in raw_expected {
96+
println!("***expected: {:?}", expected.dump().unwrap());
9397
let data = authenticated_cmds::pki_enrollment_list::Rep::load(raw).unwrap();
9498

9599
p_assert_eq!(data, expected);

server/parsec/_parsec_pyi/protocol/authenticated_cmds/v5/pki_enrollment_list.pyi

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from __future__ import annotations
66

7-
from parsec._parsec import DateTime, PKIEnrollmentID
7+
from parsec._parsec import DateTime, PKIEnrollmentID, PkiSignatureAlgorithm
88

99
class PkiEnrollmentListItem:
1010
def __init__(
@@ -13,6 +13,7 @@ class PkiEnrollmentListItem:
1313
submitted_on: DateTime,
1414
der_x509_certificate: bytes,
1515
payload_signature: bytes,
16+
payload_signature_algorithm: PkiSignatureAlgorithm,
1617
payload: bytes,
1718
) -> None: ...
1819
@property
@@ -24,6 +25,8 @@ class PkiEnrollmentListItem:
2425
@property
2526
def payload_signature(self) -> bytes: ...
2627
@property
28+
def payload_signature_algorithm(self) -> PkiSignatureAlgorithm: ...
29+
@property
2730
def submitted_on(self) -> DateTime: ...
2831

2932
class Req:

server/parsec/components/memory/datamodel.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
InvitationType,
3131
OrganizationID,
3232
PKIEnrollmentID,
33+
PkiSignatureAlgorithm,
3334
RealmArchivingCertificate,
3435
RealmKeyRotationCertificate,
3536
RealmNameCertificate,
@@ -745,6 +746,7 @@ class MemoryPkiEnrollment:
745746
submitter_der_x509_certificate_sha1: bytes = field(repr=False)
746747

747748
submit_payload_signature: bytes = field(repr=False)
749+
submit_payload_signature_algorithm: PkiSignatureAlgorithm
748750
submit_payload: bytes = field(repr=False)
749751
submitted_on: DateTime
750752

0 commit comments

Comments
 (0)