-
Notifications
You must be signed in to change notification settings - Fork 9
BSL v1.1 Verification
- Overview
- Requirements Traceability Matrix (RTM)
- New Requirements
- Defect Corrections
- Improvements
- Sustainment
- Other
- Regression Testing
This page serves as a fulfillment of the Verification Matrix requirement for the incremental release of BPSec Library (BSL) version 1.1. The goal is to verify all Release Line Items (RLIs) present in the BSL v1.1 Release Plan (and any additional RLIs that will be mentioned at TRR), meaning all changes in this version are being tested. Regression testing of requirements is included to show that such changes did not break the existing code base. The tables present in this page will be included in the BSL Test Plan for the standard release (v2.0) happening later this year.
A Requirements Traceability Matrix (RTM) in the following table links requirements to specific test cases in the Test Specification. The RTM provides a measure of accessing the impact of changes to the requirements and provides a means of demonstrating that requirements have been satisfied.
| Rqmt ID | Description | Verification Procedure ID |
|---|---|---|
| BSL-GEN-1-0 | The BSL shall be compliant with RFC 9172. | BSL_1 (RFC Compliance) |
| BSL-GEN-1-1 | The BSL shall impose a deterministic processing order for all security blocks. | BSL_2 (Deterministic Processing Order) |
| BSL-GEN-2-0 | The BSL shall construct security blocks for inclusion in a bundle. | BSL_3 (Security Block Inclusion) |
| BSL-GEN-2-1 | The BSL shall add security operations to a security block. | BSL_4 (Security Operations) |
| BSL-GEN-2-2 | The BSL shall determine whether a new security block can be added to the bundle when adding a security operation to a bundle. | BSL_5 (Adding Block to Bundle) |
| BSL-GEN-2-3 | The BSL shall ensure that security operations in a bundle are unique. | BSL_6 (Unique Security Operations) |
| BSL-GEN-3-0 | The BSL shall remove security operations from a bundle. | BSL_7 (Removing Security Operations) |
| BSL-GEN-3-1 | The BSL shall determine when a security block should be removed from a bundle. | BSL_8 (Bundle Removing Block) |
| BSL-GEN-3-2 | The BSL shall inform the BPA to discard a security block when all security operations for that block have been removed. | BSL_9 (Inform BPA) |
| BSL-GEN-4-0 | The BSL shall read non-security block contents as provided by the BPA. | BSL_10 (Reading Non Security Block) |
| BSL-GEN-5-0 | The BSL shall provide updated block contents to the BPA. | BSL_11 (Updating Block Contents) |
| BSL-GEN-6-0 | The BSL shall encode the BTSD produced for a security block in compliance with RFC9172 encodings. | BSL_12 (Encode BTSD) |
| BSL-GEN-7-0 | The BSL shall decode the BTSD of a RFC9172 encoded security block. | BSL_13 (Decode BTSD) |
| BSL-GEN-8-0 | The BSL shall determine what security role (if any) the local node shall have for a given security operation. | BSL_14 (Node Security Role) |
| BSL-GEN-9-0 | The BSL shall perform processing action(s) in response to security operation lifecycle events when required by policy. | BSL_15 (Operation Lifecycle Events) |
| BSL-GEN-9-1 | The BSL shall request that a BPA remove a security block when required by policy. | BSL_16 (BPA Removing Block) |
| BSL-GEN-9-2 | The BSL shall request that a BPA delete a security target block when required by policy. | BSL_17 (BPA Deleting Block) |
| BSL-GEN-9-3 | The BSL shall request that the BPA delete all security operations represented by a security block when required by policy. | BSL_18 (BPA Deleting Operations) |
| BSL-GEN-9-4 | The BSL shall request that the BPA delete a bundle when required by policy. | BSL_19 (BPA Deleting Bundle) |
| BSL-GEN-9-5 | The BSL shall generate a bundle status report when required by policy. | BSL_20 (Bundle Status Report) |
| BSL-SSF-1-0 | The BSL shall generate cryptographic materials based on bundle information and local policy. | BSL_21 (Generate Cryptographs) |
| BSL-SSF-1-1 | The BSL shall determine the success or failure of any attempted cryptographic function. | BSL_22 (Success Cryptographic Function) |
| BSL-SSF-2-0 | The BSL shall alter the contents of non-security blocks to incorporate cryptographic outputs in accordance with RFC 9173. | BSL_23 (RFC Compliant Cryptographs) |
| BSL-SSF-2-1 | The BSL shall place cryptographic material in security block security result fields in accordance with RFC 9172 and RFC 9173. | BSL_24 (Security Block Result Fields) |
| BSL-SSF-3-0 | The BSL shall extract the set of bundle and block data needed to assemble security context inputs. | BSL_25 (Extracting Bundle Block Data) |
| BSL-SSF-3-1 | The BSL shall retrieve key-related parameters required by key-based security contexts. | BSL_26 (Retrieving Key Parameters) |
| BSL-SSF-4-0 | The BSL shall support the security contexts identified in RFC 9173. | BSL_27 (Supporting Security Contexts) |
| BSL-SSF-4-1 | The BSL shall support the use of the BCB-AES-GCM default security context [RFC 9173] for BCB-confidentiality security operations. | BSL_28 (Supporting BCB AES GCM) |
| BSL-SSF-4-2 | The BSL shall support the use of the BIB-HMAC-SHA default security context [RFC 9173] for bib-integrity security operations. | BSL_29 (Supporting BIB HMAC SHA) |
| BSL-ERR-1-0 | The BSL shall indicate to the BPA the result (e.g. success, failure, or error) of each attempted security operation. | BSL_30 (Results of Operation) |
| BSL-ERR-1-1 | The BSL shall verify the security operations of a security block for which the BPA is the Security Verifier as defined in RFC 9172. | BSL_31 (BPA Security Verifier) |
| BSL-ERR-1-2 | The BSL shall verify that every security block required by security policy at the current node is present in the bundle. | BSL_32 (Security Block Node) |
| BSL-ERR-1-3 | The BSL shall have the ability to inform the BPA that a block is unintelligible using Reason Code 8 as defined in RFC 9171. | BSL_33 (Reason Code 8) |
| BSL-ERR-2-0 | The BSL shall collect metrics indicating health and performance. | BSL_34 (Health Performance Metrics) |
| BSL-ERR-2-1 | The BSL shall write diagnostic information to a configurable logging system. | BSL_35 (Configurable Logging System) |
| BSL-ERR-3-0 | The BSL shall establish abort procedures to recover from security operation failures. | BSL_36 (Abort Procedures) |
| BSL-ERR-3-1 | The BSL shall report on the failure of any interface to perform a requested operation. | BSL_37 (Interface Failure) |
| BSL-ERR-3-2 | The BSL shall cease processing related security operations when there is a processing error associated with those operations. | BSL_38 (Processing Error) |
| BSL-ERR-4-0 | The BSL shall implement fault-injection interfaces. | BSL_39 (Fault Injection Interfaces) |
| BSL-BIN-1-0 | The BSL shall use a BPA interface to query node-specific BPA configuration items. | BSL_40 (Query BPA Items) |
| BSL-BIN-2-0 | The BSL shall use a BPA interface to query specific processing activities which are executed as part of processing a security operation. | BSL_41 (Query BPA Processing Activities) |
| BSL-BIN-3-0 | The BSL shall use a BPA interface to request the BPA to remove a bundle. | BSL_42 (Remove BPA Bundle) |
| BSL-BIN-4-0 | The BSL shall use a BPA interface to query what block types exist in a bundle. | BSL_43 (Query Existing Block Types) |
| BSL-BIN-4-1 | The BSL shall use a BPA interface to query what block numbers are present in a bundle. | BSL_44 (Query Block Numbers) |
| BSL-BIN-5-0 | The BSL shall use a BPA interface to request, from the BPA, block contents associated with a specific block. | BSL_45 (Request BPA Block Contents) |
| BSL-BIN-5-1 | The BSL shall use a BPA interface to query block-type-specific data in a piecewise, sequential manner. | BSL_46 (Query Block Specific Data) |
| BSL-BIN-6-0 | The BSL shall use a BPA interface to have the BPA add new blocks to a bundle. | BSL_47 (Add New BPA Blocks) |
| BSL-BIN-7-0 | The BSL shall use a BPA interface to have the BPA remove existing blocks from a bundle. | BSL_48 (Remove BPA Blocks) |
| BSL-BIN-8-0 | The BSL shall use a BPA interface to modify the block-type-specific data of non-security, non-primary blocks. | BSL_49 (Modify Block Specific Data) |
| BSL-BIN-9-0 | The BSL shall use a BPA interface to have a provided bundle status report transmitted by the BPA. | BSL_50 (Transmitting Bundle Report) |
| BSL-BIN-10-0 | The BSL shall use a BPA interface for encoding complex structures (such as Endpoint IDs). | BSL_51 (Encoding Complex Structures) |
| BSL-BIN-10-1 | The BSL shall use a BPA interface for decoding complex structures (such as Endpoint IDs). | BSL_52 (Decoding Complex Structures) |
| BSL-CIN-1-0 | The BSL crypto interface shall identify private key material indirectly. | BSL_53 (Identify Private Key) |
| BSL-CIN-1-2 | The BSL crypto interface shall retrieve certificates. | BSL_54 (Crypto Retrieving Certificates) |
| BSL-CIN-1-3 | The BSL crypto interface shall store certificates. | BSL_55 (Crypto Storing Certificates) |
| BSL-CIN-2-0 | The BSL crypto interface shall update statistics associated with keys. | BSL_56 (Crypto Updating Statistics) |
| BSL-CIN-3-0 | The BSL crypto interface shall process all cryptographic primitives (such as symmetric and asymmetric cipher operations, key agreement and key derivation, and random number generation). | BSL_57 (Processing Crypto Primitives) |
| BSL-PIN-1-0 | The BSL policy interface shall determine the security operations to be performed by the local BPA for a given set of blocks in a bundle. | BSL_58 (Policy For Local BPA) |
| BSL-PIN-1-1 | The BSL policy interface shall determine what security roles are performed by the local BPA for a given security operation. | BSL_59 (Policy Determining Security Roles) |
| BSL-PIN-1-2 | The BSL policy interface shall determine what security operations are expected to exist in a given bundle. | BSL_60 (Policy Determining Security Operations) |
| BSL-PIN-2-0 | The BSL policy interface shall query security context information for a given security operation. This information includes the security context identifier and parameters. | BSL_61 (Query Security Context) |
| BSL-PIN-2-1 | The BSL policy interface shall query what policy-provided parameters should override parameters present in security blocks. | BSL_62 (Query Policy Parameters) |
| BSL-PIN-3-0 | The BSL policy interface shall provide specific processing activities which are executed as part of processing a security operation. | BSL_63 (Specific Processing Activities) |
| BSL-TIN-1-0 | The BSL telemetry interface shall allow a host to query metrics from the BSL. | BSL_64 (Telemetry Host Query Metrics) |
| BSL-LIN-1-0 | The BSL logging interface associate logging levels with log entries, to include the levels of Critical, Error, Warning, Notification, and Debug. | BSL_65 (Logging Levels) |
| BSL-LIN-2-0 | The BSL logging interface annotate log entries with metadata related to time and process doing the logging. | BSL_66 (Log Entries With Metadata) |
| BSL-LIN-3-0 | The BSL logging interface shall truncate the length of individual log entries to stay within configured limits. | BSL_67 (Truncate Log Entries) |
| BSL-LIN-4-0 | The BSL logging interface shall determine whether an attempt to log an event succeeded. | BSL_68 (Successful Log Attempt) |
| BSL-SVC-1-0 | The BSL shall request from all policy providers the specific policy associated with a bundle at the current node. | BSL_69 (Policy At Current Node) |
| BSL-SVC-1-1 | The BSL shall validate and prioritize security policy statements before applying them to a bundle. | BSL_70 (Validating Policy Statements) |
| BSL-SVC-2-0 | After the BSL validates security policy for a bundle, the BSL shall coordinate functions of the associated security context to apply that rule. | BSL_71 (Coordinate Functions) |
| BSL-SVC-3-0 | The BSL shall perform the processing action(s) provided by a security policy rule when a security processing failure occurs. | BSL_72 (Processing Actions From Failure) |
| BSL-CFG-1-0 | The BSL shall establish a catalog of settings that users may configure at run-time. | BSL_73 (Settings Catalog) |
| BSL-CFG-2-0 | The BSL shall allow parameterization via configuration files and environment variables. | BSL_74 (Parameterization Via Configuration) |
| BSL-CFG-3-0 | The BSL shall embed build information into runtime artifacts | BSL_75 (Embedding Information) |
| BSL-CFG-4-0 | The BSL shall embed version into the executable, and be identified when running the application. | BSL_76 (Embedding Version) |
| BSL-CFG-5-0 | The BSL shall provide a catalog of configurable compile-time items. | BSL_77 (Compile Time Catalog) |
| BSL-CFG-6-0 | The BSL shall provide a catalog of configurable run-time items. | BSL_78 (Run Time Catalog) |
| BSL-CFG-7-0 | The BSL shall support parameterization by compiler command line arguments and configuration files. | BSL_79 (Compiler Command Line Arguments) |
| BSL-PFR-1-0 | The BSL shall compile using strict compiler flags for error and warning checks. | BSL_80 (Strict Compiler Flags) |
| BSL-PFR-2-0 | The BSL telemetry interfaces shall support asynchronous operation. | BSL_81 (Supporting Asynchronous Operations) |
| BSL-SEC-1-0 | The BSL shall delegate all cryptographic functions to an external library accessibly only through the crypto interface. | BSL_82 (Delegate Crypto Functions) |
| BSL-SEC-2-0 | The BSL shall delegate the handling and storage of all cryptographic key material to external libraries. | BSL_83 (Delegate Handling And Storage) |
| BSL-ADP-1-0 | The BSL shall provide an API to register security contexts. | BSL_84 (Register Security Contexts) |
| BSL-ADP-2-0 | The BSL shall provide an API to register policy providers. | BSL_85 (Register Policy Providers) |
| BSL-ADP-3-0 | The BSL shall use an abstraction layer to avoid OS-specific operations. | BSL_86 (Use Abstraction Layer) |
| BSL-ADP-4-0 | The BSL crypto function interface shall be stateless. | BSL_87 (Stateless Crypto Function) |
No new requirements were implemented in this release (v1.1).
Specific issues with bug label and the Test Case ID that will be used to verify the RLI. Note that "Pass" for verification status implies all tests passed for that RLI.
| Ticket | Test Case ID | Security Related | Verification Status |
|---|---|---|---|
| #123 Move log writer thread into host/Mock BPA | customer required | no | Pass |
| #133 Support memory management through callbacks | customer required | no | Pass |
| #134 Add ifndef checks to CHK* #defines | customer required | no | Pass |
| #151 Fix BCB verifier role | BSL_31 (BPA Security Verifier) | no | Pass |
| #197 Fix finalize call in BCB decrypt | BSL_28 (Supporting BCB AES GCM) | no | Pass |
The RLIs marked with "customer required" are a customer need and therefore not marked by a requirement or formal test case. However, these RLIs are still vital to the release.
Specific issues with enhancement label. The requirement column indicates the requirement that the improvement item improves upon. Note that these are technically not covered by a test case or specific requirement because they are not external; however, they are covered by a regression test. In that case, the requirement associated with each RLI is a general requirement from the RTM.
| Ticket | Test Case ID | Requirement | Verification Status |
|---|---|---|---|
| #47 Mock BPA add warnings about transmitted or received bundle constraints | BSL_65 (Logging Levels), BSL_35 (Configurable Logging System) | BSL-ERR-2-1 | Pass |
| #61 get_target_block_id will not work if there are multiple blocks of target type | BSL_35 (Configurable Logging System) | BSL-ERR-2-1 | Pass |
| #76 Create Init functions for structs in unit tests | BSL_69 (Policy At Current Node) | BSL-SVC-1-0 | Pass |
| #81 BSLP_PolicyProvider_t Should have an Init/API | BSL_74 (Parameterization Via Configuration) | BSL-CFG-2-0 | Pass |
| #109 Refactor JSON to only parse file(s) once in MockBPA | BSL_74 (Parameterization Via Configuration) | BSL-CFG-2-0 | Pass |
| #110 Better managing of keys in Crypto Library key registry | BSL_53 (Identify Private Key) | BSL-CIN-1-0 | Pass |
| #135 Add option for integration into ION | BSL_86 (Use Abstraction Layer) | BSL-ADP-3-0 | Pass |
Specific issues with sustainment label.
| Ticket | Test Case ID | Verification Status |
|---|---|---|
| #67 SHA Variant should be uint64_t, not size_t | BSL_61 (Query Security Context) | Pass |
| #152 BCB source should set sec block number in sec oper (backend sec ctx) | BSL_28 (Supporting BCB AES GCM) | Pass |
| #153 Update MockBPA tests to send to overlayer socket; update test policy in appin loc | customer required | Pass |
| #164 Move JSON policy parsing out of Mock BPA to Sample PP | BSL_74 (Parameterization Via Configuration) | Pass |
Issues considered to be "development support", i.e., part of the Mock BPA and not BSL directly and therefore no associated test case (see notes below). These all have the sustainment label.
| Ticket | Test Case ID |
|---|---|
| #24 Remove block count limit in mock BPA | N/A |
| #36 bsl_mock_encode_bundle() should not be sorting blocks | N/A |
| #122 Better handling of Valgrind false-positive | N/A |
| #125 RPM packaging discrepancies | N/A |
| #130 Move test keys out of source tree | All Mock BPA tests |
- #24 involved a change in the Mock BPA to remove an upper limit on blocks allowed in a single bundle, and while the Mock BPA tests still pass, there is no direct test case exercising this
- This is also true for #36, which involved a change in the Mock BPA to move block ordering outside of encoding function.
- #122 is a "closed as not planned" RLI, i.e., determined to no longer be an issue so no need to test
- #125 was for the switch to Tito for building the RPM package, so no direct test case
- #130 involved moving test case encryption keys out of the
srcdirectory to themock-bpa-testdirectory, so all Mock BPA tests exercise this change
There is no explicit relationship between every unit test function or Mock BPA test function and a formal test case. Thus, the whole set of unit test and Mock BPA test can be considered regression tests, as they all must pass for a change to be accepted and merged into the codebase. This means most formal test cases reference some in-source test function, but not all test functions are mandated by a formal test case or requirement. The following list is therefore all the Test Cases from the Test Specification that are a unit test or mock BPA test:
- BSL_2 (Deterministic Processing
- BSL_3 (Security Block Inclusion)
- BSL_5 (Adding Block To Bundle)
- BSL_7 (Removing Security Operations)
- BSL_9 (Inform BPA)
- BSL_10 (Reading Non Security Block)
- BSL_11 (Updating Block Contents)
- BSL_12 (Encode BTSD)
- BSL_13 (Decode BTSD)
- BSL_14 (Node Security Role)
- BSL_17 (BPA Deleting Block)
- BSL_19 (BPA Deleting Bundle)
- BSL_20 (Bundle Status Report)
- BSL_22 (Success Cryptographic Function)
- BSL_23 (RFC Compliant Cryptographs)
- BSL_24 (Security Block Result Fields)
- BSL_26 (Retrieving Key Parameters)
- BSL_27 (Supporting Security Contents)
- BSL_28 (Supporting BCB AES GCM)
- BSL_29 (Supporting BIB HMAC SHA)
- BSL_31 (BPA Security Verifier)
- BSL_32 (Security Block Node)
- BSL_33 (Reason Code 8)
- BSL_36 (Abort Procedures)
- BSL_37 (Interface Failure)
- BSL_38 (Processing Error)
- BSL_40 (Query BPA Items)
- BSL_41 (Query BPA Processing Activities)
- BSL_42 (Remove BPA Bundle)
- BSL_43 (Query Existing Block Types)
- BSL_44 (Query Block Numbers)
- BSL_45 (Request BPA Block Contents)
- BSL_47 (Add New BPA Blocks)
- BSL_48 (Remove BPA Blocks)
- BSL_49 (Modify Block Specific Data)
- BSL_51 (Encoding Complex Structures)
- BSL_52 (Decoding Complex Structures)
- BSL_53 (Identify Private Key)
- BSL_56 (Crypto Updating Statistics)
- BSL_58 (Policy For Local BPA)
- BSL_59 (Policy Determining Security Roles)
- BSL_60 (Policy Determining Security Operations)
- BSL_61 (Query Security Context)
- BSL_62 (Query Policy Parameters)
- BSL_63 (Specific Processing Activities)
- BSL_64 (Telemetry Host Query Metrics)
- BSL_66 (Log Entries With Metadata)
- BSL_69 (Policy At Current Node)
- BSL_70 (Validating Policy Statements)
- BSL_71 (Coordinate Functions)
- BSL_72 (Processing Actions From Failure)