Astro~/0.3
** Conformance / Space Data Link Security * PAGE 13 / 23
** Astro * Conformance
** /conformance/sdls

Space Data Link Security

PICS proforma: what this package implements, clause by clause.

Conformance Statement for pkg/sdls, CCSDS 355.0-B-2


A1.1 GENERAL INFORMATION

A1.1.1 Identification of PICS

FieldValue
Date of Statement (DD/MM/YYYY)23/08/2026
PICS Serial NumberASTRO-SDLS-PICS-001
System Conformance Statement Cross-ReferenceThis document

A1.1.2 Identification of Implementation Under Test (IUT)

FieldValue
Implementation Nameastro/pkg/sdls
Implementation VersionSee go.mod / latest commit on main
Special ConfigurationNone
Other InformationGo library implementing the CCSDS Space Data Link Security Protocol. Ships the annex baselines: AES-256-GCM authenticated encryption with a 96-bit IV and a 128-bit MAC (clause E1/clause E3/clause E4), and AES-CMAC authentication for telecommand (clause E2). Also offers GMAC, the authentication-only companion of the GCM baselines, not an annex baseline itself. Composes with pkg/tmdl, pkg/tcdl, pkg/aos, and pkg/usdl from the outside, the protected data field is built here and handed to the frame constructor.

A1.1.3 Identification of Supplier

FieldValue
SupplierRavi Suhag
Contact Point for QueriesGitHub, github.com/ravisuhag/astro
Implementation Name(s) and Version(s)astro/pkg/sdls (Go package)
System Name(s)Astro

A1.1.4 Identification of Specification

FieldValue
SpecificationCCSDS 355.0-B-2 (Space Data Link Security Protocol, Blue Book, Issue 2, July 2022)
Have any exceptions been required?Yes [X] No [ ], see A1.5

A1.2 PROTOCOL DATA UNITS

FeatureReferenceStatusSupport
Security Headerclause 4.1.1MY: SPI, IV, Sequence Number, Pad Length, contiguous and in that order
Security Parameter Indexclause 4.1.1.2MY: 16 bits, big-endian, leading field
SPI reserved values rejectedclause 4.1.1.2.3MY: 0 and 65535 rejected by SecurityAssociation.Validate
Initialization Vector fieldclause 4.1.1.3OY: width managed per SA; 12 octets for the GCM baseline
Sequence Number fieldclause 4.1.1.4OY: width managed per SA; zero octets when the IV serves as the counter
Pad Length fieldclause 4.1.1.5OY: carried and honored on receive; never generated (GCM needs no padding)
Security Header maximum 64 octetsclause 4.1.1.1.4MY: enforced by FieldLengths.Validate
Security Trailerclause 4.1.2OY: MAC, fixed length per SA

A1.3 SECURITY ASSOCIATION

FeatureReferenceStatusSupport
One service type per SAclause 4.2.2.4MY: Mode is exactly one of authentication, encryption, authenticated encryption
Common SA parametersclause 4.2.2.5MY: SPI plus IV, Sequence Number, Pad Length, and MAC widths
Authentication algorithm and modeclause 4.2.2.6.1 aMY: AES-256-GCM, GMAC, or AES-CMAC per AuthAlgorithm
Authentication bit maskclause 4.2.2.6.1 b, clause 4.2.2.6.2MY: AuthMask, applied bitwise-AND before MAC computation. Per-frame-type constructors (BaselineAuthMaskTM/TC/AOS/USLP) build masks with the mandatory exclusions: TM Master Channel Frame Count, AOS Frame Header Error Control, Insert Zone, and the IV. A nil mask authenticates every header octet, which for TM and AOS is stricter than the mandatory exclusions permit, use the constructors.
SA bound to GVCID / GMAP_IDclause 4.2.2.2MY: Channels lists the agreed channel set; enforced by ProcessSecurityForChannel
IV excluded from authenticated dataclause 4.2.2.6.2 hMY: enforced in code regardless of the mask supplied
Managed anti-replay sequence numberclause 4.2.2.6.1 cMY: sender counter; receiver stored value
Managed sequence number windowclause 4.2.2.6.1 dMY: SeqWindow
Managed initialization vectorclause 4.2.2.7 bMY: big-endian counter, never reused

A1.4 PROCEDURES

FeatureReferenceStatusSupport
ApplySecurity, encryptionclause 4.2.3.2.2.1ON: see A1.5
ApplySecurity, authenticationclause 4.2.3.2.2.2OY: data field unencrypted, MAC in the trailer
ApplySecurity, authenticated encryptionclause 4.2.3.2.2.3OY: AEAD split: data field is plaintext, masked prefix is the AAD
Sequence number incremented per frameclause 4.2.3.4 aMY
Authentication bit mask appliedclause 4.2.3.4 dMY
MAC truncation to trailer widthclause 4.2.3.4 fOY: most significant bits kept. GCM/GMAC: 12 to 16 octets (Go's crypto/cipher refuses shorter GCM tags). CMAC: 1 to 16 octets, since SP 800-38B clause 6.4 permits any truncation. Both baselines specify 16.
ProcessSecurity, SA verificationclause 4.2.4.3MPartial: the SPI is always verified before any cryptographic work. Verifying that the SA is the one agreed for the receiving channel needs channel context: ProcessSecurityForChannel enforces it against the SA's Channels list. Plain ProcessSecurity has no channel context, so that part of the check falls to the caller.
ProcessSecurity, authenticationclause 4.2.4.2.3.1OY
ProcessSecurity, authenticated encryptionclause 4.2.4.2.3.2OY
No data returned on verification failureclause 4.2.4.2.3MY: every failure path returns a nil data field
Anti-replay checkclause 2.3.2.3MY: applied only after the MAC verifies

A1.5 EXCEPTIONS AND UNSUPPORTED FEATURES

FeatureReferenceSupportRationale
Encryption without authenticationclause 2.3.3, clause 4.2.3.2.2.1NApplySecurity returns ErrUnsupportedMode. Clause 2.3.3 itself warns that encryption without authentication can give a false sense of security.
Block padding generationclause 4.2.3.3 bNGCM is a stream mode and needs none (clause E1.2 note 2). A non-zero Pad Length is still honored on receive.
SDLS Extended Procedures (key management, OTAR)CCSDS 355.1NA separate standard, out of scope for this package.
Over-the-air SA negotiationclause 2.3.1.5 noteNAn Application Layer function, undefined by the standard.

A1.6 BASELINE MODE CONFORMANCE

All four baselines are supported in full: Clause E1 (TM), clause E2 (TC), clause E3 (AOS) and Clause E4 (USLP).

clause E1, clause E3 and clause E4, AES-GCM

Baseline parameterReferenceValueSupport
Algorithmclause E1.1AES-GCMY
Key lengthclause E1.1 a256 bitsY: exactly 32 octets, enforced
IV lengthclause E1.1 b96 bits, transmitted in-lineY
MAC lengthclause E1.1 c128 bitsY
Security Header lengthclause E1.214 octetsY
Security Trailer lengthclause E1.316 octetsY
Sequence Number fieldclause E1.2 note 10 octets, IV serves as the counterY
Pad Length fieldclause E1.2 note 20 octetsY

clause E2, AES-CMAC (telecommand)

Selected with SecurityAssociation.AuthAlgorithm = AuthCMAC.

Baseline parameterReferenceValueSupport
Algorithmclause E2.1AES-CMACY: internal/cmac, NIST SP 800-38B
Key lengthclause E2.1 a256 bitsY: exactly 32 octets, enforced
Sequence numberclause E2.1 b32 bits, transmitted in-lineY
MAC lengthclause E2.1 c128 bitsY
Security Header lengthclause E2.26 octetsY
Initialization Vector fieldclause E2.2 note0 octetsY: a non-zero IV is rejected by Validate
Pad Length fieldclause E2.2 note0 octetsY

AES-CMAC is absent from the Go standard library, so it is implemented in internal/cmac rather than taken as a dependency. It is verified against the AES-128 vectors of RFC 4493 clause 4 and the CMAC-AES256 vectors of the NIST SP 800-38B example set, eight published vectors in all, the AES-256 ones being the sizes clause E2.1 a actually requires.