parco_ws_security/
new_with_key.rs

1use chrono::Duration;
2use rsa::{RsaPrivateKey, pkcs1v15::SigningKey};
3use sha1::Sha1;
4
5use crate::{BinarySecurityToken, Security, SignedInfo, Timestamp, crypto::WSSUId};
6
7impl<'a> Security<'a> {
8    /// Constructs a WS-Security header using an RSA private key.
9    pub fn new_with_private_key(
10        binary_security_token: &'a str,
11        private_key: RsaPrivateKey,
12    ) -> Self {
13        let timestamp = Timestamp::now(Duration::minutes(5), WSSUId::new());
14        let signed_info = SignedInfo::new(&timestamp);
15        let signature = signed_info.sign_with_private_key(private_key);
16
17        let binary_security_token = BinarySecurityToken::new(binary_security_token);
18
19        Self {
20            signed_info,
21            timestamp,
22            binary_security_token,
23            signature,
24        }
25    }
26
27    /// Constructs a WS-Security header using a preconfigured signing key.
28    pub fn new_with_signing_key(
29        binary_security_token: &'a str,
30        signing_key: &SigningKey<Sha1>,
31    ) -> Self {
32        let timestamp = Timestamp::now(Duration::minutes(5), WSSUId::new());
33        let signed_info = SignedInfo::new(&timestamp);
34        let signature = signed_info.sign_with_signing_key(signing_key);
35
36        let binary_security_token = BinarySecurityToken::new(binary_security_token);
37
38        Self {
39            signed_info,
40            timestamp,
41            binary_security_token,
42            signature,
43        }
44    }
45}