mirror of
https://git.yoctoproject.org/meta-security
synced 2026-01-11 15:00:34 +00:00
Since clang is in openembedded-core now, meta-parsec no longer needs meta-clang. Also updated maintainers in meta-parsec README.md since it had previously been missed. Signed-off-by: Scott Murray <scott.murray@konsulko.com>
266 lines
7.9 KiB
Markdown
266 lines
7.9 KiB
Markdown
meta-parsec layer
|
|
==============
|
|
|
|
This layer contains recipes for the Parsec service and parsec tools.
|
|
|
|
Dependencies
|
|
============
|
|
|
|
This layer depends on:
|
|
|
|
URI: git://git.openembedded.org/meta-openembedded
|
|
branch: master
|
|
|
|
URI git://git.yoctoproject.org/meta-security
|
|
branch: master
|
|
|
|
Adding the meta-parsec layer to your build
|
|
==========================================
|
|
|
|
In order to use this layer, you need to make the build system aware of it.
|
|
|
|
You can add it to the build system by adding the
|
|
location of the meta-parsec layer to bblayers.conf, along with any
|
|
other layers needed. e.g.:
|
|
|
|
BBLAYERS ?= " \
|
|
/path/to/yocto/meta \
|
|
/path/to/yocto/meta-yocto \
|
|
/path/to/yocto/meta-yocto-bsp \
|
|
/path/to/meta-openembedded/meta-oe \
|
|
/path/to/meta-openembedded/meta-python \
|
|
/path/to/meta-security/meta-tpm \
|
|
/path/to/meta-security/meta-parsec \
|
|
"
|
|
|
|
To include the Parsec service into your image add following into the
|
|
local.conf:
|
|
|
|
IMAGE_INSTALL:append = " parsec-service"
|
|
|
|
By default the Parsec service will be deployed into the image with
|
|
PKCS11 and MBED-CRYPTO providers build-in.
|
|
The TPM provider will also be built by default if:
|
|
- DISTRO_FEATURES contains "tmp2" and
|
|
- "tpm-layer" (meta-tpm) is included in BBLAYERS
|
|
|
|
The trusted service provider depends on libts recipe from meta-arm layer.
|
|
|
|
You can use PACKAGECONFIG for Parsec servic recipe to define
|
|
what providers should be built in. For example:
|
|
|
|
PACKAGECONFIG:pn-parsec-service = "TS"
|
|
|
|
|
|
The default Parsec service config file is taken from the Parsec repository:
|
|
https://github.com/parallaxsecond/parsec/blob/main/config.toml
|
|
This config file contains the MbedCrypto provider enabled.
|
|
The config needs to be updated to use the Parsec service
|
|
with other providers like TPM or PKCS11. The required changes are
|
|
covered in Parsec documentation https://parallaxsecond.github.io/parsec-book/
|
|
|
|
PARSEC_CONFIG can be used in a bbappend file to replace the default config.
|
|
For example:
|
|
|
|
```
|
|
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
|
|
SRC_URI += "file://config-TS.toml \
|
|
"
|
|
PARSEC_CONFIG = "${WORKDIR}/config-TS.toml"
|
|
```
|
|
|
|
Updating recipes
|
|
================
|
|
|
|
The parsec-service and parsec-tool recipes use include files with lists
|
|
of all rust crates required. This allows bitbake to fetch all the necessary
|
|
dependent crates, as well as a pegged version of the crates.io index,
|
|
to ensure maximum reproducibility.
|
|
It's recommended to use cargo-bitbake to generate include files for new
|
|
versions of parsec recipes.
|
|
https://github.com/meta-rust/cargo-bitbake
|
|
|
|
When you have crago-bitbake built:
|
|
1. Checkout the required version of parsec repository.
|
|
2. Run cargo-bitbake inside the repository. It will produce a BB file.
|
|
3. Create a new include file with SRC_URI and LIC_FILES_CHKSUM from the BB file.
|
|
|
|
Automated Parsec testing with runqemu
|
|
=====================================
|
|
|
|
The Yocto build system has the ability to run a series of automated tests for qemu images.
|
|
All the tests are actually commands run on the target system over ssh.
|
|
|
|
Meta-parsec includes automated unittests which run end to end Parsec tests.
|
|
The tests are run against:
|
|
- all providers pre-configured in the Parsec config file included in the image.
|
|
- PKCS11 and TPM providers with software backends if softhsm and
|
|
swtpm packages included in the image.
|
|
- TS Provider if Parsec is built with it included.
|
|
|
|
Meta-parsec also contains a recipe for `security-parsec-image` image with Parsec,
|
|
softhsm and swtpm included.
|
|
|
|
Please notice that the account you use to run bitbake should have access to `/dev/kvm`.
|
|
You might need to change permissions or add the account into `kvm` unix group.
|
|
|
|
1. Testing Parsec with your own image where `parsec-service` and `parsec-tool` are already included.
|
|
|
|
- Add into your `local.conf`:
|
|
```
|
|
IMAGE_CLASSES += "testimage"
|
|
TEST_SUITES = "ping ssh parsec"
|
|
```
|
|
- Build your image
|
|
```bash
|
|
bitbake <your-image>
|
|
```
|
|
- Run tests
|
|
```bash
|
|
bitbake <your-image> -c testimage
|
|
```
|
|
|
|
2. Testing Parsec with pre-defined `security-parsec-image` image.
|
|
|
|
- Add into your `local.conf`:
|
|
```
|
|
DISTRO_FEATURES += " tpm2"
|
|
IMAGE_CLASSES += "testimage"
|
|
TEST_SUITES = "ping ssh parsec"
|
|
```
|
|
- Build security-parsec-image image
|
|
```bash
|
|
bitbake security-parsec-image
|
|
```
|
|
- Run tests
|
|
```bash
|
|
bitbake security-parsec-image -c testimage
|
|
```
|
|
|
|
Output of a successfull tests run should look similar to:
|
|
```
|
|
RESULTS:
|
|
RESULTS - ping.PingTest.test_ping: PASSED (0.05s)
|
|
RESULTS - ssh.SSHTest.test_ssh: PASSED (0.25s)
|
|
RESULTS - parsec.ParsecTest.test_all_providers: PASSED (1.84s)
|
|
RESULTS - parsec.ParsecTest.test_pkcs11_provider: PASSED (2.91s)
|
|
RESULTS - parsec.ParsecTest.test_tpm_provider: PASSED (3.33s)
|
|
SUMMARY:
|
|
security-parsec-image () - Ran 5 tests in 8.386s
|
|
security-parsec-image - OK - All required tests passed (successes=5, skipped=0, failures=0, errors=0)
|
|
```
|
|
|
|
|
|
Manual testing with runqemu
|
|
===========================
|
|
|
|
This layer also contains a recipe for pasec-tool which can be used for
|
|
manual testing of the Parsec service:
|
|
|
|
IMAGE_INSTALL:append = " parsec-tool"
|
|
|
|
There are a series of Parsec Demo videos showing how to use parsec-tool
|
|
to test the Parsec service base functionality:
|
|
https://www.youtube.com/watch?v=ido0CyUdMHM&list=PLKjl7IFAwc4S7WQqqphCsyy6DPDxJ2Skg&index=4
|
|
|
|
The parsec-tool recipe also includes `parsec-cli-tests.sh` script
|
|
which runs e2e tests against all providers enabled and configured
|
|
in Parsec service.
|
|
|
|
You can use runqemu to start a VM with a built image file and run
|
|
manual tests with parsec-tool.
|
|
|
|
Enabling Parsec providers for manual testing
|
|
============================================
|
|
|
|
1. MbedCrypto provider
|
|
The default Parsec service config file contains the MbedCrypto provider
|
|
enabled. No changes required.
|
|
|
|
2. PKCS11 provider
|
|
The Software HSM can be used for manual testing of the provider by
|
|
including it into your test image:
|
|
|
|
IMAGE_INSTALL:append = " softhsm"
|
|
|
|
Inside the running VM:
|
|
- Stop Parsec
|
|
```bash
|
|
systemctl stop parsec
|
|
```
|
|
- Initialise a token and notice the result slot number
|
|
```bash
|
|
softhsm2-util --init-token --slot 0 --label "Parsec Service" --pin 123456 --so-pin 123456
|
|
```
|
|
- Change the token ownership:
|
|
```bash
|
|
for d in /var/lib/softhsm/tokens/*; do chown -R parsec $d; done
|
|
```
|
|
- Enable the PKCS11 provider and update its parameters in the Parsec config file
|
|
/etc/parsec/config.toml
|
|
```
|
|
library_path = "/usr/lib/softhsm/libsofthsm2.so"
|
|
slot_number = <slot number>
|
|
user_pin = "123456"
|
|
```
|
|
- Start Parsec
|
|
```bash
|
|
systemctl start parsec
|
|
```
|
|
|
|
3. TPM provider
|
|
The IBM Software TPM service can be used for manual testing of the provider by
|
|
including it into your test image:
|
|
|
|
IMAGE_INSTALL:append = " swtpm tpm2-tools libtss2 libtss2-tcti-mssim"
|
|
|
|
Inside the running VM:
|
|
- Stop Parsec
|
|
```bash
|
|
systemctl stop parsec
|
|
```
|
|
- Start and configure the Software TPM server
|
|
```bash
|
|
/usr/bin/tpm_server &
|
|
sleep 5
|
|
/usr/bin/tpm2_startup -c -T mssim
|
|
/usr/bin/tpm2_changeauth -c owner tpm_pass
|
|
```
|
|
- Enable the TPM provider and update its parameters in the Parsec config file
|
|
/etc/parsec/config.toml
|
|
```
|
|
tcti = "mssim"
|
|
owner_hierarchy_auth = "hex:74706d5f70617373"
|
|
```
|
|
- Start Parsec
|
|
```bash
|
|
systemctl start parsec
|
|
```
|
|
|
|
Maintenance
|
|
-----------
|
|
|
|
Send pull requests, patches, comments or questions to yocto-patches@lists.yoctoproject.org
|
|
|
|
When sending single patches, please using something like:
|
|
'git send-email -1 --to yocto-patches@lists.yoctoproject.org --subject-prefix=meta-parsec][PATCH'
|
|
|
|
These values can be set as defaults for this repository:
|
|
|
|
$ git config sendemail.to yocto-patches@lists.yoctoproject.org
|
|
$ git config format.subjectPrefix meta-parsec][PATCH
|
|
|
|
Now you can just do 'git send-email origin/master' to send all local patches.
|
|
|
|
Maintainers: Anton Antonov <Anton.Antonov@arm.com>
|
|
Scott Murray <scott.murray@konsulko.com>
|
|
Marta Rybczynska <rybczynska@gmail.com>
|
|
|
|
|
|
License
|
|
=======
|
|
|
|
All metadata is MIT licensed unless otherwise stated. Source code included
|
|
in tree for individual recipes is under the LICENSE stated in each recipe
|
|
(.bb file) unless otherwise stated.
|