@@ -239,6 +239,38 @@ public static void createMDNData (@Nonnull final IAS2Session aSession,
239239 // (size));
240240 }
241241
242+ @ Nullable
243+ public static MIC createMICOnReception (@ Nonnull final AS2Message aMsg ) throws Exception
244+ {
245+ final Partnership aPartnership = aMsg .partnership ();
246+
247+ final String sDispositionOptions = aMsg .getHeader (CHttpHeader .DISPOSITION_NOTIFICATION_OPTIONS );
248+ final DispositionOptions aDispositionOptions = DispositionOptions .createFromString (sDispositionOptions );
249+
250+ ECryptoAlgorithmSign eSigningAlgorithm = aDispositionOptions .getFirstMICAlg ();
251+ if (eSigningAlgorithm == null )
252+ {
253+ // Try from partnership (#93)
254+ final String sSigningAlgorithm = aPartnership .getSigningAlgorithm ();
255+ eSigningAlgorithm = ECryptoAlgorithmSign .getFromIDOrNull (sSigningAlgorithm );
256+ if (eSigningAlgorithm == null )
257+ {
258+ LOGGER .warn ("The partnership signing algorithm name '" + sSigningAlgorithm + "' is unknown." );
259+ }
260+ }
261+
262+ if (eSigningAlgorithm == null )
263+ return null ;
264+
265+ // If the source message was signed or encrypted, include the headers -
266+ // see message sending for details
267+ final boolean bIncludeHeadersInMIC = aPartnership .getSigningAlgorithm () != null ||
268+ aPartnership .getEncryptAlgorithm () != null ||
269+ aPartnership .getCompressionType () != null ;
270+
271+ return getCryptoHelper ().calculateMIC (aMsg .getData (), eSigningAlgorithm , bIncludeHeadersInMIC );
272+ }
273+
242274 /**
243275 * Create a new MDN
244276 *
@@ -255,10 +287,10 @@ public static void createMDNData (@Nonnull final IAS2Session aSession,
255287 * In case of an error
256288 */
257289 @ Nonnull
258- public static IMessageMDN createMDN (@ Nonnull final IAS2Session aSession ,
259- @ Nonnull final AS2Message aMsg ,
260- @ Nonnull final DispositionType aDisposition ,
261- @ Nonnull final String sText ) throws Exception
290+ public static IMessageMDN createSyncMDN (@ Nonnull final IAS2Session aSession ,
291+ @ Nonnull final AS2Message aMsg ,
292+ @ Nonnull final DispositionType aDisposition ,
293+ @ Nonnull final String sText ) throws Exception
262294 {
263295 ValueEnforcer .notNull (aSession , "AS2Session" );
264296 ValueEnforcer .notNull (aMsg , "AS2Message" );
@@ -324,29 +356,8 @@ public static IMessageMDN createMDN (@Nonnull final IAS2Session aSession,
324356 final String sDispositionOptions = aMsg .getHeader (CHttpHeader .DISPOSITION_NOTIFICATION_OPTIONS );
325357 final DispositionOptions aDispositionOptions = DispositionOptions .createFromString (sDispositionOptions );
326358
327- ECryptoAlgorithmSign eSigningAlgorithm = aDispositionOptions .getFirstMICAlg ();
328- if (eSigningAlgorithm == null )
329- {
330- // Try from partnership (#93)
331- final String sSigningAlgorithm = aPartnership .getSigningAlgorithm ();
332- eSigningAlgorithm = ECryptoAlgorithmSign .getFromIDOrNull (sSigningAlgorithm );
333- if (eSigningAlgorithm == null )
334- {
335- LOGGER .warn ("The partnership signing algorithm name '" + sSigningAlgorithm + "' is unknown." );
336- }
337- }
338-
339- MIC aMIC = null ;
340- if (eSigningAlgorithm != null )
341- {
342- // If the source message was signed or encrypted, include the headers -
343- // see message sending for details
344- final boolean bIncludeHeadersInMIC = aPartnership .getSigningAlgorithm () != null ||
345- aPartnership .getEncryptAlgorithm () != null ||
346- aPartnership .getCompressionType () != null ;
347-
348- aMIC = getCryptoHelper ().calculateMIC (aMsg .getData (), eSigningAlgorithm , bIncludeHeadersInMIC );
349- }
359+ // Calculate MIC
360+ final MIC aMIC = createMICOnReception (aMsg );
350361 if (aMIC != null )
351362 aMDN .attrs ().putIn (AS2MessageMDN .MDNA_MIC , aMIC .getAsAS2String ());
352363
0 commit comments