Astro~/0.4
** Conformance
** 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.4M
Common SA parametersclause 4.2.2.5M
Authentication algorithm and modeclause 4.2.2.6.1 aM
Authentication bit maskclause 4.2.2.6.1 b, clause 4.2.2.6.2M
SA bound to GVCID / GMAP_IDclause 4.2.2.2M
IV excluded from authenticated dataclause 4.2.2.6.2 hM
Managed anti-replay sequence numberclause 4.2.2.6.1 cM
Managed sequence number windowclause 4.2.2.6.1 dM
Managed initialization vectorclause 4.2.2.7 bM

A1.4 PROCEDURES

FeatureReferenceStatusSupport
ApplySecurity, encryptionclause 4.2.3.2.2.1O
ApplySecurity, authenticationclause 4.2.3.2.2.2O
ApplySecurity, authenticated encryptionclause 4.2.3.2.2.3O
Sequence number incremented per frameclause 4.2.3.4 aM
Authentication bit mask appliedclause 4.2.3.4 dM
MAC truncation to trailer widthclause 4.2.3.4 fO
ProcessSecurity, SA verificationclause 4.2.4.3M
ProcessSecurity, authenticationclause 4.2.4.2.3.1O
ProcessSecurity, authenticated encryptionclause 4.2.4.2.3.2O
No data returned on verification failureclause 4.2.4.2.3M
Anti-replay checkclause 2.3.2.3M

A1.5 EXCEPTIONS AND UNSUPPORTED FEATURES

FeatureReferenceSupportRationale
Encryption without authenticationclause 2.3.3, clause 4.2.3.2.2.1N
Block padding generationclause 4.2.3.3 bN
SDLS Extended Procedures (key management, OTAR)CCSDS 355.1N
Over-the-air SA negotiationclause 2.3.1.5 noteN

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.


Wire test vectors

The octets backing this statement live in the vector corpus — 7 vectors. Each vector names the clause it comes from and carries the derivation that produced it.

File
sdls/protected-frame.json7 vectors

These are data files, so any implementation can check itself against the same octets. See CONTRACT.md for how, and how this is verified for what rests on a published vector versus a reading of the clause.