From 1857c4978f482e2043c9b046724ebe16e7baee42 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Fri, 17 Jul 2026 10:42:42 -0400 Subject: [PATCH 01/13] Be more strict about public header files to install --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 235 +++++++++++++++++++++++++-------------------- 2 files changed, 133 insertions(+), 104 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4bae99fe..2c57e121 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ Institute of Technology, sponsored by the United States Government under the prime contract 80NM0018D0004 between the Caltech and NASA under subcontract 1700763. ]] -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.23) message(STATUS "Build mode ${CMAKE_BUILD_TYPE}") option(BUILD_LIB "Build the library itself" ON) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cd3b0472..28363e2b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -25,18 +25,24 @@ configure_file(bsl/BSLConfig.c.in bsl/BSLConfig.c @ONLY) # Frontend library add_library(bsl_front) -target_sources(bsl_front PUBLIC - ${CMAKE_CURRENT_BINARY_DIR}/bsl/BSLConfig.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/BPSecLib_Private.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/BPSecLib_Public.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/front/Data.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/front/SeqReader.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/front/SeqWriter.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/front/TextUtil.h -) -target_sources(bsl_front PRIVATE - ${CMAKE_CURRENT_BINARY_DIR}/bsl/BSLConfig.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/front/Data.c +target_sources(bsl_front + PUBLIC + FILE_SET public_headers + TYPE HEADERS + BASE_DIRS + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + FILES + ${CMAKE_CURRENT_BINARY_DIR}/bsl/BSLConfig.h + bsl/BPSecLib_Private.h + bsl/BPSecLib_Public.h + bsl/front/Data.h + bsl/front/SeqReader.h + bsl/front/SeqWriter.h + bsl/front/TextUtil.h + PRIVATE + bsl/BSLConfig.c + bsl/front/Data.c ) set_target_properties(bsl_front @@ -52,11 +58,14 @@ target_include_directories(bsl_front PUBLIC # Crypto and Keystore library add_library(bsl_crypto) -target_sources(bsl_crypto PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/crypto/CryptoInterface.h -) -target_sources(bsl_crypto PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/crypto/CryptoInterface.c +target_sources(bsl_crypto + PUBLIC + FILE_SET public_headers + TYPE HEADERS + FILES + bsl/crypto/CryptoInterface.h + PRIVATE + bsl/crypto/CryptoInterface.c ) set_target_properties(bsl_crypto PROPERTIES @@ -65,6 +74,7 @@ set_target_properties(bsl_crypto ) target_link_libraries(bsl_crypto PUBLIC bsl_front bsl_dynamic) target_link_libraries(bsl_crypto PRIVATE MLIB::mlib) +target_link_libraries(bsl_crypto PRIVATE qcbor::qcbor) target_link_libraries(bsl_crypto PRIVATE OpenSSL::Crypto) if(TARGET valgrind::valgrind) find_path(VALGRIND_INCLUDE_DIR NAMES valgrind/memcheck.h) @@ -76,14 +86,21 @@ endif(TARGET valgrind::valgrind) # Default Security Context library add_library(bsl_default_sc) -target_sources(bsl_default_sc PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/default_sc/DefaultSecContext.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/default_sc/DefaultSecContext_Private.h -) -target_sources(bsl_default_sc PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/default_sc/DefaultSecContext.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/default_sc/BCB_AES_GCM.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/default_sc/BIB_HMAC_SHA2.c +target_sources(bsl_default_sc + PUBLIC + FILE_SET public_headers + TYPE HEADERS + FILES + bsl/default_sc/DefaultSecContext.h + PRIVATE + FILE_SET private_headers + TYPE HEADERS + FILES + bsl/default_sc/DefaultSecContext_Private.h + PRIVATE + bsl/default_sc/DefaultSecContext.c + bsl/default_sc/BCB_AES_GCM.c + bsl/default_sc/BIB_HMAC_SHA2.c ) set_target_properties(bsl_default_sc PROPERTIES @@ -95,13 +112,20 @@ target_link_libraries(bsl_default_sc PRIVATE bsl_crypto) # COSE Security Context library add_library(bsl_cose_sc) -target_sources(bsl_cose_sc PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/cose_sc/CoseContext.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/cose_sc/CoseMsg.h -) -target_sources(bsl_cose_sc PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/cose_sc/CoseContext.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/cose_sc/CoseMsg.c +target_sources(bsl_cose_sc + PUBLIC + FILE_SET public_headers + TYPE HEADERS + FILES + bsl/cose_sc/CoseContext.h + PRIVATE + FILE_SET private_headers + TYPE HEADERS + FILES + bsl/cose_sc/CoseMsg.h + PRIVATE + bsl/cose_sc/CoseContext.c + bsl/cose_sc/CoseMsg.c ) set_target_properties(bsl_cose_sc PROPERTIES @@ -111,17 +135,25 @@ set_target_properties(bsl_cose_sc target_link_libraries(bsl_cose_sc PUBLIC bsl_front) target_link_libraries(bsl_cose_sc PUBLIC bsl_dynamic) # for CBOR API target_link_libraries(bsl_cose_sc PRIVATE bsl_crypto) -target_link_libraries(bsl_cose_sc PUBLIC MLIB::mlib) +target_link_libraries(bsl_cose_sc PRIVATE MLIB::mlib) +target_link_libraries(bsl_cose_sc PRIVATE qcbor::qcbor) # Example Policy Provider library add_library(bsl_sample_pp) -target_sources(bsl_sample_pp PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/sample_pp/SamplePolicyProvider.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/sample_pp/PolicyParser.h -) -target_sources(bsl_sample_pp PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/sample_pp/SamplePolicyProvider.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/sample_pp/PolicyParser.c +target_sources(bsl_sample_pp + PUBLIC + FILE_SET public_headers + TYPE HEADERS + FILES + bsl/sample_pp/SamplePolicyProvider.h + PRIVATE + FILE_SET private_headers + TYPE HEADERS + FILES + bsl/sample_pp/PolicyParser.h + PRIVATE + bsl/sample_pp/SamplePolicyProvider.c + bsl/sample_pp/PolicyParser.c ) set_target_properties(bsl_sample_pp PROPERTIES @@ -137,27 +169,34 @@ target_link_libraries(bsl_sample_pp PRIVATE Jansson::Jansson) # Dynamic backend library add_library(bsl_dynamic) -target_sources(bsl_dynamic PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/AbsSecBlock.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/CBOR.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/IdValPair.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/PublicInterfaceImpl.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/SeqReadWrite.h -) -target_sources(bsl_dynamic PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/AbsSecBlock.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/CBOR.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/HostInterface.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/IdValPair.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/PublicInterfaceImpl.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/PolicyProvider.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/SecOperation.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/SecurityAction.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/SecurityActionSet.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/SecurityContext.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/TelemetryCounters.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/TextUtil.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/dynamic/SeqReadWrite.c +target_sources(bsl_dynamic + PUBLIC + FILE_SET public_headers + TYPE HEADERS + FILES + bsl/dynamic/AbsSecBlock.h + bsl/dynamic/CBOR.h + bsl/dynamic/IdValPair.h + bsl/dynamic/SeqReadWrite.h + PRIVATE + FILE_SET private_headers + TYPE HEADERS + FILES + bsl/dynamic/PublicInterfaceImpl.h + PRIVATE + bsl/dynamic/AbsSecBlock.c + bsl/dynamic/CBOR.c + bsl/dynamic/HostInterface.c + bsl/dynamic/IdValPair.c + bsl/dynamic/PublicInterfaceImpl.c + bsl/dynamic/PolicyProvider.c + bsl/dynamic/SecOperation.c + bsl/dynamic/SecurityAction.c + bsl/dynamic/SecurityActionSet.c + bsl/dynamic/SecurityContext.c + bsl/dynamic/TelemetryCounters.c + bsl/dynamic/TextUtil.c + bsl/dynamic/SeqReadWrite.c ) set_target_properties(bsl_dynamic PROPERTIES @@ -165,53 +204,54 @@ set_target_properties(bsl_dynamic SOVERSION ${CMAKE_PROJECT_VERSION_MAJOR} ) target_link_libraries(bsl_dynamic PUBLIC bsl_front) +# remaining libraries for internal BSL use, not BPA use target_link_libraries(bsl_dynamic PUBLIC MLIB::mlib) target_link_libraries(bsl_dynamic PUBLIC qcbor::qcbor) add_library(bsl_mock_bpa) -#target_compile_options(bsl_mock_bpa PRIVATE -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls) -target_sources( - bsl_mock_bpa PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/log.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/agent.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/bundle.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/crc.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/eid.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/eidpat.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/encode.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/decode.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/key_registry.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/ctr.h - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/MockBPA.h -) -target_sources( - bsl_mock_bpa PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/log.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/agent.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/bundle.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/crc.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/eid.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/eidpat.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/encode.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/decode.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/key_registry.c - ${CMAKE_CURRENT_SOURCE_DIR}/bsl/mock_bpa/ctr.c +target_sources(bsl_mock_bpa + PUBLIC + FILE_SET public_headers + TYPE HEADERS + FILES + bsl/mock_bpa/log.h + bsl/mock_bpa/agent.h + bsl/mock_bpa/bundle.h + bsl/mock_bpa/crc.h + bsl/mock_bpa/eid.h + bsl/mock_bpa/eidpat.h + bsl/mock_bpa/encode.h + bsl/mock_bpa/decode.h + bsl/mock_bpa/key_registry.h + bsl/mock_bpa/ctr.h + bsl/mock_bpa/MockBPA.h + PRIVATE + bsl/mock_bpa/log.c + bsl/mock_bpa/agent.c + bsl/mock_bpa/bundle.c + bsl/mock_bpa/crc.c + bsl/mock_bpa/eid.c + bsl/mock_bpa/eidpat.c + bsl/mock_bpa/encode.c + bsl/mock_bpa/decode.c + bsl/mock_bpa/key_registry.c + bsl/mock_bpa/ctr.c ) set_target_properties(bsl_mock_bpa PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${CMAKE_PROJECT_VERSION_MAJOR} ) +target_link_libraries(bsl_mock_bpa PUBLIC bsl_sample_pp bsl_default_sc bsl_cose_sc) target_link_libraries(bsl_mock_bpa PUBLIC MLIB::mlib) target_link_libraries(bsl_mock_bpa PUBLIC qcbor::qcbor) target_link_libraries(bsl_mock_bpa PRIVATE Jansson::Jansson) -target_link_libraries(bsl_mock_bpa PUBLIC bsl_front bsl_dynamic bsl_default_sc bsl_cose_sc bsl_sample_pp) +target_link_libraries(bsl_mock_bpa PUBLIC Threads::Threads) if(BUILD_MOCK_BPA AND NOT BUILD_FUZZING) add_executable(bsl-mock-bpa) target_sources(bsl-mock-bpa PRIVATE bsl/mock_bpa/mock_bpa.c) target_link_libraries(bsl-mock-bpa PUBLIC bsl_mock_bpa bsl_crypto) - target_link_libraries(bsl-mock-bpa PUBLIC Threads::Threads) # Installation config install( @@ -250,17 +290,6 @@ install( NAMELINK_COMPONENT devel ARCHIVE COMPONENT devel -) -install( - DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bsl/" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/bsl" - COMPONENT devel - FILE_PERMISSIONS OWNER_READ GROUP_READ WORLD_READ - FILES_MATCHING PATTERN "*.h" -) -install( - FILES "${CMAKE_CURRENT_BINARY_DIR}/bsl/BSLConfig.h" - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/bsl" - COMPONENT devel - PERMISSIONS OWNER_READ GROUP_READ WORLD_READ + FILE_SET public_headers + COMPONENT devel ) From 7fd7367be529116fde0fa019d45e1d6b8dba0f85 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Fri, 17 Jul 2026 10:51:47 -0400 Subject: [PATCH 02/13] Fix public header file lists. Move jansson use out of header. --- src/CMakeLists.txt | 18 +++++++++--------- src/bsl/sample_pp/PolicyParser.c | 2 ++ src/bsl/sample_pp/PolicyParser.h | 2 -- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 28363e2b..45ed53e5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -36,6 +36,7 @@ target_sources(bsl_front ${CMAKE_CURRENT_BINARY_DIR}/bsl/BSLConfig.h bsl/BPSecLib_Private.h bsl/BPSecLib_Public.h + bsl/front/BSLMemory.h bsl/front/Data.h bsl/front/SeqReader.h bsl/front/SeqWriter.h @@ -143,17 +144,13 @@ add_library(bsl_sample_pp) target_sources(bsl_sample_pp PUBLIC FILE_SET public_headers - TYPE HEADERS - FILES - bsl/sample_pp/SamplePolicyProvider.h - PRIVATE - FILE_SET private_headers TYPE HEADERS FILES bsl/sample_pp/PolicyParser.h + bsl/sample_pp/SamplePolicyProvider.h PRIVATE - bsl/sample_pp/SamplePolicyProvider.c bsl/sample_pp/PolicyParser.c + bsl/sample_pp/SamplePolicyProvider.c ) set_target_properties(bsl_sample_pp PROPERTIES @@ -177,6 +174,9 @@ target_sources(bsl_dynamic bsl/dynamic/AbsSecBlock.h bsl/dynamic/CBOR.h bsl/dynamic/IdValPair.h + bsl/dynamic/SecOperation.h + bsl/dynamic/SecurityAction.h + bsl/dynamic/SecurityActionSet.h bsl/dynamic/SeqReadWrite.h PRIVATE FILE_SET private_headers @@ -214,16 +214,16 @@ target_sources(bsl_mock_bpa FILE_SET public_headers TYPE HEADERS FILES - bsl/mock_bpa/log.h bsl/mock_bpa/agent.h bsl/mock_bpa/bundle.h bsl/mock_bpa/crc.h + bsl/mock_bpa/ctr.h + bsl/mock_bpa/decode.h bsl/mock_bpa/eid.h bsl/mock_bpa/eidpat.h bsl/mock_bpa/encode.h - bsl/mock_bpa/decode.h bsl/mock_bpa/key_registry.h - bsl/mock_bpa/ctr.h + bsl/mock_bpa/log.h bsl/mock_bpa/MockBPA.h PRIVATE bsl/mock_bpa/log.c diff --git a/src/bsl/sample_pp/PolicyParser.c b/src/bsl/sample_pp/PolicyParser.c index b2542bd2..ea1e5012 100644 --- a/src/bsl/sample_pp/PolicyParser.c +++ b/src/bsl/sample_pp/PolicyParser.c @@ -25,6 +25,8 @@ #include "bsl/cose_sc/CoseContext.h" #include "bsl/default_sc/DefaultSecContext.h" +#include + #include #include diff --git a/src/bsl/sample_pp/PolicyParser.h b/src/bsl/sample_pp/PolicyParser.h index 030c45b1..e863c471 100644 --- a/src/bsl/sample_pp/PolicyParser.h +++ b/src/bsl/sample_pp/PolicyParser.h @@ -34,8 +34,6 @@ #include "bsl/BPSecLib_Private.h" #include "bsl/default_sc/rfc9173.h" -#include - #include #include From b4569c23eb0380ce0dca0e69930fb3bb6c48e66a Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Fri, 17 Jul 2026 11:37:05 -0400 Subject: [PATCH 03/13] Move common check-install into build.sh --- .github/workflows/packages.yaml | 20 +------------------ build.sh | 34 +++++++++++++++++++++++++++++++-- lib-user-test/main.c | 4 ++++ src/CMakeLists.txt | 1 + 4 files changed, 38 insertions(+), 21 deletions(-) diff --git a/.github/workflows/packages.yaml b/.github/workflows/packages.yaml index 7d7b899c..529ede77 100644 --- a/.github/workflows/packages.yaml +++ b/.github/workflows/packages.yaml @@ -112,26 +112,8 @@ jobs: sparse-checkout: | mock-bpa-test lib-user-test - - name: Show pkg-config - env: - PKGS: bsl bsl-sample-pp - run: | - echo "Provides:" - pkg-config --print-provides ${PKGS} - echo "Requires:" - pkg-config --print-requires ${PKGS} - echo -n "CFlags: " - pkg-config --cflags ${PKGS} - echo -n "Libs: " - pkg-config --libs ${PKGS} - name: Trial build - env: - PKGS: bsl bsl-sample-pp - run: | - mkdir build - gcc -c $(pkg-config --cflags ${PKGS}) -o build/example.o lib-user-test/main.c - gcc $(pkg-config --libs ${PKGS}) -o build/example build/example.o - ./build/example + run: ./build.sh check-install - name: Mock BPA tests run: | pip3 install -r mock-bpa-test/requirements.txt diff --git a/build.sh b/build.sh index 3f1f1ee1..a16ef3ac 100755 --- a/build.sh +++ b/build.sh @@ -39,6 +39,7 @@ function usage { echo " apply-format - Apply format to all source code" echo " apply-license - Apply/update license preamble to files" echo " check - Run unit tests" + echo " check-install - Build a test executable linked to BSL" echo " clean - Clean build artifacts" echo " deps - Build dependend libraries" echo " docs - Build HTML and/or PDF doxygen" @@ -56,7 +57,8 @@ function cmd_check_format { } function cmd_apply_format { - exec ./resources/apply_format.sh + shift + exec ./resources/apply_format. "$@" } function cmd_apply_license { @@ -68,6 +70,31 @@ function cmd_check { ctest --test-dir ${BUILDDIR} --output-on-failure "$@" } +function cmd_check_install { + cd "${SELFDIR}" + if [[ -d testroot ]] + then + export PKG_CONFIG_PATH=$(find testroot/ -type d -name pkgconfig | tr '\n' ':') + PREFIX="--define-variable=prefix=testroot/usr" + echo "Using prefix: ${PREFIX}" + fi + PKGS="bsl bsl-sample-pp" + + echo "Provides:" + pkg-config --print-provides ${PKGS} + echo "Requires:" + pkg-config --print-requires ${PKGS} + echo -n "CFlags: " + pkg-config --cflags ${PKGS} ${PREFIX} + echo -n "Libs: " + pkg-config --libs ${PKGS} ${PREFIX} + + mkdir -p build + gcc -c -o build/example.o lib-user-test/main.c $(pkg-config --cflags ${PKGS} ${PREFIX}) + gcc -o build/example build/example.o $(pkg-config --libs ${PKGS} ${PREFIX}) + ./build/example +} + function cmd_clean { rm -rf build testroot deps/build } @@ -184,7 +211,7 @@ case "$1" in cmd_check_format ;; apply-format) - cmd_apply_format + cmd_apply_format "$@" ;; apply-license) cmd_apply_license @@ -192,6 +219,9 @@ case "$1" in check) cmd_check "$@" ;; + check-install) + cmd_check_install + ;; clean) cmd_clean ;; diff --git a/lib-user-test/main.c b/lib-user-test/main.c index fe23752a..eb8b8725 100644 --- a/lib-user-test/main.c +++ b/lib-user-test/main.c @@ -4,6 +4,10 @@ #include #include +#include +#include +#include +#include int main(int argc, char *argv[]) { diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 45ed53e5..4e028d6e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -93,6 +93,7 @@ target_sources(bsl_default_sc TYPE HEADERS FILES bsl/default_sc/DefaultSecContext.h + bsl/default_sc/rfc9173.h PRIVATE FILE_SET private_headers TYPE HEADERS From b41f561dab7cca623aefd66224a8e8f342b66c11 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Fri, 17 Jul 2026 11:41:08 -0400 Subject: [PATCH 04/13] Check symbols on bsl_cose_sc --- .github/workflows/build-test.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-test.yaml b/.github/workflows/build-test.yaml index 68fdec3d..df964b0f 100644 --- a/.github/workflows/build-test.yaml +++ b/.github/workflows/build-test.yaml @@ -96,9 +96,11 @@ jobs: run: | ./check_symbols.py bsl_front bsl_dynamic --prefix bsl_ ./check_symbols.py bsl_crypto --prefix bsl_ bslb_ - ./check_symbols.py bsl_default_sc --prefix bslx_ + ./check_symbols.py bsl_default_sc bsl_cose_sc --prefix bslx_ ./check_symbols.py bsl_sample_pp --prefix bslp_ ./check_symbols.py bsl_mock_bpa --prefix MockBPA_ bsl_eidpat_ bsl_mock_ mock_bpa_ + - name: Trial build + run: ./build.sh check-install - name: Test run: ./build.sh check - name: Collect coverage From 3bfa87c697e36efd7e0b0c59f4c46058ed056cc0 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Fri, 17 Jul 2026 11:44:27 -0400 Subject: [PATCH 05/13] Do not clobber existing variable --- build.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/build.sh b/build.sh index a16ef3ac..d121e76a 100755 --- a/build.sh +++ b/build.sh @@ -75,8 +75,10 @@ function cmd_check_install { if [[ -d testroot ]] then export PKG_CONFIG_PATH=$(find testroot/ -type d -name pkgconfig | tr '\n' ':') - PREFIX="--define-variable=prefix=testroot/usr" - echo "Using prefix: ${PREFIX}" + PKG_PREFIX="--define-variable=prefix=testroot/usr" + echo "Using prefix: ${PKG_PREFIX}" + else + PKG_PREFIX="" fi PKGS="bsl bsl-sample-pp" @@ -85,13 +87,13 @@ function cmd_check_install { echo "Requires:" pkg-config --print-requires ${PKGS} echo -n "CFlags: " - pkg-config --cflags ${PKGS} ${PREFIX} + pkg-config ${PKG_PREFIX} --cflags ${PKGS} echo -n "Libs: " - pkg-config --libs ${PKGS} ${PREFIX} + pkg-config ${PKG_PREFIX} --libs ${PKGS} mkdir -p build - gcc -c -o build/example.o lib-user-test/main.c $(pkg-config --cflags ${PKGS} ${PREFIX}) - gcc -o build/example build/example.o $(pkg-config --libs ${PKGS} ${PREFIX}) + gcc -c -o build/example.o lib-user-test/main.c $(pkg-config ${PKG_PREFIX} --cflags ${PKGS}) + gcc -o build/example build/example.o $(pkg-config ${PKG_PREFIX} --libs ${PKGS}) ./build/example } From 713545538e3de00ed7813bb858a4aaa7f6bc2a15 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Fri, 17 Jul 2026 12:10:31 -0400 Subject: [PATCH 06/13] Clean up README for new structures --- README.md | 77 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 2a07cf33..cba0b7cd 100644 --- a/README.md +++ b/README.md @@ -32,29 +32,32 @@ The BSL exposes an interface via C header files (under `src`), and contains an e The following are the major parts of this project. -**Note.** The BSL API (both Public and Private) lives at the top level `src` directory. -Example concrete modules implementations are found in subdirectories of it. - -``` +```sh BSL/ ├── build.sh # Top-level build utility script ├── cmake/ # Additional CMake files ├── deps/ # Third-party dependencies ├── docs/ # Doxygen pages and templates -├── mock-bpa-test/ # Full BSL test/example using Mock BPA -├── pkg/ # Material for building RPMs +├── pkg/ # Material for building RPMs and pkg-config ├── resources/ # Additional helper util scripts ├── src/ # Source code, top level is header-only API -├── src/backend # Implementation of example dynamic backend +├── src/front # Implementation of BSL frontend +├── src/dynamic # Implementation of dynamic backend +├── src/sample_pp # Implementation of the example policy provider +├── src/default_sc # Implementation of Default Security Contexts (RFC 9173) +├── src/cose_sc # Implementation of COSE Context +├── src/crypto # Implementation of BSL crypto library and key store interface ├── src/mock_bpa # Implementation of example Mock BPA -├── src/policy_provider # Implementation of the example policy provider -├── src/security_context # Implementation of RFC 9173 (Default Sec Context) -└── test/ # Unit tests +├── test/ # Unit tests +├── mock-bpa-test/ # Full BSL test/example using Mock BPA +└── lib-user-test/ # Test an installation of the BSL for building ``` ## Development Requirements -_Note!_ BSL uses **Red Hat Enterprise Linux (RHEL 9)** as the target build environment. Ubuntu is frequently used by developers, but not supported as an official target. +> [!NOTE] +> BSL uses **Red Hat Enterprise Linux (RHEL 9)** as the target build environment. +> Ubuntu is frequently used by developers, and for CI jobs, but not supported as an official target. The following should be installable by the system package manager: @@ -66,15 +69,17 @@ _Optional: To Construct Docs, etc..._ ## Building BSL -**Note.** `build.sh` is the BSL general build script, that mostly serves as a wrapper for CMake commands. Most actions to configure, build, and deploy BSL work through this script. -``` -# To view available subcommands +The top `build.sh` is the BSL general build script, that mostly serves as a wrapper for CMake commands. +Most actions to configure, build, and deploy BSL work through this script. + +To view available subcommands of the script: +```sh ./build.sh help ``` To clone submodules, build, and run the unit tests: -``` +```sh # Clone dependencies git submodule update --init --recursive @@ -93,14 +98,17 @@ git submodule update --init --recursive This will take about a minute to build and run the unit tests, there should be 100% success. -Note: On earlier versions of CMake (<3.20), `./build.sh check` target may not run correctly. +> [!NOTE] +> On earlier versions of CMake (<3.20), `./build.sh check` target may not run correctly. #### Optional Additional Build Targets Code Coverage -``` + +```sh ./build.sh coverage ``` + > [!NOTE] > The coverage target requires that the build prepare stage was run with the CLI flag `-DBUILD_COVERAGE=ON`: > ``` @@ -109,26 +117,43 @@ Code Coverage > For a full list of optional build flags, see [section 3.4.1 of the BSL product guide](https://nasa-ammos.github.io/BSL-docs/product-guide/html/index.html#sec-proc-build-devel-cmake). The output HTML can be opened in a browser using: -``` +```sh xdg-open build/default/coverage-html/index.html ``` Doxygen Documentation -``` +```sh ./build.sh prep -DBUILD_DOCS_API=ON ./build.sh docs ``` The output HTML can be opened in a browser using: -``` +```sh xdg-open build/default/docs/api/html/index.html ``` To check for misspelling in the Doxygen output use the following, substituting the word/phrase you are looking for in the grep command -``` +```sh xmlstarlet tr build/default/docs/api/xml/combine.xslt build/default/docs/api/xml/index.xml | xmlstarlet tr docs/api/spellcheck.xsl | cat -n | grep -E 'bsl' ``` +## Installing BSL + +After building, the BSL libraries, headers, and build support files (CMake and pkg-config) can be installed using: +```sh +./build.sh install +``` + +> [!NOTE] +> The default install script uses environment `DESTDIR=testroot` and `PREFIX=/usr` which installs files under `./testroot/usr/...` paths. +> This allows installing without special permissions on the host. +> Alternatively, the install can be used with different environment such as `DESTDIR=/` to install to system paths. + +After install, a trial executable which simply links against the installed BSL using pkg-config discovery can be tested using: +```sh +./build.sh check-install +``` + ## Testing with the Mock BPA The Mock BPA demonstrates how a BPA may interact with the BSL, it is found in `src/mock_bpa`. @@ -138,32 +163,32 @@ Details of the Mock BPA are found in the Doxygen documentation. #### Mock BPA System Test To execute the Mock BPA tests of the BSL libraries as-built, first prepare a Pythong virtualenv using: -``` +```sh python3 -m venv venv source venv/bin/activate pip install -r mock-bpa-test/requirements.txt ``` Then execute the test suite using: -``` +```sh python3 -m pytest mock-bpa-test --log-cli-level=info ``` ### Running with Wireshark and Local Sockets -``` +```sh wireshark -i lo -f 'port 4556 or port 24556' -k ``` Start the mock BPA with local sockets: -``` +```sh ./build.sh ./build.sh install ./build.sh run bsl-mock-bpa -u localhost:4556 -r localhost:14556 -o localhost:24556 -a localhost:34556 ``` Send a trial bundle from the underlayer, which is taken from Appendix A.1.4 of RFC 9173. -``` +```sh echo 9f88070000820282010282028202018202820201820018281a000f4240850b0200005856810101018202820201828201078203008181820158403bdc69b3a34a2b5d3a8554368bd1e808f606219d2a10a846eae3886ae4ecc83c4ee550fdfb1cc636b904e2f1a73e303dcd4b6ccece003e95e8164dcc89a156e185010100005823526561647920746f2067656e657261746520612033322d62797465207061796c6f6164ff | xxd -r -p | socat stdio udp-sendto:localhost:4556,pf=ip6,sourceport=14556 | xxd -p ``` Alternatively for the overlayer app socket use `socat stdio unix-sendto:/tmp/foo.sock` instead. From f37b13ef629c8469e90d0dc6cf7c40b2941830f6 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Fri, 17 Jul 2026 12:17:04 -0400 Subject: [PATCH 07/13] More README touchup --- README.md | 19 ++++++++++++------- mock-bpa-test/README.md | 8 -------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index cba0b7cd..0ab14804 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,6 @@ subcontract 1700763. # The NASA AMMOS BPSec Library (BSL) -![example workflow](https://github.com/github/docs/actions/workflows/build-test.yml/badge.svg) - The BPSec Library (BSL) is an implementation of *Bundle Protocol Security* as specified in [RFC 9172](https://datatracker.ietf.org/doc/rfc9172/) and [RFC 9173](https://datatracker.ietf.org/doc/rfc9173/), with a flexible architecture enabling ready adaptability to flight or ground systems. The BSL exposes an interface via C header files (under `src`), and contains an example backend implementing this interface in `src/backend`. The BSL also contains an implementation of the Default Security Context (RFC 9173) under `src/security_context` and a sample policy provider under `src/policy_provider`. Together these form a complete the set of functionality required to execute Bundle Protocol Security. @@ -174,22 +172,29 @@ Then execute the test suite using: python3 -m pytest mock-bpa-test --log-cli-level=info ``` -### Running with Wireshark and Local Sockets +### Running with Wireshark and Local UDP transport + +The Mock BPA uses local UDP datagram transport. +This relies on the fact the the loopback device will have a large MTU to avoid the need for BP PDU segmentation. +The UDP ports can be monitored using stock Wireshark with the following command line: ```sh -wireshark -i lo -f 'port 4556 or port 24556' -k +wireshark -i lo -k \ + -f 'udp port 4556 or udp port 14556 or udp port 24556 or udp port 34556' \ + -d 'udp.port==14556,bundle' -d 'udp.port==24556,bundle' -d 'udp.port==34556,bundle' \ + -Y bpv7 ``` Start the mock BPA with local sockets: ```sh ./build.sh ./build.sh install -./build.sh run bsl-mock-bpa -u localhost:4556 -r localhost:14556 -o localhost:24556 -a localhost:34556 +./build.sh run \ + bsl-mock-bpa -u localhost:4556 -r localhost:14556 -o localhost:24556 -a localhost:34556 ``` Send a trial bundle from the underlayer, which is taken from Appendix A.1.4 of RFC 9173. ```sh echo 9f88070000820282010282028202018202820201820018281a000f4240850b0200005856810101018202820201828201078203008181820158403bdc69b3a34a2b5d3a8554368bd1e808f606219d2a10a846eae3886ae4ecc83c4ee550fdfb1cc636b904e2f1a73e303dcd4b6ccece003e95e8164dcc89a156e185010100005823526561647920746f2067656e657261746520612033322d62797465207061796c6f6164ff | xxd -r -p | socat stdio udp-sendto:localhost:4556,pf=ip6,sourceport=14556 | xxd -p ``` -Alternatively for the overlayer app socket use `socat stdio unix-sendto:/tmp/foo.sock` instead. - +Alternatively for the overlayer app socket use `socat stdio udp-sendto:localhost:24556,pf=ip6,sourceport=34556` instead. diff --git a/mock-bpa-test/README.md b/mock-bpa-test/README.md index b83bb00f..8742b8bf 100644 --- a/mock-bpa-test/README.md +++ b/mock-bpa-test/README.md @@ -23,11 +23,3 @@ subcontract 1700763. This directory contains a set of pytest-compatible test fixtures to exercise the Mock BPA. It will run using `./build.sh run` which will execute with a PATH environment preferring `./testroot/usr/bin` followed by system paths. This means it can test a local build as well as test the installed RPM packages. - -Tests can be logged using Wireshark similar to -```sh -wireshark -i lo -k \ - -f 'udp port 4556 or udp port 14556 or udp port 24556 or udp port 34556' \ - -d 'udp.port==14556,bundle' -d 'udp.port==24556,bundle' -d 'udp.port==34556,bundle' \ - -Y bpv7 -``` \ No newline at end of file From bdd7002686c85b8e70e1d5d8369218e00cdadf93 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Fri, 17 Jul 2026 13:48:17 -0400 Subject: [PATCH 08/13] More README touchup --- README.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0ab14804..6e7ade1e 100644 --- a/README.md +++ b/README.md @@ -195,6 +195,15 @@ Start the mock BPA with local sockets: Send a trial bundle from the underlayer, which is taken from Appendix A.1.4 of RFC 9173. ```sh -echo 9f88070000820282010282028202018202820201820018281a000f4240850b0200005856810101018202820201828201078203008181820158403bdc69b3a34a2b5d3a8554368bd1e808f606219d2a10a846eae3886ae4ecc83c4ee550fdfb1cc636b904e2f1a73e303dcd4b6ccece003e95e8164dcc89a156e185010100005823526561647920746f2067656e657261746520612033322d62797465207061796c6f6164ff | xxd -r -p | socat stdio udp-sendto:localhost:4556,pf=ip6,sourceport=14556 | xxd -p +echo 9f88070000820282010282028202018202820201820018281a000f4240850b0200005856810101018202820201828201078203008181820158403bdc69b3a34a2b5d3a8554368bd1e808f606219d2a10a846eae3886ae4ecc83c4ee550fdfb1cc636b904e2f1a73e303dcd4b6ccece003e95e8164dcc89a156e185010100005823526561647920746f2067656e657261746520612033322d62797465207061796c6f6164ff | \ + xxd -r -p | \ + socat stdio udp-sendto:localhost:4556,pf=ip6,sourceport=14556 | \ + xxd -p ``` +This example assumes that the `bsl-mock-bpa` resolves "localhost" to an IPv6 address (which is the default on RHEL-9), if not the socat can replace `pf=ip6` with `pf=ip4` to force IPv4 use. + Alternatively for the overlayer app socket use `socat stdio udp-sendto:localhost:24556,pf=ip6,sourceport=34556` instead. + +> [!NOTE] +> The output can be observed as CBOR extended diagnostic notation (EDN) using a CLI tool such as [cbor-diag](https://github.com/cabo/cbor-diag) by replacing `xxd -p` with `cbor2diag.rb`. +> Similarly, the input can be provided in EDN by piping through `diag2cbor.rb` instead of hex piped through `xxd -r -p`. From 9dbb154500cc49205b19ed9eeed9e668741c6233 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Sat, 18 Jul 2026 15:08:30 -0400 Subject: [PATCH 09/13] m-lib is included in cose_sc header --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4e028d6e..56deaeab 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -137,7 +137,7 @@ set_target_properties(bsl_cose_sc target_link_libraries(bsl_cose_sc PUBLIC bsl_front) target_link_libraries(bsl_cose_sc PUBLIC bsl_dynamic) # for CBOR API target_link_libraries(bsl_cose_sc PRIVATE bsl_crypto) -target_link_libraries(bsl_cose_sc PRIVATE MLIB::mlib) +target_link_libraries(bsl_cose_sc PUBLIC MLIB::mlib) target_link_libraries(bsl_cose_sc PRIVATE qcbor::qcbor) # Example Policy Provider library From 80d06d15ebb35b683e57a4fb17cc50edc9581f57 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Sat, 18 Jul 2026 15:08:59 -0400 Subject: [PATCH 10/13] m-lib is included in cose_sc header --- pkg/bsl-cose-sc.pc.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/bsl-cose-sc.pc.in b/pkg/bsl-cose-sc.pc.in index e03e432c..5e91db74 100644 --- a/pkg/bsl-cose-sc.pc.in +++ b/pkg/bsl-cose-sc.pc.in @@ -5,6 +5,6 @@ libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ Name: bsl-cose-sc Description: BSL COSE Context provider Version: @PROJECT_VERSION@ -Requires: bsl +Requires: bsl, m-lib Cflags: -I${includedir} Libs: -L${libdir} -lbsl_cose_sc From 4999184d76183673d87a9c9efe0b31b63f46ae90 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Tue, 21 Jul 2026 11:40:00 -0400 Subject: [PATCH 11/13] Removed M*LIB use from bsl_cose_sc public headers --- build.sh | 2 +- pkg/bsl-cose-sc.pc.in | 3 +- src/CMakeLists.txt | 4 +- src/bsl/cose_sc/AadScope.c | 52 ++++++++ src/bsl/cose_sc/AadScope.h | 63 ++++++++++ src/bsl/cose_sc/CoseContext.c | 89 ++++++-------- src/bsl/cose_sc/CoseContext.h | 60 ++++++---- src/bsl/sample_pp/PolicyParser.c | 21 ++-- test/test_CoseContext.c | 199 +++++++++++-------------------- 9 files changed, 278 insertions(+), 215 deletions(-) create mode 100644 src/bsl/cose_sc/AadScope.c create mode 100644 src/bsl/cose_sc/AadScope.h diff --git a/build.sh b/build.sh index d121e76a..1e4ecc6f 100755 --- a/build.sh +++ b/build.sh @@ -58,7 +58,7 @@ function cmd_check_format { function cmd_apply_format { shift - exec ./resources/apply_format. "$@" + exec ./resources/apply_format.sh "$@" } function cmd_apply_license { diff --git a/pkg/bsl-cose-sc.pc.in b/pkg/bsl-cose-sc.pc.in index 5e91db74..79bf6231 100644 --- a/pkg/bsl-cose-sc.pc.in +++ b/pkg/bsl-cose-sc.pc.in @@ -5,6 +5,7 @@ libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ Name: bsl-cose-sc Description: BSL COSE Context provider Version: @PROJECT_VERSION@ -Requires: bsl, m-lib +Requires: bsl +Requires.private: m-lib Cflags: -I${includedir} Libs: -L${libdir} -lbsl_cose_sc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 56deaeab..65a95703 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -124,8 +124,10 @@ target_sources(bsl_cose_sc FILE_SET private_headers TYPE HEADERS FILES + bsl/cose_sc/AadScope.h bsl/cose_sc/CoseMsg.h PRIVATE + bsl/cose_sc/AadScope.c bsl/cose_sc/CoseContext.c bsl/cose_sc/CoseMsg.c ) @@ -137,7 +139,7 @@ set_target_properties(bsl_cose_sc target_link_libraries(bsl_cose_sc PUBLIC bsl_front) target_link_libraries(bsl_cose_sc PUBLIC bsl_dynamic) # for CBOR API target_link_libraries(bsl_cose_sc PRIVATE bsl_crypto) -target_link_libraries(bsl_cose_sc PUBLIC MLIB::mlib) +target_link_libraries(bsl_cose_sc PRIVATE MLIB::mlib) target_link_libraries(bsl_cose_sc PRIVATE qcbor::qcbor) # Example Policy Provider library diff --git a/src/bsl/cose_sc/AadScope.c b/src/bsl/cose_sc/AadScope.c new file mode 100644 index 00000000..1d5b11db --- /dev/null +++ b/src/bsl/cose_sc/AadScope.c @@ -0,0 +1,52 @@ +#include "AadScope.h" + + +int BSLX_CoseSc_AadScope_Encode(QCBOREncodeContext *enc, const BSLX_CoseSc_AadScope_t *scope) +{ + // aad-scope map + QCBOREncode_OpenMap(enc); + + BSLX_CoseSc_AadScope_it_t aads_it; + for (BSLX_CoseSc_AadScope_it(aads_it, *scope); !BSLX_CoseSc_AadScope_end_p(aads_it); + BSLX_CoseSc_AadScope_next(aads_it)) + { + const BSLX_CoseSc_AadScope_subtype_ct *aads_pair = BSLX_CoseSc_AadScope_cref(aads_it); + QCBOREncode_AddInt64(enc, *(aads_pair->key_ptr)); + QCBOREncode_AddUInt64(enc, *(aads_pair->value_ptr)); + } + + QCBOREncode_CloseMap(enc); + return BSL_SUCCESS; +} + +int BSLX_CoseSc_AadScope_Decode(QCBORDecodeContext *dec, BSLX_CoseSc_AadScope_t *scope) +{ + BSLX_CoseSc_AadScope_reset(*scope); + + QCBORItem item; + QCBORDecode_EnterArray(dec, &item); // using QCBOR_DECODE_MODE_MAP_AS_ARRAY + + while (QCBOR_SUCCESS == QCBORDecode_PeekNext(dec, &item)) + { + int64_t blk_num; + QCBORDecode_GetInt64(dec, &blk_num); + if (QCBOR_SUCCESS != QCBORDecode_GetError(dec)) + { + BSL_LOG_ERR("Invalid AAD Scope map key"); + break; + } + + uint64_t aad_flags; + QCBORDecode_GetUInt64(dec, &aad_flags); + if (QCBOR_SUCCESS != QCBORDecode_GetError(dec)) + { + BSL_LOG_ERR("Invalid AAD Scope map value"); + break; + } + + BSLX_CoseSc_AadScope_set_at(*scope, blk_num, aad_flags); + } + + QCBORDecode_ExitArray(dec); + return BSL_SUCCESS; +} diff --git a/src/bsl/cose_sc/AadScope.h b/src/bsl/cose_sc/AadScope.h new file mode 100644 index 00000000..3bb4746e --- /dev/null +++ b/src/bsl/cose_sc/AadScope.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2025-2026 The Johns Hopkins University Applied Physics + * Laboratory LLC. + * + * This file is part of the Bundle Protocol Security Library (BSL). + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This work was performed for the Jet Propulsion Laboratory, California + * Institute of Technology, sponsored by the United States Government under + * the prime contract 80NM0018D0004 between the Caltech and NASA under + * subcontract 1700763. + */ + +/** @file + * @ingroup cose_sc + * Header for the implementation of the COSE context @cite draft-ietf-dtn-bpsec-cose. + */ + +#ifndef BSLX_COSESC_AADSCOPE_H_ +#define BSLX_COSESC_AADSCOPE_H_ + +#include "CoseContext.h" +#include "bsl/dynamic/CBOR.h" +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @struct BSLX_CoseSc_AadScope_t + * An internal representation of AAD Scope map, with keys sorted in + * CBOR deterministic order and values as a bit mask of + * ::BSLX_CoseSC_AAD_Flag_e flags. + */ +// NOLINTBEGIN +/// @cond Doxygen_Suppress +// GCOV_EXCL_START +M_BPTREE_DEF2(BSLX_CoseSc_AadScope, 4, int64_t, M_OPEXTEND(M_BASIC_OPLIST, CMP(API_6(BSL_CBOR_Compare_Int64))), + uint64_t, M_BASIC_OPLIST) +// GCOV_EXCL_STOP +/// @endcond +// NOLINTEND + +/// Matches ::BSL_CBOR_Encode_f signature. +int BSLX_CoseSc_AadScope_Encode(QCBOREncodeContext *enc, const BSLX_CoseSc_AadScope_t *scope); + +/// Matches ::BSL_CBOR_Decode_f signature. +int BSLX_CoseSc_AadScope_Decode(QCBORDecodeContext *dec, BSLX_CoseSc_AadScope_t *scope); + +#ifdef __cplusplus +} // extern C +#endif + +#endif /* BSLX_COSESC_AADSCOPE_H_ */ diff --git a/src/bsl/cose_sc/CoseContext.c b/src/bsl/cose_sc/CoseContext.c index b3cfcdd1..84440d68 100644 --- a/src/bsl/cose_sc/CoseContext.c +++ b/src/bsl/cose_sc/CoseContext.c @@ -26,7 +26,7 @@ */ #include "CoseContext.h" -#include "CoseContext_Private.h" +#include "AadScope.h" #include "CoseMsg.h" #include "bsl/BPSecLib_Private.h" @@ -42,6 +42,37 @@ #include #include +int BSLX_CoseSc_SetAadScope(BSL_IdValPair_t *option, const BSLX_CoseSc_AadScope_Item_t *list, size_t count) +{ + ASSERT_ARG_NONNULL(option); + ASSERT_ARG_NONNULL(list); + + BSLX_CoseSc_AadScope_t obj; + BSLX_CoseSc_AadScope_init(obj); + + for (size_t item_ix = 0; item_ix < count; ++item_ix) + { + const BSLX_CoseSc_AadScope_Item_t *item = &list[item_ix]; + BSLX_CoseSc_AadScope_set_at(obj, item->key, item->flags); + } + + BSL_Data_t aad_scope_enc; + BSL_Data_Init(&aad_scope_enc); + int res = BSL_CBOR_Encode_Twopass(&aad_scope_enc, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &obj); + // GCOV_EXCL_START + if (BSL_SUCCESS != res) + { + BSL_LOG_ERR("Failed to encode AAD Scope"); + } + // GCOV_EXCL_STOP + + BSL_IdValPair_SetRaw(option, BSLX_COSESC_OPTION_AAD_SCOPE, aad_scope_enc.ptr, aad_scope_enc.len); + BSL_Data_Deinit(&aad_scope_enc); + + BSLX_CoseSc_AadScope_clear(obj); + return res; +} + /** Acceptable target algorithms for MAC. * @note These must be sorted for @c bsearch() to work. */ @@ -462,56 +493,6 @@ bool BSLX_CoseSc_Validate(BSL_LibCtx_t *lib _U_, BSL_BundleRef_t *bundle, BSL_Se return valid; } -int BSLX_CoseSc_AadScope_Encode(QCBOREncodeContext *enc, const BSLX_CoseSc_AadScope_t *scope) -{ - // aad-scope map - QCBOREncode_OpenMap(enc); - - BSLX_CoseSc_AadScope_it_t aads_it; - for (BSLX_CoseSc_AadScope_it(aads_it, *scope); !BSLX_CoseSc_AadScope_end_p(aads_it); - BSLX_CoseSc_AadScope_next(aads_it)) - { - const BSLX_CoseSc_AadScope_subtype_ct *aads_pair = BSLX_CoseSc_AadScope_cref(aads_it); - QCBOREncode_AddInt64(enc, *(aads_pair->key_ptr)); - QCBOREncode_AddUInt64(enc, *(aads_pair->value_ptr)); - } - - QCBOREncode_CloseMap(enc); - return BSL_SUCCESS; -} - -int BSLX_CoseSc_AadScope_Decode(QCBORDecodeContext *dec, BSLX_CoseSc_AadScope_t *scope) -{ - BSLX_CoseSc_AadScope_reset(*scope); - - QCBORItem item; - QCBORDecode_EnterArray(dec, &item); // using QCBOR_DECODE_MODE_MAP_AS_ARRAY - - while (QCBOR_SUCCESS == QCBORDecode_PeekNext(dec, &item)) - { - int64_t blk_num; - QCBORDecode_GetInt64(dec, &blk_num); - if (QCBOR_SUCCESS != QCBORDecode_GetError(dec)) - { - BSL_LOG_ERR("Invalid AAD Scope map key"); - break; - } - - uint64_t aad_flags; - QCBORDecode_GetUInt64(dec, &aad_flags); - if (QCBOR_SUCCESS != QCBORDecode_GetError(dec)) - { - BSL_LOG_ERR("Invalid AAD Scope map value"); - break; - } - - BSLX_CoseSc_AadScope_set_at(*scope, blk_num, aad_flags); - } - - QCBORDecode_ExitArray(dec); - return BSL_SUCCESS; -} - /** @struct BSLX_CoseSc_ChunkItem_t * A variant which can be either: * - @c data An instance of @c m_bstring_t @@ -665,7 +646,7 @@ static int BSLX_CoseSc_ExternalAad_Chunked(const BSLX_CoseSc_t *ctx, BSLX_CoseSc if (blk_num == 0) { // primary block - if (aad_flags & BSLX_COSESC_AAD_FLAG_METADATA) + if (aad_flags & BSLX_COSESC_AADSCOPE_FLAG_METADATA) { m_bstring_t *data = BSLX_CoseSc_ChunkList_GetBstring(chunklist); @@ -691,7 +672,7 @@ static int BSLX_CoseSc_ExternalAad_Chunked(const BSLX_CoseSc_t *ctx, BSLX_CoseSc } } - if (aad_flags & BSLX_COSESC_AAD_FLAG_METADATA) + if (aad_flags & BSLX_COSESC_AADSCOPE_FLAG_METADATA) { m_bstring_t *data = BSLX_CoseSc_ChunkList_GetBstring(chunklist); @@ -700,7 +681,7 @@ static int BSLX_CoseSc_ExternalAad_Chunked(const BSLX_CoseSc_t *ctx, BSLX_CoseSc *total += BSLX_CoseSc_bstring_AppendHead(*data, CBOR_MAJOR_TYPE_POSITIVE_INT, aad_block.block_num); *total += BSLX_CoseSc_bstring_AppendHead(*data, CBOR_MAJOR_TYPE_POSITIVE_INT, aad_block.flags); } - if (aad_flags & BSLX_COSESC_AAD_FLAG_BTSD) + if (aad_flags & BSLX_COSESC_AADSCOPE_FLAG_BTSD) { // CBOR head and seq stream { diff --git a/src/bsl/cose_sc/CoseContext.h b/src/bsl/cose_sc/CoseContext.h index 965aaecc..12b07511 100644 --- a/src/bsl/cose_sc/CoseContext.h +++ b/src/bsl/cose_sc/CoseContext.h @@ -30,9 +30,6 @@ #include "bsl/BPSecLib_Private.h" #include "bsl/BPSecLib_Public.h" -#include "bsl/dynamic/CBOR.h" - -#include #ifdef __cplusplus extern "C" { @@ -64,7 +61,8 @@ enum BSLX_CoseSC_Option_e */ BSLX_COSESC_OPTION_TGT_ALG, /** AAD Scope as raw encoded data. - * The value is encoded CBOR interpreted as ::BSLX_CoseSc_AadScope_t. + * The value is encoded CBOR interpreted as ::BSLX_CoseSc_AadScope_t, + * and can use the BSLX_CoseSc_SetAadScope() helper in policy providers. * Optional for source, optional exact-match for verifier/acceptor. */ BSLX_COSESC_OPTION_AAD_SCOPE, @@ -132,30 +130,46 @@ enum BSLX_CoseSC_Result_e BSLX_COSESC_RESULT_COSE_SIGN = 98, }; -/** @struct BSLX_CoseSc_AadScope_t - * An internal representation of AAD Scope map, with keys sorted in - * CBOR deterministic order and values as a bit mask of - * ::BSLX_CoseSC_AAD_Flag_e flags. - */ -// NOLINTBEGIN -/// @cond Doxygen_Suppress -// GCOV_EXCL_START -M_BPTREE_DEF2(BSLX_CoseSc_AadScope, 4, int64_t, M_OPEXTEND(M_BASIC_OPLIST, CMP(API_6(BSL_CBOR_Compare_Int64))), - uint64_t, M_BASIC_OPLIST) -// GCOV_EXCL_STOP -/// @endcond -// NOLINTEND +/// Special keys for AAD Scope parameter +enum BSLX_CoseSC_AadScope_Special_e +{ + /// Reference the security target block + BSLX_COSESC_AADSCOPE_SPECIAL_TARGET = -1, + /// Reference the parent security block + BSLX_COSESC_AADSCOPE_SPECIAL_SECURITY = -2, +}; /// Flags for AAD Scope parameter -enum BSLX_CoseSC_AAD_Flag_e +enum BSLX_CoseSC_AadScope_Flag_e { - BSLX_COSESC_AAD_FLAG_METADATA = 0x1, - BSLX_COSESC_AAD_FLAG_BTSD = 0x2, + /// Include block header items in AAD + BSLX_COSESC_AADSCOPE_FLAG_METADATA = 0x1, + /// Include BTSD in AAD + BSLX_COSESC_AADSCOPE_FLAG_BTSD = 0x2, }; -int BSLX_CoseSc_AadScope_Encode(QCBOREncodeContext *enc, const BSLX_CoseSc_AadScope_t *scope); - -int BSLX_CoseSc_AadScope_Decode(QCBORDecodeContext *dec, BSLX_CoseSc_AadScope_t *scope); +/** Native C structure for each item of COSE Context AAD Scope. + */ +typedef struct { + /// Block number or special key from ::BSLX_CoseSC_AadScope_Special_e + int64_t key; + /** Choice of flags from ::BSLX_CoseSC_AAD_Flag_e. + * This type is compatible with ::BSL_IdValPair_t storage. + */ + int64_t flags; +} BSLX_CoseSc_AadScope_Item_t; + +/** Utility to set the ::BSLX_COSESC_OPTION_AAD_SCOPE option without exposing + * the encoding internals. + * + * @param[in,out] option Pointer to the option to set the AAD Scope on. + * @param[in] list Pointer to an array of integer values, each + * subsequent pair of values is interpreted as a (key, value) in the scope map. + * The order of keys in this form is not significant. + * @param count The number of @b pairs of values in the @c list array. + * @return BSL_SUCCESS if successful. + */ +int BSLX_CoseSc_SetAadScope(BSL_IdValPair_t *option, const BSLX_CoseSc_AadScope_Item_t *list, size_t count); /// Match signature ::BSL_SecCtx_Validate_f bool BSLX_CoseSc_Validate(BSL_LibCtx_t *lib, BSL_BundleRef_t *bundle, BSL_SecOper_t *sec_oper); diff --git a/src/bsl/sample_pp/PolicyParser.c b/src/bsl/sample_pp/PolicyParser.c index ea1e5012..c707370f 100644 --- a/src/bsl/sample_pp/PolicyParser.c +++ b/src/bsl/sample_pp/PolicyParser.c @@ -264,31 +264,32 @@ static int BSLP_PolicyOptions_SC3(BSLB_IdValPairPtrMap_t options, const char *id return BSL_ERR_POLICY_CONFIG; } - BSLX_CoseSc_AadScope_t scope; - BSLX_CoseSc_AadScope_init(scope); - while (val_it) + const size_t scope_count = json_object_size(value); + BSLX_CoseSc_AadScope_Item_t *scope = BSL_calloc(scope_count, sizeof(BSLX_CoseSc_AadScope_Item_t)); + for (size_t item_ix = 0; val_it; ++item_ix) { int64_t blk_num; if (BSLP_GetTextAsInt(&blk_num, json_object_iter_key(val_it), json_object_iter_key_len(val_it))) { BSL_LOG_ERR("AAD Scope invalid map key"); - BSLX_CoseSc_AadScope_clear(scope); + BSL_free(scope); return BSL_ERR_POLICY_CONFIG; } int64_t aad_flags; if (BSLP_GetNumberInt(json_object_iter_value(val_it), &aad_flags)) { BSL_LOG_ERR("AAD Scope invalid map value"); - BSLX_CoseSc_AadScope_clear(scope); + BSL_free(scope); return BSL_ERR_POLICY_CONFIG; } BSL_LOG_DEBUG("AAD Scope for block %" PRId64 " has flags 0x%" PRIx64, blk_num, aad_flags); - BSLX_CoseSc_AadScope_set_at(scope, blk_num, aad_flags); + scope[item_ix] = (BSLX_CoseSc_AadScope_Item_t){ .key=blk_num, .flags=aad_flags}; val_it = json_object_iter_next(value, val_it); } +#if 0 BSL_Data_t enc_scope; BSL_Data_Init(&enc_scope); int res = BSL_CBOR_Encode_Twopass(&enc_scope, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &scope); @@ -299,10 +300,14 @@ static int BSLP_PolicyOptions_SC3(BSLB_IdValPairPtrMap_t options, const char *id BSL_Data_Deinit(&enc_scope); return BSL_ERR_POLICY_CONFIG; } - - BSL_IdValPair_t *opt = BSLB_IdValPairPtrMap_add(options, BSLX_COSESC_OPTION_AAD_SCOPE); + BSL_IdValPair_SetRaw(opt, BSLX_COSESC_OPTION_AAD_SCOPE, enc_scope.ptr, enc_scope.len); BSL_Data_Deinit(&enc_scope); +#endif + + BSL_IdValPair_t *opt = BSLB_IdValPairPtrMap_add(options, BSLX_COSESC_OPTION_AAD_SCOPE); + BSLX_CoseSc_SetAadScope(opt, scope, scope_count); + BSL_free(scope); } else if (0 == strcasecmp(id_str, "iv_base")) { diff --git a/test/test_CoseContext.c b/test/test_CoseContext.c index e452b18c..88351359 100644 --- a/test/test_CoseContext.c +++ b/test/test_CoseContext.c @@ -318,21 +318,14 @@ void test_AppendixA_Example1_BIB_Source(void) { BSL_IdValPair_t option; BSL_IdValPair_Init(&option); - { - BSLX_CoseSc_AadScope_t scope; - BSLX_CoseSc_AadScope_init(scope); - BSLX_CoseSc_AadScope_set_at(scope, 0, 0x1); - BSLX_CoseSc_AadScope_set_at(scope, -1, 0x1); - - BSL_Data_t value; - BSL_Data_Init(&value); - int res = BSL_CBOR_Encode_Twopass(&value, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &scope); - TEST_ASSERT_EQUAL_INT_MESSAGE(BSL_SUCCESS, res, "Failed BSL_CBOR_Encode_Twopass()"); - BSLX_CoseSc_AadScope_clear(scope); - - BSL_IdValPair_SetRaw(&option, BSLX_COSESC_OPTION_AAD_SCOPE, value.ptr, value.len); - BSL_Data_Deinit(&value); - } + + BSLX_CoseSc_AadScope_Item_t scope[] = { + {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + }; + const size_t scope_count = sizeof(scope) / sizeof(scope[0]); + TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); + BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); } @@ -465,23 +458,18 @@ void test_AppendixA_Example1_BIB_VerifyAccept(BSL_SecRole_e role, int mismatch) } if (mismatch != OPT_MISMATCH_NO_AAD_SCOPE) { - BSLX_CoseSc_AadScope_t scope; - BSLX_CoseSc_AadScope_init(scope); - BSLX_CoseSc_AadScope_set_at(scope, 0, 0x1); - BSLX_CoseSc_AadScope_set_at(scope, -1, 0x1); + BSL_IdValPair_t option; + BSL_IdValPair_Init(&option); - BSL_Data_t value; - BSL_Data_Init(&value); - int res = BSL_CBOR_Encode_Twopass(&value, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &scope); - TEST_ASSERT_EQUAL_INT_MESSAGE(BSL_SUCCESS, res, "Failed BSL_CBOR_Encode_Twopass()"); - BSLX_CoseSc_AadScope_clear(scope); + BSLX_CoseSc_AadScope_Item_t scope[] = { + {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + }; + const size_t scope_count = sizeof(scope) / sizeof(scope[0]); + TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); - BSL_IdValPair_t option; - BSL_IdValPair_Init(&option); - BSL_IdValPair_SetRaw(&option, BSLX_COSESC_OPTION_AAD_SCOPE, value.ptr, value.len); BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); - BSL_Data_Deinit(&value); } bool valid_status = BSLX_CoseSc_Validate(&LocalTestCtx.bsl, &LocalTestCtx.mock_bpa_ctr.bundle_ref, &sec_oper); @@ -602,21 +590,14 @@ void test_CCSDS_Example_Mac_Source(void) { BSL_IdValPair_t option; BSL_IdValPair_Init(&option); - { - BSLX_CoseSc_AadScope_t scope; - BSLX_CoseSc_AadScope_init(scope); - BSLX_CoseSc_AadScope_set_at(scope, 0, 0x1); - BSLX_CoseSc_AadScope_set_at(scope, -1, 0x1); - - BSL_Data_t value; - BSL_Data_Init(&value); - int res = BSL_CBOR_Encode_Twopass(&value, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &scope); - TEST_ASSERT_EQUAL_INT_MESSAGE(BSL_SUCCESS, res, "Failed BSL_CBOR_Encode_Twopass()"); - BSLX_CoseSc_AadScope_clear(scope); - - BSL_IdValPair_SetRaw(&option, BSLX_COSESC_OPTION_AAD_SCOPE, value.ptr, value.len); - BSL_Data_Deinit(&value); - } + + BSLX_CoseSc_AadScope_Item_t scope[] = { + {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + }; + const size_t scope_count = sizeof(scope) / sizeof(scope[0]); + TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); + BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); } @@ -738,23 +719,18 @@ void test_CCSDS_Example_Mac_VerifyAccept(BSL_SecRole_e role, int mismatch) } if (mismatch != OPT_MISMATCH_NO_AAD_SCOPE) { - BSLX_CoseSc_AadScope_t scope; - BSLX_CoseSc_AadScope_init(scope); - BSLX_CoseSc_AadScope_set_at(scope, 0, 0x1); - BSLX_CoseSc_AadScope_set_at(scope, -1, 0x1); - - BSL_Data_t value; - BSL_Data_Init(&value); - int res = BSL_CBOR_Encode_Twopass(&value, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &scope); - TEST_ASSERT_EQUAL_INT_MESSAGE(BSL_SUCCESS, res, "Failed BSL_CBOR_Encode_Twopass()"); - BSLX_CoseSc_AadScope_clear(scope); - BSL_IdValPair_t option; BSL_IdValPair_Init(&option); - BSL_IdValPair_SetRaw(&option, BSLX_COSESC_OPTION_AAD_SCOPE, value.ptr, value.len); + + BSLX_CoseSc_AadScope_Item_t scope[] = { + {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + }; + const size_t scope_count = sizeof(scope) / sizeof(scope[0]); + TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); + BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); - BSL_Data_Deinit(&value); } bool valid_status = BSLX_CoseSc_Validate(&LocalTestCtx.bsl, &LocalTestCtx.mock_bpa_ctr.bundle_ref, &sec_oper); @@ -872,21 +848,14 @@ void test_AppendixA_Example4_BCB_Source(void) { BSL_IdValPair_t option; BSL_IdValPair_Init(&option); - { - BSLX_CoseSc_AadScope_t scope; - BSLX_CoseSc_AadScope_init(scope); - BSLX_CoseSc_AadScope_set_at(scope, 0, 0x1); - BSLX_CoseSc_AadScope_set_at(scope, -1, 0x1); - - BSL_Data_t value; - BSL_Data_Init(&value); - int res = BSL_CBOR_Encode_Twopass(&value, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &scope); - TEST_ASSERT_EQUAL_INT_MESSAGE(BSL_SUCCESS, res, "Failed BSL_CBOR_Encode_Twopass()"); - BSLX_CoseSc_AadScope_clear(scope); - - BSL_IdValPair_SetRaw(&option, BSLX_COSESC_OPTION_AAD_SCOPE, value.ptr, value.len); - BSL_Data_Deinit(&value); - } + + BSLX_CoseSc_AadScope_Item_t scope[] = { + {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + }; + const size_t scope_count = sizeof(scope) / sizeof(scope[0]); + TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); + BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); } @@ -1017,23 +986,18 @@ void test_AppendixA_Example4_BCB_VerifyAccept(BSL_SecRole_e role, int mismatch) } if (mismatch != OPT_MISMATCH_NO_AAD_SCOPE) { - BSLX_CoseSc_AadScope_t scope; - BSLX_CoseSc_AadScope_init(scope); - BSLX_CoseSc_AadScope_set_at(scope, 0, 0x1); - BSLX_CoseSc_AadScope_set_at(scope, -1, 0x1); - - BSL_Data_t value; - BSL_Data_Init(&value); - int res = BSL_CBOR_Encode_Twopass(&value, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &scope); - TEST_ASSERT_EQUAL_INT_MESSAGE(BSL_SUCCESS, res, "Failed BSL_CBOR_Encode_Twopass()"); - BSLX_CoseSc_AadScope_clear(scope); - BSL_IdValPair_t option; BSL_IdValPair_Init(&option); - BSL_IdValPair_SetRaw(&option, BSLX_COSESC_OPTION_AAD_SCOPE, value.ptr, value.len); + + BSLX_CoseSc_AadScope_Item_t scope[] = { + {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + }; + const size_t scope_count = sizeof(scope) / sizeof(scope[0]); + TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); + BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); - BSL_Data_Deinit(&value); } bool valid_status = BSLX_CoseSc_Validate(&LocalTestCtx.bsl, &LocalTestCtx.mock_bpa_ctr.bundle_ref, &sec_oper); @@ -1159,21 +1123,14 @@ void test_AppendixA_Example5_BCB_Source(void) { BSL_IdValPair_t option; BSL_IdValPair_Init(&option); - { - BSLX_CoseSc_AadScope_t scope; - BSLX_CoseSc_AadScope_init(scope); - BSLX_CoseSc_AadScope_set_at(scope, 0, 0x1); - BSLX_CoseSc_AadScope_set_at(scope, -1, 0x1); - - BSL_Data_t value; - BSL_Data_Init(&value); - int res = BSL_CBOR_Encode_Twopass(&value, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &scope); - TEST_ASSERT_EQUAL_INT_MESSAGE(BSL_SUCCESS, res, "Failed BSL_CBOR_Encode_Twopass()"); - BSLX_CoseSc_AadScope_clear(scope); - - BSL_IdValPair_SetRaw(&option, BSLX_COSESC_OPTION_AAD_SCOPE, value.ptr, value.len); - BSL_Data_Deinit(&value); - } + + BSLX_CoseSc_AadScope_Item_t scope[] = { + {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + }; + const size_t scope_count = sizeof(scope) / sizeof(scope[0]); + TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); + BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); } @@ -1295,23 +1252,18 @@ void test_AppendixA_Example5_BCB_VerifyAccept(BSL_SecRole_e role, int mismatch) } if (mismatch != OPT_MISMATCH_NO_AAD_SCOPE) { - BSLX_CoseSc_AadScope_t scope; - BSLX_CoseSc_AadScope_init(scope); - BSLX_CoseSc_AadScope_set_at(scope, 0, 0x1); - BSLX_CoseSc_AadScope_set_at(scope, -1, 0x1); - - BSL_Data_t value; - BSL_Data_Init(&value); - int res = BSL_CBOR_Encode_Twopass(&value, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &scope); - TEST_ASSERT_EQUAL_INT_MESSAGE(BSL_SUCCESS, res, "Failed BSL_CBOR_Encode_Twopass()"); - BSLX_CoseSc_AadScope_clear(scope); - BSL_IdValPair_t option; BSL_IdValPair_Init(&option); - BSL_IdValPair_SetRaw(&option, BSLX_COSESC_OPTION_AAD_SCOPE, value.ptr, value.len); + + BSLX_CoseSc_AadScope_Item_t scope[] = { + {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + }; + const size_t scope_count = sizeof(scope) / sizeof(scope[0]); + TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); + BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); - BSL_Data_Deinit(&value); } bool valid_status = BSLX_CoseSc_Validate(&LocalTestCtx.bsl, &LocalTestCtx.mock_bpa_ctr.bundle_ref, &sec_oper); @@ -1442,21 +1394,14 @@ void test_AppendixA_Example6_BCB_Source(void) { BSL_IdValPair_t option; BSL_IdValPair_Init(&option); - { - BSLX_CoseSc_AadScope_t scope; - BSLX_CoseSc_AadScope_init(scope); - BSLX_CoseSc_AadScope_set_at(scope, 0, 0x1); - BSLX_CoseSc_AadScope_set_at(scope, -1, 0x1); - - BSL_Data_t value; - BSL_Data_Init(&value); - int res = BSL_CBOR_Encode_Twopass(&value, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &scope); - TEST_ASSERT_EQUAL_INT_MESSAGE(BSL_SUCCESS, res, "Failed BSL_CBOR_Encode_Twopass()"); - BSLX_CoseSc_AadScope_clear(scope); - - BSL_IdValPair_SetRaw(&option, BSLX_COSESC_OPTION_AAD_SCOPE, value.ptr, value.len); - BSL_Data_Deinit(&value); - } + + BSLX_CoseSc_AadScope_Item_t scope[] = { + {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + }; + const size_t scope_count = sizeof(scope) / sizeof(scope[0]); + TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); + BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); } From 9cb3904b3726bdaaa580e5024827cb85fc01b63d Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Tue, 21 Jul 2026 11:43:23 -0400 Subject: [PATCH 12/13] format --- src/bsl/cose_sc/AadScope.c | 1 - src/bsl/cose_sc/AadScope.h | 2 ++ src/bsl/cose_sc/CoseContext.c | 54 ++++++++++++++-------------- src/bsl/cose_sc/CoseContext.h | 17 ++++----- src/bsl/sample_pp/PolicyParser.c | 6 ++-- test/test_CoseContext.c | 60 ++++++++++++++++---------------- 6 files changed, 71 insertions(+), 69 deletions(-) diff --git a/src/bsl/cose_sc/AadScope.c b/src/bsl/cose_sc/AadScope.c index 1d5b11db..3c681651 100644 --- a/src/bsl/cose_sc/AadScope.c +++ b/src/bsl/cose_sc/AadScope.c @@ -1,6 +1,5 @@ #include "AadScope.h" - int BSLX_CoseSc_AadScope_Encode(QCBOREncodeContext *enc, const BSLX_CoseSc_AadScope_t *scope) { // aad-scope map diff --git a/src/bsl/cose_sc/AadScope.h b/src/bsl/cose_sc/AadScope.h index 3bb4746e..a9573383 100644 --- a/src/bsl/cose_sc/AadScope.h +++ b/src/bsl/cose_sc/AadScope.h @@ -29,7 +29,9 @@ #define BSLX_COSESC_AADSCOPE_H_ #include "CoseContext.h" + #include "bsl/dynamic/CBOR.h" + #include #ifdef __cplusplus diff --git a/src/bsl/cose_sc/CoseContext.c b/src/bsl/cose_sc/CoseContext.c index 84440d68..91bc6e31 100644 --- a/src/bsl/cose_sc/CoseContext.c +++ b/src/bsl/cose_sc/CoseContext.c @@ -44,33 +44,33 @@ int BSLX_CoseSc_SetAadScope(BSL_IdValPair_t *option, const BSLX_CoseSc_AadScope_Item_t *list, size_t count) { - ASSERT_ARG_NONNULL(option); - ASSERT_ARG_NONNULL(list); - - BSLX_CoseSc_AadScope_t obj; - BSLX_CoseSc_AadScope_init(obj); - - for (size_t item_ix = 0; item_ix < count; ++item_ix) - { - const BSLX_CoseSc_AadScope_Item_t *item = &list[item_ix]; - BSLX_CoseSc_AadScope_set_at(obj, item->key, item->flags); - } - - BSL_Data_t aad_scope_enc; - BSL_Data_Init(&aad_scope_enc); - int res = BSL_CBOR_Encode_Twopass(&aad_scope_enc, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &obj); - // GCOV_EXCL_START - if (BSL_SUCCESS != res) - { - BSL_LOG_ERR("Failed to encode AAD Scope"); - } - // GCOV_EXCL_STOP - - BSL_IdValPair_SetRaw(option, BSLX_COSESC_OPTION_AAD_SCOPE, aad_scope_enc.ptr, aad_scope_enc.len); - BSL_Data_Deinit(&aad_scope_enc); - - BSLX_CoseSc_AadScope_clear(obj); - return res; + ASSERT_ARG_NONNULL(option); + ASSERT_ARG_NONNULL(list); + + BSLX_CoseSc_AadScope_t obj; + BSLX_CoseSc_AadScope_init(obj); + + for (size_t item_ix = 0; item_ix < count; ++item_ix) + { + const BSLX_CoseSc_AadScope_Item_t *item = &list[item_ix]; + BSLX_CoseSc_AadScope_set_at(obj, item->key, item->flags); + } + + BSL_Data_t aad_scope_enc; + BSL_Data_Init(&aad_scope_enc); + int res = BSL_CBOR_Encode_Twopass(&aad_scope_enc, (BSL_CBOR_Encode_f)&BSLX_CoseSc_AadScope_Encode, &obj); + // GCOV_EXCL_START + if (BSL_SUCCESS != res) + { + BSL_LOG_ERR("Failed to encode AAD Scope"); + } + // GCOV_EXCL_STOP + + BSL_IdValPair_SetRaw(option, BSLX_COSESC_OPTION_AAD_SCOPE, aad_scope_enc.ptr, aad_scope_enc.len); + BSL_Data_Deinit(&aad_scope_enc); + + BSLX_CoseSc_AadScope_clear(obj); + return res; } /** Acceptable target algorithms for MAC. diff --git a/src/bsl/cose_sc/CoseContext.h b/src/bsl/cose_sc/CoseContext.h index 12b07511..a8fb4012 100644 --- a/src/bsl/cose_sc/CoseContext.h +++ b/src/bsl/cose_sc/CoseContext.h @@ -145,18 +145,19 @@ enum BSLX_CoseSC_AadScope_Flag_e /// Include block header items in AAD BSLX_COSESC_AADSCOPE_FLAG_METADATA = 0x1, /// Include BTSD in AAD - BSLX_COSESC_AADSCOPE_FLAG_BTSD = 0x2, + BSLX_COSESC_AADSCOPE_FLAG_BTSD = 0x2, }; /** Native C structure for each item of COSE Context AAD Scope. */ -typedef struct { - /// Block number or special key from ::BSLX_CoseSC_AadScope_Special_e - int64_t key; - /** Choice of flags from ::BSLX_CoseSC_AAD_Flag_e. - * This type is compatible with ::BSL_IdValPair_t storage. - */ - int64_t flags; +typedef struct +{ + /// Block number or special key from ::BSLX_CoseSC_AadScope_Special_e + int64_t key; + /** Choice of flags from ::BSLX_CoseSC_AAD_Flag_e. + * This type is compatible with ::BSL_IdValPair_t storage. + */ + int64_t flags; } BSLX_CoseSc_AadScope_Item_t; /** Utility to set the ::BSLX_COSESC_OPTION_AAD_SCOPE option without exposing diff --git a/src/bsl/sample_pp/PolicyParser.c b/src/bsl/sample_pp/PolicyParser.c index c707370f..c7a71e3f 100644 --- a/src/bsl/sample_pp/PolicyParser.c +++ b/src/bsl/sample_pp/PolicyParser.c @@ -264,8 +264,8 @@ static int BSLP_PolicyOptions_SC3(BSLB_IdValPairPtrMap_t options, const char *id return BSL_ERR_POLICY_CONFIG; } - const size_t scope_count = json_object_size(value); - BSLX_CoseSc_AadScope_Item_t *scope = BSL_calloc(scope_count, sizeof(BSLX_CoseSc_AadScope_Item_t)); + const size_t scope_count = json_object_size(value); + BSLX_CoseSc_AadScope_Item_t *scope = BSL_calloc(scope_count, sizeof(BSLX_CoseSc_AadScope_Item_t)); for (size_t item_ix = 0; val_it; ++item_ix) { int64_t blk_num; @@ -284,7 +284,7 @@ static int BSLP_PolicyOptions_SC3(BSLB_IdValPairPtrMap_t options, const char *id } BSL_LOG_DEBUG("AAD Scope for block %" PRId64 " has flags 0x%" PRIx64, blk_num, aad_flags); - scope[item_ix] = (BSLX_CoseSc_AadScope_Item_t){ .key=blk_num, .flags=aad_flags}; + scope[item_ix] = (BSLX_CoseSc_AadScope_Item_t) { .key = blk_num, .flags = aad_flags }; val_it = json_object_iter_next(value, val_it); } diff --git a/test/test_CoseContext.c b/test/test_CoseContext.c index 88351359..96f1e1e1 100644 --- a/test/test_CoseContext.c +++ b/test/test_CoseContext.c @@ -319,12 +319,12 @@ void test_AppendixA_Example1_BIB_Source(void) BSL_IdValPair_t option; BSL_IdValPair_Init(&option); - BSLX_CoseSc_AadScope_Item_t scope[] = { - {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, - {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, - }; - const size_t scope_count = sizeof(scope) / sizeof(scope[0]); - TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); + BSLX_CoseSc_AadScope_Item_t scope[] = { + { 0, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, + { BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, + }; + const size_t scope_count = sizeof(scope) / sizeof(scope[0]); + TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); @@ -458,15 +458,15 @@ void test_AppendixA_Example1_BIB_VerifyAccept(BSL_SecRole_e role, int mismatch) } if (mismatch != OPT_MISMATCH_NO_AAD_SCOPE) { - BSL_IdValPair_t option; - BSL_IdValPair_Init(&option); + BSL_IdValPair_t option; + BSL_IdValPair_Init(&option); - BSLX_CoseSc_AadScope_Item_t scope[] = { - {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, - {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, - }; - const size_t scope_count = sizeof(scope) / sizeof(scope[0]); - TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); + BSLX_CoseSc_AadScope_Item_t scope[] = { + { 0, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, + { BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, + }; + const size_t scope_count = sizeof(scope) / sizeof(scope[0]); + TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); @@ -592,8 +592,8 @@ void test_CCSDS_Example_Mac_Source(void) BSL_IdValPair_Init(&option); BSLX_CoseSc_AadScope_Item_t scope[] = { - {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, - {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + { 0, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, + { BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, }; const size_t scope_count = sizeof(scope) / sizeof(scope[0]); TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); @@ -723,8 +723,8 @@ void test_CCSDS_Example_Mac_VerifyAccept(BSL_SecRole_e role, int mismatch) BSL_IdValPair_Init(&option); BSLX_CoseSc_AadScope_Item_t scope[] = { - {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, - {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + { 0, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, + { BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, }; const size_t scope_count = sizeof(scope) / sizeof(scope[0]); TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); @@ -850,12 +850,12 @@ void test_AppendixA_Example4_BCB_Source(void) BSL_IdValPair_Init(&option); BSLX_CoseSc_AadScope_Item_t scope[] = { - {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, - {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + { 0, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, + { BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, }; const size_t scope_count = sizeof(scope) / sizeof(scope[0]); TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); - + BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); } @@ -990,8 +990,8 @@ void test_AppendixA_Example4_BCB_VerifyAccept(BSL_SecRole_e role, int mismatch) BSL_IdValPair_Init(&option); BSLX_CoseSc_AadScope_Item_t scope[] = { - {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, - {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + { 0, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, + { BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, }; const size_t scope_count = sizeof(scope) / sizeof(scope[0]); TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); @@ -1125,8 +1125,8 @@ void test_AppendixA_Example5_BCB_Source(void) BSL_IdValPair_Init(&option); BSLX_CoseSc_AadScope_Item_t scope[] = { - {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, - {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + { 0, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, + { BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, }; const size_t scope_count = sizeof(scope) / sizeof(scope[0]); TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); @@ -1256,8 +1256,8 @@ void test_AppendixA_Example5_BCB_VerifyAccept(BSL_SecRole_e role, int mismatch) BSL_IdValPair_Init(&option); BSLX_CoseSc_AadScope_Item_t scope[] = { - {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, - {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + { 0, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, + { BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, }; const size_t scope_count = sizeof(scope) / sizeof(scope[0]); TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); @@ -1396,12 +1396,12 @@ void test_AppendixA_Example6_BCB_Source(void) BSL_IdValPair_Init(&option); BSLX_CoseSc_AadScope_Item_t scope[] = { - {0, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, - {BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA}, + { 0, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, + { BSLX_COSESC_AADSCOPE_SPECIAL_TARGET, BSLX_COSESC_AADSCOPE_FLAG_METADATA }, }; const size_t scope_count = sizeof(scope) / sizeof(scope[0]); TEST_ASSERT_EQUAL_INT(BSL_SUCCESS, BSLX_CoseSc_SetAadScope(&option, scope, scope_count)); - + BSL_SecOper_AppendOption(&sec_oper, &option); BSL_IdValPair_Deinit(&option); } From f687f7ab6801ee17e4c64208dcdacb2442984b49 Mon Sep 17 00:00:00 2001 From: Brian Sipos Date: Tue, 21 Jul 2026 11:48:14 -0400 Subject: [PATCH 13/13] cross refs --- src/bsl/cose_sc/AadScope.h | 2 +- src/bsl/cose_sc/CoseContext.h | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bsl/cose_sc/AadScope.h b/src/bsl/cose_sc/AadScope.h index a9573383..cb8d34f5 100644 --- a/src/bsl/cose_sc/AadScope.h +++ b/src/bsl/cose_sc/AadScope.h @@ -41,7 +41,7 @@ extern "C" { /** @struct BSLX_CoseSc_AadScope_t * An internal representation of AAD Scope map, with keys sorted in * CBOR deterministic order and values as a bit mask of - * ::BSLX_CoseSC_AAD_Flag_e flags. + * ::BSLX_CoseSc_AadScope_Flag_e flags. */ // NOLINTBEGIN /// @cond Doxygen_Suppress diff --git a/src/bsl/cose_sc/CoseContext.h b/src/bsl/cose_sc/CoseContext.h index a8fb4012..2aa3714f 100644 --- a/src/bsl/cose_sc/CoseContext.h +++ b/src/bsl/cose_sc/CoseContext.h @@ -39,7 +39,7 @@ extern "C" { #define BSLX_COSESC_CTX_ID 3 /// Internal option enumerations -enum BSLX_CoseSC_Option_e +enum BSLX_CoseSc_Option_e { /** Key ID as a byte string. * The value is a byte string (which may contain encoded UTF8 text). @@ -109,7 +109,7 @@ enum BSLX_CoseSC_Option_e }; /// @brief From https://www.ietf.org/archive/id/draft-ietf-dtn-bpsec-cose-16.html#section-2.2 -enum BSLX_CoseSC_Param_e +enum BSLX_CoseSc_Param_e { /// Additional Protected headers BSLX_COSESC_PARAM_ADDL_PHDR = 3, @@ -120,7 +120,7 @@ enum BSLX_CoseSC_Param_e }; /// @brief From https://www.ietf.org/archive/id/draft-ietf-dtn-bpsec-cose-16.html#section-2.3 -enum BSLX_CoseSC_Result_e +enum BSLX_CoseSc_Result_e { BSLX_COSESC_RESULT_COSE_ENCRYPT0 = 16, BSLX_COSESC_RESULT_COSE_MAC0 = 17, @@ -131,7 +131,7 @@ enum BSLX_CoseSC_Result_e }; /// Special keys for AAD Scope parameter -enum BSLX_CoseSC_AadScope_Special_e +enum BSLX_CoseSc_AadScope_Special_e { /// Reference the security target block BSLX_COSESC_AADSCOPE_SPECIAL_TARGET = -1, @@ -140,7 +140,7 @@ enum BSLX_CoseSC_AadScope_Special_e }; /// Flags for AAD Scope parameter -enum BSLX_CoseSC_AadScope_Flag_e +enum BSLX_CoseSc_AadScope_Flag_e { /// Include block header items in AAD BSLX_COSESC_AADSCOPE_FLAG_METADATA = 0x1, @@ -152,10 +152,10 @@ enum BSLX_CoseSC_AadScope_Flag_e */ typedef struct { - /// Block number or special key from ::BSLX_CoseSC_AadScope_Special_e + /// Block number or special key from ::BSLX_CoseSc_AadScope_Special_e int64_t key; - /** Choice of flags from ::BSLX_CoseSC_AAD_Flag_e. - * This type is compatible with ::BSL_IdValPair_t storage. + /** Choice of flags from ::BSLX_CoseSc_AadScope_Flag_e. + * This type is compatible with ::BSL_IdValPair_s storage. */ int64_t flags; } BSLX_CoseSc_AadScope_Item_t;