Skip to content

Commit 92046cc

Browse files
committed
fix tedge-p11-server unhandled unwrap
Signed-off-by: Marcel Guzik <marcel.guzik@cumulocity.com>
1 parent a71fc39 commit 92046cc

File tree

3 files changed

+43
-15
lines changed

3 files changed

+43
-15
lines changed

crates/extensions/tedge-p11-server/src/client.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ impl TedgeP11Client {
3838
let response = connection.read_frame()?;
3939

4040
let Frame1::ChooseSchemeResponse(response) = response else {
41-
bail!("protocol error: bad response, expected chose scheme");
41+
bail!("protocol error: bad response, expected chose scheme, received: {response:?}");
4242
};
4343

4444
debug!("Choose scheme complete");
@@ -66,7 +66,7 @@ impl TedgeP11Client {
6666
let response = connection.read_frame()?;
6767

6868
let Frame1::ChooseSchemeResponse(response) = response else {
69-
bail!("protocol error: bad response, expected chose scheme");
69+
bail!("protocol error: bad response, expected chose scheme, received: {response:?}");
7070
};
7171

7272
debug!("Choose scheme complete");
@@ -87,7 +87,7 @@ impl TedgeP11Client {
8787
let response = connection.read_frame()?;
8888

8989
let Frame1::SignResponse(response) = response else {
90-
bail!("protocol error: bad response, expected sign");
90+
bail!("protocol error: bad response, expected sign, received: {response:?}");
9191
};
9292

9393
debug!("Sign complete");

crates/extensions/tedge-p11-server/src/server.rs

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ impl TedgeP11Server {
3131
.context("Failed to accept connection")?;
3232

3333
let stream = stream.into_std()?;
34+
stream.set_nonblocking(false)?;
3435
let connection = Connection::new(stream);
3536

3637
match self.process(connection) {
@@ -52,9 +53,31 @@ impl TedgeP11Server {
5253
anyhow::bail!("protocol error: invalid request")
5354
}
5455
Frame1::ChooseSchemeRequest(request) => {
55-
Frame1::ChooseSchemeResponse(self.service.choose_scheme(request))
56+
let response = self.service.choose_scheme(request);
57+
match response {
58+
Ok(response) => Frame1::ChooseSchemeResponse(response),
59+
Err(err) => {
60+
let response = Frame1::Error(ProtocolError(format!(
61+
"PKCS #11 service failed: {err:#}"
62+
)));
63+
connection.write_frame(&response)?;
64+
anyhow::bail!(err);
65+
}
66+
}
67+
}
68+
Frame1::SignRequest(request) => {
69+
let response = self.service.sign(request);
70+
match response {
71+
Ok(response) => Frame1::SignResponse(response),
72+
Err(err) => {
73+
let response = Frame1::Error(ProtocolError(format!(
74+
"PKCS #11 service failed: {err:#}"
75+
)));
76+
connection.write_frame(&response)?;
77+
anyhow::bail!(err);
78+
}
79+
}
5680
}
57-
Frame1::SignRequest(request) => Frame1::SignResponse(self.service.sign(request)),
5881
};
5982

6083
connection.write_frame(&response)?;

crates/extensions/tedge-p11-server/src/service.rs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,35 +24,40 @@ impl P11SignerService {
2424
Ok(Self { signing_key })
2525
}
2626

27-
#[instrument]
28-
pub fn choose_scheme(&self, request: ChooseSchemeRequest) -> ChooseSchemeResponse {
27+
#[instrument(skip_all)]
28+
pub fn choose_scheme(
29+
&self,
30+
request: ChooseSchemeRequest,
31+
) -> anyhow::Result<ChooseSchemeResponse> {
2932
let offered = request.offered.into_iter().map(|s| s.0).collect::<Vec<_>>();
3033

3134
let signer = self.signing_key.choose_scheme(&offered);
3235
let algorithm = SignatureAlgorithm(self.signing_key.algorithm());
3336

3437
let Some(signer) = signer else {
35-
return ChooseSchemeResponse {
38+
return Ok(ChooseSchemeResponse {
3639
scheme: None,
3740
algorithm,
38-
};
41+
});
3942
};
4043

41-
ChooseSchemeResponse {
44+
Ok(ChooseSchemeResponse {
4245
scheme: Some(SignatureScheme(signer.scheme())),
4346
algorithm,
44-
}
47+
})
4548
}
4649

47-
#[instrument]
48-
pub fn sign(&self, request: SignRequest) -> SignResponse {
50+
#[instrument(skip_all)]
51+
pub fn sign(&self, request: SignRequest) -> anyhow::Result<SignResponse> {
4952
let session = match &self.signing_key {
5053
Pkcs11SigningKey::Ecdsa(key) => &key.pkcs11,
5154
Pkcs11SigningKey::Rsa(key) => &key.pkcs11,
5255
};
5356
let signer = PkcsSigner::from_session(session.clone());
54-
let signature = signer.sign(&request.to_sign).unwrap();
55-
SignResponse(signature)
57+
let signature = signer
58+
.sign(&request.to_sign)
59+
.context("Failed to sign using PKCS #11")?;
60+
Ok(SignResponse(signature))
5661
}
5762
}
5863

0 commit comments

Comments
 (0)