pub struct Trailer {
pub checksum: Option<String>,
pub test_and_training: Option<bool>,
pub possible_duplicate_emission: Option<PossibleDuplicateEmission>,
pub delayed_message: Option<bool>,
pub message_reference: Option<MessageReference>,
pub possible_duplicate_message: Option<PossibleDuplicateMessage>,
pub system_originated_message: Option<SystemOriginatedMessage>,
pub mac: Option<String>,
}
Expand description
Trailer (Block 5): Message Security and Control Information
§Purpose
The Trailer block provides essential security, authentication, and control information for SWIFT messages. It ensures message integrity through checksums, enables duplicate detection, supports message authentication, and provides system-level control information critical for secure and reliable message delivery.
§Format Specification
- Block Format:
{5:{tag:value}{tag:value}...}
- Tag Types: Three-letter tags with optional values
- Security Tags: MAC and CHK for authentication
- Control Tags: Various operational controls
§Business Context Applications
- Message Integrity: Checksum validation for data integrity
- Security Authentication: MAC for message authentication
- Duplicate Detection: Prevention of duplicate processing
- Operational Control: Test messages and system controls
§Security and Authentication Tags
§CHK: Checksum (Mandatory)
- Format: 12 hexadecimal characters
- Calculation: Algorithm-based on message content
- Purpose: Detect transmission errors
- Validation: Automatic by SWIFT network
- Failure Action: Message rejection
§MAC: Message Authentication Code
- Format: Variable length hexadecimal
- Algorithm: Agreed between parties
- Purpose: Authenticate message origin
- Usage: High-value or sensitive messages
- Bilateral: Requires key exchange
§Duplicate Control Tags
§PDM: Possible Duplicate Message
- Format: Optional time + MOR
- Purpose: Warn of possible duplicate
- Action: Receiver should check for duplicates
- Components: Time (HHMM) + Message Output Reference
§PDE: Possible Duplicate Emission
- Format: Optional time + MIR
- Purpose: Sender suspects duplicate sent
- Usage: Network recovery scenarios
- Components: Time (HHMM) + Message Input Reference
§Operational Control Tags
§TNG: Test and Training
- Format: Empty tag (presence only)
- Purpose: Identifies test messages
- Processing: Should not affect production
- Usage: Testing and training environments
- Warning: Must not be processed as live
§DLM: Delayed Message
- Format: Empty tag (presence only)
- Purpose: Indicates delayed transmission
- Cause: Network issues or recovery
- Action: Check value dates and cut-offs
§Reference and Tracking Tags
§MRF: Message Reference
- Format: Date + Time + MIR
- Purpose: Reference related messages
- Usage: Corrections and cancellations
- Components: YYMMDD + HHMM + full MIR
§SYS: System Originated Message
- Format: Optional time + MIR
- Purpose: System-generated messages
- Examples: Automatic responses
- Processing: May have special handling
§Message Reference Structures
§Message Input Reference (MIR)
- Date: YYMMDD format
- LT Identifier: 12-character sending LT
- Session: 4-digit session number
- Sequence: 6-digit sequence number
- Usage: Unique message identification
§Message Output Reference (MOR)
- Format: Same structure as MIR
- Perspective: Receiver’s reference
- Purpose: Delivery confirmation
- Tracking: End-to-end message tracking
§Network Validation Requirements
- CHK Mandatory: All messages must have checksum
- Tag Order: Specific ordering requirements
- Format Compliance: Exact format specifications
- Value Validation: Tag-specific validations
§Security Considerations
§Checksum Protection
- Coverage: Entire message content
- Algorithm: SWIFT-specified calculation
- Tampering: Detects any modification
- Reliability: Very low false positive rate
§MAC Authentication
- Bilateral Agreement: Key management required
- Algorithm Choice: Per agreement
- Non-repudiation: Proves message origin
- Legal Standing: Admissible evidence
§Duplicate Detection Mechanisms
§System Design
- Detection Window: Configurable timeframe
- Reference Tracking: MIR/MOR correlation
- Recovery Support: Post-incident reconciliation
- Audit Trail: Complete duplicate history
§Processing Rules
- PDM Messages: Manual review recommended
- Duplicate Window: Typically 24-48 hours
- Action Required: Verify before processing
- Documentation: Record resolution actions
§Operational Guidelines
§Test Message Handling
- TNG Identification: Clear test marking
- Environment Separation: Test vs production
- Processing Prevention: Automatic filtering
- Audit Exclusion: Separate test reporting
§Delayed Message Processing
- DLM Recognition: Special handling required
- Value Date Check: Verify still valid
- Cut-off Impact: May miss deadlines
- Notification: Alert relevant parties
§Error Prevention Guidelines
- CHK Calculation: Automatic by system
- Tag Formatting: Follow exact specifications
- Reference Accuracy: Verify MIR/MOR format
- Test Separation: Clear test identification
§Integration with Other Blocks
- Block 1-4: Content for checksum calculation
- Block 1: Session/sequence for references
- Block 2: Message type affects trailer options
- Block 3: Some services require specific tags
§Compliance Framework
- Security Standards: Cryptographic requirements
- Audit Requirements: Trailer preservation
- Legal Admissibility: Authentication standards
- Regulatory Compliance: Security controls
§Recovery and Reconciliation
§Message Recovery
- Reference Tracking: Via MIR/MOR
- Duplicate Resolution: PDM/PDE handling
- Audit Support: Complete tag history
- Dispute Resolution: Authentication proof
§System Recovery
- Checkpoint References: Recovery points
- Sequence Verification: Gap detection
- Duplicate Prevention: During recovery
- Integrity Validation: CHK verification
§Best Practices
- Security First: Always validate CHK
- MAC Usage: For high-value messages
- Duplicate Vigilance: Check PDM warnings
- Test Clarity: Clearly mark test messages
§See Also
- SWIFT FIN Security Guide: Authentication Standards
- Checksum Algorithms: Technical Specifications
- Duplicate Detection: Best Practices Guide
- MAC Implementation: Bilateral Agreement Templates
Fields§
§checksum: Option<String>
CHK - Checksum (12!h) - Mandatory
test_and_training: Option<bool>
TNG - Test & Training Message - Optional (empty tag)
possible_duplicate_emission: Option<PossibleDuplicateEmission>
PDE - Possible Duplicate Emission - Optional
delayed_message: Option<bool>
DLM - Delayed Message - Optional (empty tag)
message_reference: Option<MessageReference>
MRF - Message Reference - Optional
possible_duplicate_message: Option<PossibleDuplicateMessage>
PDM - Possible Duplicate Message - Optional
system_originated_message: Option<SystemOriginatedMessage>
SYS - System Originated Message - Optional
mac: Option<String>
MAC - Message Authentication Code - Optional
Implementations§
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Trailer
impl<'de> Deserialize<'de> for Trailer
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl StructuralPartialEq for Trailer
Auto Trait Implementations§
impl Freeze for Trailer
impl RefUnwindSafe for Trailer
impl Send for Trailer
impl Sync for Trailer
impl Unpin for Trailer
impl UnwindSafe for Trailer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more