parco_ws_security/
new_with_key.rs1use 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 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(×tamp);
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 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(×tamp);
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}