Trailer

Struct Trailer 

Source
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§

Source§

impl Trailer

Source

pub fn parse(block5: &str) -> Result<Self>

Parse trailer from block 5 string using structured parsing

Trait Implementations§

Source§

impl Clone for Trailer

Source§

fn clone(&self) -> Trailer

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Trailer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Trailer

Source§

fn default() -> Trailer

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for Trailer

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for Trailer

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Trailer

Source§

fn eq(&self, other: &Trailer) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Trailer

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for Trailer

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Fake for T

Source§

fn fake<U>(&self) -> U
where Self: FakeBase<U>,

Source§

fn fake_with_rng<U, R>(&self, rng: &mut R) -> U
where R: Rng + ?Sized, Self: FakeBase<U>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,