From e7f5fe4af3cf8d247775075218947398cab63e3e Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Thu, 16 Jul 2026 10:35:20 -0400 Subject: [PATCH 01/12] Add more explanation and diagram for options --- user-guide/manual.adoc | 33 +++++++++++++++++++++++++++++---- user-guide/static/classes.puml | 4 +++- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/user-guide/manual.adoc b/user-guide/manual.adoc index 7336178..2aa366b 100644 --- a/user-guide/manual.adoc +++ b/user-guide/manual.adoc @@ -417,15 +417,40 @@ plantuml::static/bsl-breakdown.puml[format=svg,scale=60] In addition to the externally-visible information about security operations and their _target_, _parameters_, and _results_ the BSL adds the notion of a security Action which is an ordered sequence of specific operations. This is necessary because some policies require, for example, some operations to be accepted before others are sourced which would refer to the same target block. - -Another internal information item is the security Option, which is used to communicate configuration of individual security operations between a Policy Provider and an associated Security Context. -Some options are converted by the SC into Parameters or Results that get encoded into the ASB when acting as the Source role. -Some options, like key identifiers for the default security contexts, do not have representation in the ASB but are necessary for correct processing of the security operation. +The data-use relationships of security operations between PP and SC are depicted in <>. [#fig-secop-assoctaions] .Security Operation Associations plantuml::static/secop-associations.puml[format=svg,scale=60] +Another internal information item is the security Option, which is used to communicate configuration of individual security operations between a Policy Provider and an associated Security Context, as depicted in <>. +Some options are converted by the SC into Parameters or Results that get encoded into the ASB when acting as the Source role. +Some options, like key identifiers for the default security contexts, do not have representation in the ASB but are necessary for correct processing of the security operation. +A key distinction from the point of view of the SC is that options are internal to the BSL and implicitly trusted, while Parameters and Results (when used as verifier or acceptor role) are untrusted input coming from outside the BPA. + +Options are also used to define how operations behave for the source role, but are also used to constrain acceptable behaviors for verifier or acceptor role. +For example, an option can restrict that verification _must_ use a specific security algorithm/strength and if the received operation uses a different algorithm/strength it will be treated as a failure during execution. + +[#fig-secop-in-out] +.Logical Relationship between Options and Parameters +[graphviz,format=svg,width=80mm] +---- +digraph figure { + node [shape=rectangle]; + + sc [label="Security Context\n(execute)"] + policy [label="Policy Provider"] + asbin [label="ASB (input)"] + asbout [label="ASB (output)"] + + { rank=same; policy; sc; } + + policy -> sc [label="Options"] + asbin -> sc [label="Parameters\n and Results", style=dashed] + sc -> asbout [label="Parameters\n and Results", style=dashed] +} +---- + [#sec-api-secondary] === Secondary Interactions diff --git a/user-guide/static/classes.puml b/user-guide/static/classes.puml index c870a56..23b1b68 100644 --- a/user-guide/static/classes.puml +++ b/user-guide/static/classes.puml @@ -30,7 +30,9 @@ class "Security Operation" as SecOp { + role : BPSec Role + target : uint64 + context ID : int16 - + options : Option[0..*] + + options : Map + + parameters : Map + + results : Map + conclusion : bool [0..1] } From 1ad23f557d30e8dbae8b7e5b170214d610382f09 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Fri, 17 Jul 2026 14:26:43 -0400 Subject: [PATCH 02/12] Updates for new crypto key store --- user-guide/manual.adoc | 48 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/user-guide/manual.adoc b/user-guide/manual.adoc index 2aa366b..34acdaf 100644 --- a/user-guide/manual.adoc +++ b/user-guide/manual.adoc @@ -451,6 +451,24 @@ digraph figure { } ---- +The internal representation of Options, Parameters, and Results within the BSL takes the form of a _variant_ capable of holding a value with one of the following types: + +Int64:: +Used to convey signed and unsigned integer values. +This is limited to 63-bits of magnitude, but currently there are no code points or flags that require all 64 bits of unsigned integer. + +Byte String:: +Used to convey byte string values from configuration or from ASB content. +For example, authentication tags of default security contexts or COSE messages of the COSE context. + +Text String:: +Used to convey text string values from configuration. +There are currently no security contexts which use text strings as a parameter or result. + +Raw:: +Used to convey other context-specific byte-string-encoded values. +For example, the AAD Scope option and parameter for the COSE context as a CBOR-encoded map. + [#sec-api-secondary] === Secondary Interactions @@ -500,13 +518,21 @@ Security Contexts must validate Security Operations for consistency, and process The BSL includes two Default Security Context implementations, as explained in <>, which are also used by the Mock BPA for BSL testing (see <>). -[#sec-api-sc-crypto] -==== Cryptographic Processing +[#sec-api-crypto] +=== Cryptographic Processing -Both of the default contexts use the BSL frontend for abstracting cryptographic processing. -It is expected that alternative and/or future contexts will also use the BSL frontend for abstracting such processing, and that that frontend API will evolve as those needs change. +Both of the default contexts and the COSE context use a BSL "crypto" library for abstracting cryptographic processing. +It is expected that alternative and/or future contexts will also use this library for abstracting such processing, and that that frontend API of that library will evolve as those needs change. -The BSL backend cryptographic interface utilizes OpenSSL to perform HMAC-signing, encryption, and decryption operations through its "EVP" primitives APIs <>. +The BSL backend cryptographic interface utilizes OpenSSL to perform AES key wrap/unwrap, HKDF derivation, HMAC integrity, and AES-GCM encryption operations through its "EVP" primitives APIs <>. + +[#sec-api-crypto-keystore] +==== Key Store Interface + +Part of the software-only cryptographic API is the need for an in-memory symmetric key store to provide key material to OpenSSL APIs. + +The crypto library reads key material and updates telemetry counters in the key store. +The implementation of the key store is delegated to the host BPA through callbacks (registered during startup <>). [#sec-api-preprocessor] === Preprocessor Define Directives @@ -525,11 +551,16 @@ A simple BPA that utilizes the example policy provider, default security context The following steps are not thread safe and must be performed before any BSL context instances are initialized (in <>). -. *Set & Initialize Host Descriptors*: +. *Set Host Descriptors*: The BSL backend relies on host-specific information from the BPA, such as EID registering and encoding information. The function-pointer fields of a `BSL_HostDescriptors_t` struct should be set with host-implemented functions and initialized with `BSL_HostDescriptors_Set()` for successful BSL operation. See the Mock BPA for a simple example of implementing host descriptors. +. *Set Key Store Descriptors*: +The BSL crypto interface relies on a host-specific cryptographic key store to access key material needed by security contexts. +The function-pointer fields of a `BSL_KeyStore_Descriptors_t` struct should be set with host-implemented functions and initialized with `BSL_KeyStore_Init()` for successful BSL operation. + + [#sec-workflow-bslctx] === Initialization of a BSL Context @@ -547,9 +578,8 @@ Each EID must be registered with the host using `BSL_HostEID_Init()`. . *Register Example Policy Provider with the Library Context*: Register the example Policy Provider with the Library Context. -. *Initialize Cryptographic State & Register Default Security Contexts with the Library Context*: -Initialize the backend cryptographic interface with `BSL_CryptoInit()`. -Then, register the two Default Security Contexts ("BIB-HMAC-SHA2" and "BCB-AES-GCM") with the Library Context. +. *Register Default Security Contexts with the Library Context*: +Register the needed Default Security Contexts (BIB-HMAC-SHA2, BCB-AES-GCM, and COSE) with the Library Context. [#sec-workflow-bundle] === Single-Bundle Workflow From 3382c39160c8388379ea3ccb0fc44e132db12d91 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Thu, 13 Aug 2026 11:52:00 -0400 Subject: [PATCH 03/12] Add COSE SC explanation and touch up other text --- user-guide/manual.adoc | 147 +++++++++++++++++++++++++++++++++-------- 1 file changed, 120 insertions(+), 27 deletions(-) diff --git a/user-guide/manual.adoc b/user-guide/manual.adoc index 7336178..da7101b 100644 --- a/user-guide/manual.adoc +++ b/user-guide/manual.adoc @@ -70,13 +70,22 @@ A combination of instruction set architecture (ISA) and operating-system-specifi A built library has a specific ABI that can be different on different platforms even if its API does not change. Concise Binary Object Representation (CBOR):: A binary encoding defined in <> which follows a superset of the JSON data model (see below) and enables both small encoded size as well as efficient encoding and decoding. +This is also known as IETF STD 94. The BSL itself uses CBOR to encode the contents of BPSec ASBs. +CBOR Object Signing and Encryption (COSE):: +A message encoding and processing defined in <> which uses CBOR as its extensible encoded structure for MAC, Signing, and Encryption operations. +COSE algorithms and header parameters are managed by IANA registries for extensibility. +This is also known as IETF STD 96. +COSE Key and Key Set:: +The BSL does not use COSE Keys directly, but the dynamic backend provides an API for loading a COSE Key Set file into a key store and the Mock BPA makes use of this API during its startup. JavaScript Object Notation (JSON):: A text encoding defined in <> which allows a limited data model to be encoded in a human-readable form. The BSL does not use JSON directly, but the example ION-heritage Policy Provider uses JSON for encoding policy configuration. -JSON Web Key (JWK):: +JSON Web Key (JWK) and JWK Set:: A JSON data structure defined in <> which represents a set of cryptographic keys and their parameters. -The BSL does not use JWK directly, but the Mock BPA uses JWK for its key store configuration. +The BSL does not use JWKs directly, but the dynamic backend provides an API for loading a JWK Set file into a key store and the Mock BPA makes use of this API during its startup. +Message Authentication Code (MAC):: +A symmetric key algorithm used to provide integrity over some plaintext, which can itself be composed of a payload along with additional authenticated data. [#list-terms-bpsec] The following are BP- and BPSec-related terms: @@ -233,6 +242,9 @@ An option is an internal-to-BSL item which communicates intent for a single Secu |Concise Binary Object Representation (CBOR)[[RFC8949]] |https://www.rfc-editor.org/info/rfc8949[IETF RFC 8949] +|CBOR Object Signing and Encryption (COSE): Structures and Process[[RFC9052]] +|https://www.rfc-editor.org/info/rfc9052[IETF RFC 9052] + |Bundle Protocol Version 7[[RFC9171]] |https://www.rfc-editor.org/info/rfc9171[IETF RFC 9171] @@ -242,23 +254,27 @@ An option is an internal-to-BSL item which communicates intent for a single Secu |Default Security Contexts for Bundle Protocol Security (BPSec)[[RFC9173]] |https://www.rfc-editor.org/info/rfc9173[IETF RFC 9173] +|Bundle Protocol Security (BPSec) COSE Context[[draft-ietf-dtn-bpsec-cose]] +|https://datatracker.ietf.org/doc/draft-ietf-dtn-bpsec-cose/[draft-ietf-dtn-bpsec-cose] + |=== [#sec-arch] == Architecture -The BSL is a set of software libraries and plugin modules which together perform the functions required by Bundle Protocol Security (BPSec) <> and its Default Security Contexts <> in a way which can be instantiated from and used by a Bundle Protocol Agent (BPA) operating according to the BPv7 specification <>. +The BSL is a set of software libraries and plugin modules which together perform the functions required by Bundle Protocol Security (BPSec) <> in a way which can be instantiated from and used by a Bundle Protocol Agent (BPA) operating according to the BPv7 specification <>. +The BSL comes with an implementation of the BPSec Default Security Contexts <> and COSE Context <>, as well as a sample policy provider which uses JSON configuration inputs with heritage from and limited backward compatibility with ION. The BSL is made to interact with its environment (BPA, libraries, host OS, _etc._) through function calls into and out of the BSL library based on a <> Application Programming Interface (API) from header declarations and corresponding Application Binary Interface (ABI) for compiled libraries. === Factory Default Configuration -The "factory default" BSL is configured to operate with a "dynamic backend" which uses dynamic heap allocation and variable-sized data containers (arrays, lists, maps, _etc._). +The "factory default" BSL is configured to operate with a dynamic backend which uses dynamic heap allocation and variable-sized data containers (arrays, lists, maps, _etc._). An alternative backend could be developed for specific BPA needs, but that is outside the scope of the BSL project. -The factory default BSL also builds example Policy Providers and example Security Contexts in order to be able to fully exercise the BSL behaviors. -Alternative Policy Providers are expected to be developed for each deployment. +The factory default BSL also builds a sample Policy Provider and example Security Contexts in order to be able to fully exercise the BSL behaviors. +Alternative Policy Providers are expected to be developed and tailored for each BPA integration. Alternative Security Context implementations are expected to be developed for future contexts, and to adapt to deployment-specific needs such as for key management or specialized cryptographic interfaces. === Library Associations @@ -461,7 +477,7 @@ Policy Providers must implement the function headers of the dynamic backend `BSL Policy Providers must inspect each bundle to produce an Action Set, containing Security Operations. Policy Providers also must finalize over a bundle after each Security Operation has been executed by the security context. -The BSL includes a simple rule-based example PP that may be utilized by any BPA (see <>), and is used by the Mock BPA for BSL testing (see <>). +The BSL includes a simple rule-based example PP that may be utilized by any BPA (see <>), and is used by the Mock BPA for BSL testing (see <>). This policy provider's data is mutex-protected and may be re-used among multiple threads / BSL contexts (see the Mock BPA for an example). [#sec-api-sc] @@ -576,42 +592,119 @@ Each BSL Context is independent of all others, so there is no need to coordinate [#sec-defaultsc] -== Example Default Security Contexts +== Default Security Contexts The BSL source and default build includes implementations of the two Default Security Contexts <> as an working example of how to use the BSL frontend and crypto APIs. -This implementation corresponds to the shared library `bsl_default_sc` as explained in the <> and the API Docs subsection on https://nasa-ammos.github.io/BSL/html/examples-and-mocks.html#example-default-scs[Example Default Security Contexts]. +This implementation corresponds to the shared library `bsl_default_sc` as explained in the <> and the API Docs subsection on https://nasa-ammos.github.io/BSL/html/examples-and-mocks.html#default-scs[Default Contexts]. The default security contexts are: - * Context ID 1 "BIB-HMAC-SHA2" for Block Integrity - * Context ID 2 "BCB-AES-GCM" for Block Confidentiality + * Context ID 1 "BIB-HMAC-SHA2" for BIB use + * Context ID 2 "BCB-AES-GCM" for BCB use [#sec-defaultsc-preprocessor] === Preprocessor Define Directives -The following are preprocessor define directives that limit certain capabilities within the security contexts. +The following are preprocessor define directives related to options of the BIB-HMAC-SHA2 context. +Their enumerated values are not part of the API. + +`BSLX_BIB_OPT_KEY_ID`:: +The ID of an option used to convey the mandatory key ID as a text string. +Valid values must be present in the BPA key store to be usable in any BPSec role. +`BSLX_BIB_OPT_USE_KEY_WRAP`:: +The ID of an option used to convey the integer value 0, to skip key wrap and use as a content key, or 1, to perform key wrap of a random content key. +`BSLX_BIB_OPT_SHA_VARIANT`:: +The ID of an option used to convey the integer SHA Variant. +Valid values are defined by Section 3.3.1 of <> and are used directly by this option. +`BSLX_BIB_OPT_SCOPE`:: +The ID of an option used to convey the integer IPPT Scope. +Valid values are defined by Section 3.3.3 of <> and are used directly by this option. + +The following are preprocessor define directives related to options of the BCB-AES-GCM context. +Their enumerated values are not part of the API. -`BSL_CRYPTO_AESGCM_AUTH_TAG_LEN` = 16:: -The length of an Authentication Tag for AES-GCM encryption and decryption as specified by <>. +`BSLX_BCB_OPT_KEY_ID`:: +The ID of an option used to convey the mandatory key ID as a text string. +Valid values must be present in the BPA key store to be usable in any BPSec role. +`BSLX_BCB_OPT_USE_KEY_WRAP`:: +The ID of an option used to convey the integer value 0, to skip key wrap and use as a content key, or 1, to perform key wrap of a random content key. +`BSLX_BCB_OPT_AES_VARIANT`:: +The ID of an option used to convey the integer AES Variant. +Valid values are defined by Section 4.3.2 of <> and are used directly by this option. +`BSLX_BCB_OPT_SCOPE`:: +The ID of an option used to convey the integer AAD Scope. +Valid values are defined by Section 4.3.4 of <> and are used directly by this option. -`BSLX_MAX_AES_PAD` = 64:: -Maximum size of padding added to AES operation by crypto finalize operation. -AES-GCM will not produce extra padding, and this value is likely inconsequential. -`RFC9173_BCB_DEFAULT_IV_LEN` = 12:: -The default initialization vector length as specified by <>. +[#sec-cosesc] +== COSE Context +The BSL source and default build includes an implementation of the COSE Context <> as a more complex and full-featured use of the crypto APIs. +This implementation is limited to only the symmetric key COSE algorithms listed in Section 3.2.2 and related COSE header parameters listed in Section 3.3 with key identifier considerations discussed in Section 3.4 of that specification. -[#sec-examplepp] -== Example ION-Heritage Policy Provider +This implementation corresponds to the shared library `bsl_cose_sc` as explained in the <> and the API Docs subsection on https://nasa-ammos.github.io/BSL/html/examples-and-mocks.html#cose-sc[COSE Context]. + +The COSE context has Context ID 3 for both BIB and BCB use. + +[#sec-cosesc-preprocessor] +=== Preprocessor Define Directives -The BSL source and default build includes a policy provider which has heritage in the ION BPA and is used to configure options for the Default Security Context implementations of <>. +The following are preprocessor define directives related to options of the COSE context. +Their enumerated values are not part of the API. + +`BSLX_COSESC_OPTION_KEY_ID`:: +The ID of an option used to convey a key ID as a byte string (which may contain encoded UTF8 text, but that is not inspected by the implementation). +Valid values must be present in the BPA key store to be usable in any BPSec role. +This is required for source role and an optional filter for verifier/acceptor. +If the COSE Key algorithm is different than `BSLX_COSESC_OPTION_TGT_ALG` option, +the key will be used for the recipient layer, otherwise it will be used +for a single-layer message. + +`BSLX_COSESC_OPTION_KEY_ALG`:: +The ID of an option used to convey the integer COSE algorithm associated with the top COSE layer (recipient). +This is optional for source role and optional filter for verifier/acceptor. +If not provided the COSE Key must contain an algorithm parameter. +Valid values are taken from the subset of the COSE algorithms registry implemented by this plugin. + +`BSLX_COSESC_OPTION_TGT_ALG`:: +The ID of an option used to convey the integer COSE algorithm associated with the lowest COSE layer (content). +This is required for source role and optional filter for verifier/acceptor. +Valid values are taken from the subset of the COSE algorithms registry implemented by this plugin. + +`BSLX_COSESC_OPTION_AAD_SCOPE`:: +The ID of an option used to convey the a byte string of the CBOR-encoded AAD Scope parameter. +This is optional for source role, optional exact-match for verifier/acceptor. +Valid values follow the structure defined in Section 2.2.2 of <>. +A helper function `BSLX_CoseSc_SetAadScope()` is provided to simplify value encoding. + +`BSLX_COSESC_OPTION_IV_COUNTER_OFFSET`:: +The ID of an option used to convey the integer offset to add to the key use counter and treated as a partial IV according to COSE processing rules. + +`BSLX_COSESC_OPTION_IV_BASE`:: +The ID of an option used to convey the byte string treated as a base IV according to COSE processing rules. +This is optional for source role and unused for verifier/acceptor. +Valid values must match the IV length of the content encryption algorithm. + +`BSLX_COSESC_OPTION_SALT_LENGTH`:: +The ID of an option used to convey the integer length (in bytes) of salt for KDF sources. +This is optional for source role and unused for verifier/acceptor. +When not present, the default salt length for the KDF algorithm will be used. + +`BSLX_COSESC_OPTION_SALT_COUNTER_OFFSET`:: +`BSLX_COSESC_OPTION_SALT_BASE`:: +These IDs of options are used to control deterministic recipient KDF salt generation using the same algorithm defined by COSE for partial and base IV combination. +If these are present, the `BSLX_COSESC_OPTION_SALT_LENGTH` option is ignored as the base byte string defines the length. + +[#sec-samplepp] +== Sample Policy Provider + +The BSL source and default build includes a policy provider which has heritage in the ION BPA and is used to configure options for the Security Context implementations of <> and <>. Alternative SC implementations can have other internal options that the example policy provider is unaware of and cannot configure. -This implementation corresponds to the shared library `bsl_example_pp` as explained in the <> and the API Docs subsection on https://nasa-ammos.github.io/BSL/html/examples-and-mocks.html#example-pps[Example Policy Providers]. +This implementation corresponds to the shared library `bsl_sample_pp` as explained in the <> and the API Docs subsection on https://nasa-ammos.github.io/BSL/html/examples-and-mocks.html#example-pps[Example Policy Providers]. -[#sec-examplepp-json] +[#sec-samplepp-json] === JSON-Defined Policy Provider Rules The sample policy provider has the option to parse and load JSON-encoded ION-like policy rules into the sample policy provider from a file. @@ -647,14 +740,14 @@ This procedure is how a BPA making use of the example policy provider initialize An example with two policy rules is shown below. -[#src-examplepp-json] +[#src-samplepp-json] .Example JSON-Encoded Policy Provider [source,json] ---- include::https://raw.githubusercontent.com/NASA-AMMOS/BSL/refs/heads/main/mock-bpa-test/policy_provider_test.json[] ---- -[#sec-examplepp-preprocessor] +[#sec-samplepp-preprocessor] === Preprocessor Define Directives The Example PP does not rely on any externally configured preprocessor defines to operate normally. @@ -670,7 +763,7 @@ This implementation corresponds to the executable `bsl-mock-bpa` and shared libr The Mock BPA does not provide any of the normal processing required of a real BPA by <>, it is limited to decoding and encoding BPv7 protocol data unit (PDU) byte strings, processing specific BPv7 primary block fields, providing BSL-required integration callbacks, and calling into the BSL for each bundle being processed at each interaction point. The Mock BPA communicates with "the outside" at each interaction point using UDP/IP socket binds configured by command options explained in detail in <>. -Users may find it useful to reference the Mock BPA for a working example of library and bundle workflow, and working examples of initializing, registering, and operating the Default Security Context (of <>) and the Example Policy Provider (of <>). +Users may find it useful to reference the Mock BPA for a working example of library and bundle workflow, and working examples of initializing, registering, and operating the Default Security Context (of <>) and the Example Policy Provider (of <>). Exercising of the Mock BPA is part of normal BSL continuous integration (CI) testing and release testing, so it is always in-sync with the BSL APIs. [#sec-mockbpa-preprocessor] From e88f4760ef709999b88b1c145641ab574f91664f Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Thu, 13 Aug 2026 12:14:12 -0400 Subject: [PATCH 04/12] spelling --- user-guide/dictionary.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/user-guide/dictionary.txt b/user-guide/dictionary.txt index b9af15d..e86b3f4 100644 --- a/user-guide/dictionary.txt +++ b/user-guide/dictionary.txt @@ -1,4 +1,6 @@ +AAD ABI +acceptor Acceptor AES AMMOS @@ -13,6 +15,7 @@ Backend BCB BPA BPAs +bpsec BPSec BPv bsl @@ -25,10 +28,13 @@ CLA CLAs CLIN CODEC +cose +COSE crypto cryptographic de De +dtn DTN EID EIDs @@ -40,15 +46,19 @@ GCM HMAC IANA IEC +ietf IETF instantiation IP +IPPT ISA Jansson JHU JPL JSON JWK +JWKs +KDF LLC MCS MGSS @@ -56,6 +66,7 @@ MIMTaR mutex OpenSSL PDU +plaintext POSIX PPs preprocessor @@ -76,5 +87,7 @@ TBD toc UDP UML +UTF +verifier Verifier Wireshark From b5fb716d91bad58c546d0a8088fab92b02031912 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Thu, 13 Aug 2026 13:36:17 -0400 Subject: [PATCH 05/12] Add crypto terms and update diagram --- user-guide/manual.adoc | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/user-guide/manual.adoc b/user-guide/manual.adoc index da7101b..798e2d8 100644 --- a/user-guide/manual.adoc +++ b/user-guide/manual.adoc @@ -84,6 +84,23 @@ The BSL does not use JSON directly, but the example ION-heritage Policy Provider JSON Web Key (JWK) and JWK Set:: A JSON data structure defined in <> which represents a set of cryptographic keys and their parameters. The BSL does not use JWKs directly, but the dynamic backend provides an API for loading a JWK Set file into a key store and the Mock BPA makes use of this API during its startup. + +The following are cryptographic terms (used within security context options and explanations) consistent with NIST <> definitions: + +Key Derivation Function (KDF):: +A cryptographic function used to derive symmetric key material from input key material, an entropy-adding "salt" value, and opaque context information data. +Key Derivation Key (KDK):: +A key used as an input to a key-derivation function to derive additional keying material. +Key Encryption Key (KEK):: +A cryptographic key that is used for the encryption or decryption of other keys to provide confidentiality protection for those keys. Also known as a key-wrapping key. +Content Key:: +The lowest-layer symmetric key used as input for MAC or AEAD algorithms. +Authenticated Encryption with Associated Data (AEAD):: +A subset of encryption algorithms which outputs an authentication tag along with its ciphertext, and inputs data which is authenticated but not encrypted (AAD). +Initialization Vector (IV):: +An input to authenticated encryption which must be unique for each combination of content key and plaintext. +Additional Authenticated Data (AAD):: +The input data to the authenticated encryption function that is authenticated but not encrypted. Message Authentication Code (MAC):: A symmetric key algorithm used to provide integrity over some plaintext, which can itself be composed of a payload along with additional authenticated data. @@ -209,6 +226,9 @@ An option is an internal-to-BSL item which communicates intent for a single Secu |IEEE Standard for Information Technology - Portable Operating System Interface (POSIX(R))[[POSIX]] |https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/[IEEE Std 1003.1-2008] +|US NIST Computer Security Resource Center Glossary[[CSRC,CSRC Glossary]] +|https://csrc.nist.gov/glossary + |M*LIB: Generic type-safe Container Library for C language[[MLIB]] |https://github.com/P-p-H-d/mlib[GitHub project for M*LIB] @@ -288,17 +308,19 @@ The dependencies between areas are shown in <>, where the sing ---- digraph figure { rankdir=TB; - node [shape=record, fontname=Helvetica, fontsize=12]; + node [shape=box, fontname=Helvetica, fontsize=12]; bpa [ label="BP Agent" ]; bsl [ label="BSL\n(frontend+backend)" ]; - pp [ label="Example\nPolicy Provider" ]; - sc [ label="Example\nSecurity Context" ]; + pp [ label="Policy Provider(s)" ]; + sc [ label="Security Context(s)" ]; crypto [ label="Crypto Provider" ]; + { rank=same; pp; sc; } bpa -> bsl [ label="BSL Service API" ]; bsl -> pp [ label="PP Register"; dir=back; ] bsl -> sc [ label="SC Register"; dir=back; ] + pp -> sc [ label="Options" ]; sc -> crypto; } ---- @@ -358,7 +380,7 @@ This is depicted in <>, where the BPA initiates the sequence ---- digraph figure { rankdir=TB; - node [shape=record, fontname=Helvetica, fontsize=12]; + node [shape=box, fontname=Helvetica, fontsize=12]; bpa [ label="BP Agent" ]; bsl [ label="BSL" ]; @@ -377,11 +399,11 @@ This is depicted in <>, which elides the ultimate source of [#fig-calls-callback] .Calls Directed To the BPA -[graphviz,format=svg,width=80mm] +[graphviz,format=svg,width=100mm] ---- digraph figure { rankdir=TB; - node [shape=record, fontname=Helvetica, fontsize=12]; + node [shape=box, fontname=Helvetica, fontsize=12]; bpa [ label="BP Agent" ]; bsl [ label="BSL" ]; From c854d804822a1edf73cf8b6710061a42ace985e2 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Thu, 13 Aug 2026 13:37:37 -0400 Subject: [PATCH 06/12] spelling --- user-guide/dictionary.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/user-guide/dictionary.txt b/user-guide/dictionary.txt index e86b3f4..6e442bd 100644 --- a/user-guide/dictionary.txt +++ b/user-guide/dictionary.txt @@ -2,6 +2,7 @@ AAD ABI acceptor Acceptor +AEAD AES AMMOS APIs @@ -24,6 +25,7 @@ BTSD Caltech CBOR centric +ciphertext CLA CLAs CLIN @@ -32,6 +34,7 @@ cose COSE crypto cryptographic +CSRC de De dtn @@ -59,6 +62,8 @@ JSON JWK JWKs KDF +KDK +KEK LLC MCS MGSS From 616169e1c07f051e7777bcd2882b393b426b0a0c Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Thu, 13 Aug 2026 14:19:58 -0400 Subject: [PATCH 07/12] spelling --- user-guide/dictionary.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/user-guide/dictionary.txt b/user-guide/dictionary.txt index 6e442bd..1d9a0f1 100644 --- a/user-guide/dictionary.txt +++ b/user-guide/dictionary.txt @@ -69,6 +69,7 @@ MCS MGSS MIMTaR mutex +NIST OpenSSL PDU plaintext From 9643bfd11d04d5fbbd28d60ee1985a934bb965cd Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Thu, 13 Aug 2026 14:57:55 -0400 Subject: [PATCH 08/12] spelling --- user-guide/dictionary.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/user-guide/dictionary.txt b/user-guide/dictionary.txt index 1d9a0f1..a12acb9 100644 --- a/user-guide/dictionary.txt +++ b/user-guide/dictionary.txt @@ -93,6 +93,7 @@ TBD toc UDP UML +untrusted UTF verifier Verifier From 39a2c3c35ed13da3f413ba4e754977a46a41954b Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Thu, 13 Aug 2026 15:01:44 -0400 Subject: [PATCH 09/12] Fix anchor locations to avoid asciidoc warnings --- product-guide/manual.adoc | 67 +++++++++++++++++++-------------------- user-guide/manual.adoc | 54 +++++++++++++++---------------- 2 files changed, 60 insertions(+), 61 deletions(-) diff --git a/product-guide/manual.adoc b/product-guide/manual.adoc index b2c17d8..b4bb4d5 100644 --- a/product-guide/manual.adoc +++ b/product-guide/manual.adoc @@ -150,7 +150,7 @@ An option is an internal-to-BSL item which communicates intent for a single Secu |Title |Document Number -|Software Development[[jpl-sd,JPL SD]] +|[[jpl-sd,JPL SD]]Software Development |57653 rev 10 |=== @@ -162,19 +162,19 @@ An option is an internal-to-BSL item which communicates intent for a single Secu |Title |Document Number -|MGSS Implementation and Maintenance Task Requirements (MIMTaR)[[mimtar,MIMTaR]] +|[[mimtar,MIMTaR]]MGSS Implementation and Maintenance Task Requirements (MIMTaR) |DOC-001455 rev I -|BSL Software Design Document (SDD)[[bsl-sdd,BSL SDD]] +|[[bsl-sdd,BSL SDD]]BSL Software Design Document (SDD) |DOC-005834 -|BSL Software Requirements Document (SRD)[[bsl-srd,BSL SRD]] +|[[bsl-srd,BSL SRD]]BSL Software Requirements Document (SRD) |https://github.com/NASA-AMMOS/BSL-docs/blob/main/BSL%20Software%20Requirements%20Document.pdf[DOC-005735] -|BSL Software Interface Specification (SIS)[[bsl-sis,BSL SIS]] +|[[bsl-sis,BSL SIS]]BSL Software Interface Specification (SIS) |https://nasa-ammos.github.io/BSL/html/bsl-sis.html[DOC-005835] -|BSL v2.0 User Guide[[bsl-user-guide,BSL User Guide]] +|[[bsl-user-guide,BSL User Guide]]BSL v2.0 User Guide |https://nasa-ammos.github.io/BSL-docs/user-guide/manual.pdf[DOC-005922] |=== @@ -185,86 +185,85 @@ An option is an internal-to-BSL item which communicates intent for a single Secu |Title |Reference -|BSL Source[[bsl-source]] +|[[bsl-source]]BSL Source |https://github.com/NASA-AMMOS/BSL[GitHub project BSL] -|BSL Documentation Source[[bsl-docs]] +|[[bsl-docs]]BSL Documentation Source |https://github.com/NASA-AMMOS/BSL-docs[GitHub project BSL-docs] -|BSL API Documentation -- Main Branch[[bsl-main-api,BSL API Docs]] +|[[bsl-main-api,BSL API Docs]]BSL API Documentation -- Main Branch |https://nasa-ammos.github.io/BSL/html/[GitHub Pages for BSL] -|Programming Languages -- C[[C99]] +|[[C99]]Programming Languages -- C |ISO/IEC 9899:1999 -|IEEE Standard for Information Technology - Portable Operating System Interface (POSIX(R))[[POSIX]] +|[[POSIX]]IEEE Standard for Information Technology - Portable Operating System Interface (POSIX(R)) |https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/[IEEE Std 1003.1-2008] -|Security Requirements for Cryptographic Modules[[fips-140,FIPS 140-3]] +|[[fips-140,FIPS 140-3]]Security Requirements for Cryptographic Modules |https://csrc.nist.gov/pubs/fips/140-3/final[NIST FIPS 140-3] -|Using SELinux[[rhel9-selinux]] +|[[rhel9-selinux]]Using SELinux |https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/pdf/using_selinux/red_hat_enterprise_linux-9-using_selinux-en-us.pdf[RHEL9 SELinux Documentation] -|Packaging and distributing software[[rhel9-packaging]] +|[[rhel9-packaging]]Packaging and distributing software |https://docs.redhat.com/en-us/documentation/red_hat_enterprise_linux/9/pdf/packaging_and_distributing_software/Red_Hat_Enterprise_Linux-9-Packaging_and_distributing_software-en-US.pdf[RHEL9 Packaging Documentation] -|Fedora Packaging Guidelines[[fedora-packaging]] +|[[fedora-packaging]]Fedora Packaging Guidelines |https://docs.fedoraproject.org/en-US/packaging-guidelines/[Fedora Packaging Documentation] -|M*LIB: Generic type-safe Container Library for C language[[MLIB]] +|[[MLIB]]M*LIB: Generic type-safe Container Library for C language |https://github.com/P-p-H-d/mlib[GitHub project for M*LIB] -|QCBOR Library[[QCBOR]] +|[[QCBOR]]QCBOR Library |https://github.com/laurencelundblade/QCBOR[GitHub project for QCBOR] -|OpenSSL Library[[OpenSSL]] +|[[OpenSSL]]OpenSSL Library |https://openssl-library.org/[OpenSSL Project] -|Jansson Library[[Jansson]] +|[[Jansson]]Jansson Library |https://github.com/akheron/jansson[GitHub project for Jansson] -|Unity Test Library[[unity-test]] +|[[unity-test]]Unity Test Library |https://github.com/ThrowTheSwitch/Unity[GitHub project Unity] -|NASA Interplanetary Overlay Networking (ION) software[[NASA-ION]] +|[[NASA-ION]]NASA Interplanetary Overlay Networking (ION) software |https://github.com/nasa-jpl/ION-DTN/[GitHub project for ION-DTN] -|CMake Reference Documentation[[CMake]] +|[[CMake]]CMake Reference Documentation |https://cmake.org/cmake/help/v3.26/index.html[CMake Project] -|Guide to pkg-config[[pkg-config]] +|[[pkg-config]]Guide to pkg-config |https://people.freedesktop.org/~dbn/pkg-config-guide.html[Freedesktop Project] -|The Ninja build system[[Ninja]] +|[[Ninja]]The Ninja build system |https://ninja-build.org/manual.html[Ninja manual] -|Tito: A tool for managing rpm based git projects[[tito]] +|[[tito]]Tito: A tool for managing rpm based git projects |https://github.com/rpm-software-management/tito[GitHub project Tito] -|Wireshark Project[[wireshark]] +|[[wireshark]]Wireshark Project |https://www.wireshark.org/ -|JSON Web Key (JWK)[[RFC7517]] +|[[RFC7517]]JSON Web Key (JWK) |https://www.rfc-editor.org/info/rfc7517[IETF RFC 7517] -|The JavaScript Object Notation (JSON) Data Interchange Format[[RFC8259]] +|[[RFC8259]]The JavaScript Object Notation (JSON) Data Interchange Format |https://www.rfc-editor.org/info/rfc8259[IETF RFC 8259] -|Concise Binary Object Representation (CBOR)[[RFC8949]] +|[[RFC8949]]Concise Binary Object Representation (CBOR) |https://www.rfc-editor.org/info/rfc8949[IETF RFC 8949] -|Bundle Protocol Version 7[[RFC9171]] +|[[RFC9171]]Bundle Protocol Version 7 |https://www.rfc-editor.org/info/rfc9171[IETF RFC 9171] -|Bundle Protocol Security (BPSec)[[RFC9172]] +|[[RFC9172]]Bundle Protocol Security (BPSec) |https://www.rfc-editor.org/info/rfc9172[IETF RFC 9172] -|Default Security Contexts for Bundle Protocol Security (BPSec)[[RFC9173]] +|[[RFC9173]]Default Security Contexts for Bundle Protocol Security (BPSec) |https://www.rfc-editor.org/info/rfc9173[IETF RFC 9173] -|Bundle Protocol Security (BPSec) COSE Context -[[draft-ietf-dtn-bpsec-cose]] +|[[draft-ietf-dtn-bpsec-cose]]Bundle Protocol Security (BPSec) COSE Context |https://datatracker.ietf.org/doc/draft-ietf-dtn-bpsec-cose/[draft-ietf-dtn-bpsec-cose] |=== diff --git a/user-guide/manual.adoc b/user-guide/manual.adoc index f1fb7f3..3d75a24 100644 --- a/user-guide/manual.adoc +++ b/user-guide/manual.adoc @@ -179,7 +179,7 @@ An option is an internal-to-BSL item which communicates intent for a single Secu |Title |Document Number -|Software Development[[jpl-sd,JPL SD]] +|[[jpl-sd,JPL SD]]Software Development |57653 rev 10 |=== @@ -191,16 +191,16 @@ An option is an internal-to-BSL item which communicates intent for a single Secu |Title |Document Number -|MGSS Implementation and Maintenance Task Requirements (MIMTaR)[[mimtar,MIMTaR]] +|[[mimtar,MIMTaR]]MGSS Implementation and Maintenance Task Requirements (MIMTaR) |DOC-001455 rev I -|BSL Software Requirements Document (SRD)[[bsl-srd,BSL SRD]] +|[[bsl-srd,BSL SRD]]BSL Software Requirements Document (SRD) |https://github.com/NASA-AMMOS/BSL-docs/blob/main/BSL%20Software%20Requirements%20Document.pdf[DOC-005735] -|BSL Software Interface Specification (SIS)[[bsl-sis,BSL SIS]] +|[[bsl-sis,BSL SIS]]BSL Software Interface Specification (SIS) |https://nasa-ammos.github.io/BSL/html/bsl-sis.html[DOC-005835] -|BSL v2.0 Product Guide[[bsl-product-guide,BSL Product Guide]] +|[[bsl-product-guide,BSL Product Guide]]BSL v2.0 Product Guide |https://nasa-ammos.github.io/BSL-docs/product-guide/manual.pdf[DOC-005921] |=== @@ -211,70 +211,70 @@ An option is an internal-to-BSL item which communicates intent for a single Secu |Title |Reference -|BSL Source[[bsl-source]] +|[[bsl-source]]BSL Source |https://github.com/NASA-AMMOS/BSL[GitHub project BSL] -|BSL Documentation Source[[bsl-docs]] +|[[bsl-docs]]BSL Documentation Source |https://github.com/NASA-AMMOS/BSL-docs[GitHub project BSL-docs] -|BSL API Documentation -- Main Branch[[bsl-main-api,BSL API Docs]] +|[[bsl-main-api,BSL API Docs]]BSL API Documentation -- Main Branch |https://nasa-ammos.github.io/BSL/html/[GitHub Pages for BSL] -|Programming Languages -- C[[C99]] +|[[C99]]Programming Languages -- C |https://www.iso.org/standard/29237.html[ISO/IEC 9899:1999] -|IEEE Standard for Information Technology - Portable Operating System Interface (POSIX(R))[[POSIX]] +|[[POSIX]]IEEE Standard for Information Technology - Portable Operating System Interface (POSIX(R)) |https://pubs.opengroup.org/onlinepubs/9699919799.2008edition/[IEEE Std 1003.1-2008] -|US NIST Computer Security Resource Center Glossary[[CSRC,CSRC Glossary]] +|[[CSRC,CSRC Glossary]]US NIST Computer Security Resource Center Glossary |https://csrc.nist.gov/glossary -|M*LIB: Generic type-safe Container Library for C language[[MLIB]] +|[[MLIB]]M*LIB: Generic type-safe Container Library for C language |https://github.com/P-p-H-d/mlib[GitHub project for M*LIB] -|QCBOR Library[[QCBOR]] +|[[QCBOR]]QCBOR Library |https://github.com/laurencelundblade/QCBOR[GitHub project for QCBOR] -|OpenSSL Library[[OpenSSL]] +|[[OpenSSL]]OpenSSL Library |https://openssl-library.org/[OpenSSL Project] -|Jansson Library[[Jansson]] +|[[Jansson]]Jansson Library |https://github.com/akheron/jansson[GitHub project for Jansson] -|Unity Test Library[[unity-test]] +|[[unity-test]]Unity Test Library |https://github.com/ThrowTheSwitch/Unity[GitHub project Unity] -|NASA Interplanetary Overlay Networking (ION) software[[NASA-ION]] +|[[NASA-ION]]NASA Interplanetary Overlay Networking (ION) software |https://github.com/nasa-jpl/ION-DTN/[GitHub project for ION-DTN] -|Bundle Protocol Security (BPSec) Policy Configuration for ION Open Source (ION-IOS)[[ION-BPSec-Policy-Manual]] +|[[ION-BPSec-Policy-Manual]]Bundle Protocol Security (BPSec) Policy Configuration for ION Open Source (ION-IOS) |https://github.com/nasa-jpl/ION-DTN/blob/current/Security_Policy_User_Manual.docx[ION BPSec Policy Manual] -|Wireshark Project[[wireshark]] +|[[wireshark]]Wireshark Project |https://www.wireshark.org/ -|JSON Web Key (JWK)[[RFC7517]] +|[[RFC7517]]JSON Web Key (JWK) |https://www.rfc-editor.org/info/rfc7517[IETF RFC 7517] -|The JavaScript Object Notation (JSON) Data Interchange Format[[RFC8259]] +|[[RFC8259]]The JavaScript Object Notation (JSON) Data Interchange Format |https://www.rfc-editor.org/info/rfc8259[IETF RFC 8259] -|Concise Binary Object Representation (CBOR)[[RFC8949]] +|[[RFC8949]]Concise Binary Object Representation (CBOR) |https://www.rfc-editor.org/info/rfc8949[IETF RFC 8949] -|CBOR Object Signing and Encryption (COSE): Structures and Process[[RFC9052]] +|[[RFC9052]]CBOR Object Signing and Encryption (COSE): Structures and Process |https://www.rfc-editor.org/info/rfc9052[IETF RFC 9052] -|Bundle Protocol Version 7[[RFC9171]] +|[[RFC9171]]Bundle Protocol Version 7 |https://www.rfc-editor.org/info/rfc9171[IETF RFC 9171] -|Bundle Protocol Security (BPSec)[[RFC9172]] +|[[RFC9172]]Bundle Protocol Security (BPSec) |https://www.rfc-editor.org/info/rfc9172[IETF RFC 9172] -|Default Security Contexts for Bundle Protocol Security (BPSec)[[RFC9173]] +|[[RFC9173]]Default Security Contexts for Bundle Protocol Security (BPSec) |https://www.rfc-editor.org/info/rfc9173[IETF RFC 9173] -|Bundle Protocol Security (BPSec) COSE Context[[draft-ietf-dtn-bpsec-cose]] +|[[draft-ietf-dtn-bpsec-cose]]Bundle Protocol Security (BPSec) COSE Context |https://datatracker.ietf.org/doc/draft-ietf-dtn-bpsec-cose/[draft-ietf-dtn-bpsec-cose] |=== From a5846486351fb0ab00e53d0c9835132b22773844 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Thu, 13 Aug 2026 15:08:44 -0400 Subject: [PATCH 10/12] Add specific terms --- user-guide/dictionary.txt | 1 + user-guide/manual.adoc | 2 ++ 2 files changed, 3 insertions(+) diff --git a/user-guide/dictionary.txt b/user-guide/dictionary.txt index a12acb9..64648fa 100644 --- a/user-guide/dictionary.txt +++ b/user-guide/dictionary.txt @@ -46,6 +46,7 @@ executables frontend Frontend GCM +HKDF HMAC IANA IEC diff --git a/user-guide/manual.adoc b/user-guide/manual.adoc index f1fb7f3..5421b4c 100644 --- a/user-guide/manual.adoc +++ b/user-guide/manual.adoc @@ -89,6 +89,7 @@ The following are cryptographic terms (used within security context options and Key Derivation Function (KDF):: A cryptographic function used to derive symmetric key material from input key material, an entropy-adding "salt" value, and opaque context information data. +One variety of of this type of function is a hash-based KDF (HKDF). Key Derivation Key (KDK):: A key used as an input to a key-derivation function to derive additional keying material. Key Encryption Key (KEK):: @@ -103,6 +104,7 @@ Additional Authenticated Data (AAD):: The input data to the authenticated encryption function that is authenticated but not encrypted. Message Authentication Code (MAC):: A symmetric key algorithm used to provide integrity over some plaintext, which can itself be composed of a payload along with additional authenticated data. +One variety of of this type of function is a hash-based MAC (HMAC). [#list-terms-bpsec] The following are BP- and BPSec-related terms: From bece51d8f76c9e82b91379bf33e8710eadd2f8c3 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Thu, 13 Aug 2026 15:11:56 -0400 Subject: [PATCH 11/12] Fix section title and add reference to all example SCs --- user-guide/manual.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/user-guide/manual.adoc b/user-guide/manual.adoc index 7826336..ecaab8d 100644 --- a/user-guide/manual.adoc +++ b/user-guide/manual.adoc @@ -503,7 +503,7 @@ The BSL includes a simple rule-based example PP that may be utilized by any BPA This policy provider's data is mutex-protected and may be re-used among multiple threads / BSL contexts (see the Mock BPA for an example). [#sec-api-sc] -=== Security Contexts +=== Security Context Interface Security Contexts need to be registered with a library context via the dynamic backend before they can be used. Security Contexts must implement the function headers of the dynamic backend `BSL_SecCtxDesc_t` struct defined in the `SecurityContext.h` header file. @@ -511,7 +511,7 @@ Security Contexts must implement the function headers of the dynamic backend `BS Security Contexts operate in the context of a single Security Operation over a bundle. Security Contexts must validate Security Operations for consistency, and process Security Operations on bundles to produce security outcomes. -The BSL includes two Default Security Context implementations, as explained in <>, which are also used by the Mock BPA for BSL testing (see <>). +The BSL includes its own context implementations, as explained in <> and <>, which are also used by the Mock BPA for BSL testing (see <>). [#sec-api-sc-crypto] ==== Cryptographic Processing From 02c67bdd51b9963bf19c307f6fd5562556c76bd3 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Thu, 13 Aug 2026 15:14:06 -0400 Subject: [PATCH 12/12] Fix BSL cross-reference links --- product-guide/manual.adoc | 2 +- user-guide/manual.adoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/product-guide/manual.adoc b/product-guide/manual.adoc index b2c17d8..885762e 100644 --- a/product-guide/manual.adoc +++ b/product-guide/manual.adoc @@ -175,7 +175,7 @@ An option is an internal-to-BSL item which communicates intent for a single Secu |https://nasa-ammos.github.io/BSL/html/bsl-sis.html[DOC-005835] |BSL v2.0 User Guide[[bsl-user-guide,BSL User Guide]] -|https://nasa-ammos.github.io/BSL-docs/user-guide/manual.pdf[DOC-005922] +|https://nasa-ammos.github.io/BSL-docs/user-guide/bsl-user-guide.pdf[DOC-005922] |=== diff --git a/user-guide/manual.adoc b/user-guide/manual.adoc index ecaab8d..8e374f4 100644 --- a/user-guide/manual.adoc +++ b/user-guide/manual.adoc @@ -201,7 +201,7 @@ An option is an internal-to-BSL item which communicates intent for a single Secu |https://nasa-ammos.github.io/BSL/html/bsl-sis.html[DOC-005835] |BSL v2.0 Product Guide[[bsl-product-guide,BSL Product Guide]] -|https://nasa-ammos.github.io/BSL-docs/product-guide/manual.pdf[DOC-005921] +|https://nasa-ammos.github.io/BSL-docs/product-guide/bsl-product-guide.pdf[DOC-005921] |===