28
28
MDN_CONFIRM_TEXT ,
29
29
MDN_FAILED_TEXT ,
30
30
MDN_MODES ,
31
+ SIGNATUR_ALGORITHMS ,
31
32
SYNCHRONOUS_MDN ,
32
33
)
33
34
from pyas2lib .exceptions import (
@@ -179,6 +180,9 @@ class Partner:
179
180
180
181
:param canonicalize_as_binary: force binary canonicalization for this partner
181
182
183
+ :param sign_alg: The signing algorithm to be used for generating the
184
+ signature. (default `rsassa_pkcs1v15`)
185
+
182
186
"""
183
187
184
188
as2_name : str
@@ -197,6 +201,7 @@ class Partner:
197
201
mdn_confirm_text : str = MDN_CONFIRM_TEXT
198
202
ignore_self_signed : bool = True
199
203
canonicalize_as_binary : bool = False
204
+ sign_alg : str = "rsassa_pkcs1v15"
200
205
201
206
def __post_init__ (self ):
202
207
"""Run the post initialisation checks for this class."""
@@ -225,6 +230,12 @@ def __post_init__(self):
225
230
f"must be one of { DIGEST_ALGORITHMS } "
226
231
)
227
232
233
+ if self .sign_alg and self .sign_alg not in SIGNATUR_ALGORITHMS :
234
+ raise ImproperlyConfigured (
235
+ f"Unsupported Signature Algorithm { self .sign_alg } , "
236
+ f"must be one of { SIGNATUR_ALGORITHMS } "
237
+ )
238
+
228
239
def load_verify_cert (self ):
229
240
"""Load the verification certificate of the partner and returned the parsed cert."""
230
241
if self .validate_certs :
@@ -466,7 +477,10 @@ def build(
466
477
)
467
478
del signature ["MIME-Version" ]
468
479
signature_data = sign_message (
469
- mic_content , self .digest_alg , self .sender .sign_key
480
+ mic_content ,
481
+ self .digest_alg ,
482
+ self .sender .sign_key ,
483
+ self .receiver .sign_alg ,
470
484
)
471
485
signature .set_payload (signature_data )
472
486
encoders .encode_base64 (signature )
@@ -865,7 +879,10 @@ def build(
865
879
del signature ["MIME-Version" ]
866
880
867
881
signed_data = sign_message (
868
- canonicalize (self .payload ), self .digest_alg , message .receiver .sign_key
882
+ canonicalize (self .payload ),
883
+ self .digest_alg ,
884
+ message .receiver .sign_key ,
885
+ message .sender .sign_alg ,
869
886
)
870
887
signature .set_payload (signed_data )
871
888
encoders .encode_base64 (signature )
0 commit comments