Repository navigation
Conversation
dgarske
force-pushed
the
jetson_optee
branch
3 times, most recently
from
October 30, 2026 19:05
c46de19 to
9f53bb0
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Board scaffolding for running the wolfTPM fwTPM as an OP-TEE trusted application on a Jetson Orin, driven from Linux over libteec by unmodified wolfTPM examples.
The Jetson already ships a firmware TPM, but it reports TPM 2.0 spec revision 1.62 and so has no ML-DSA or ML-KEM, which arrive in revision 1.85. This port puts a 1.85 TPM on the same silicon alongside it.
Adds
ta/-user_ta_header_defines.h, the stack and heap sizes, andsub.mk. The entry points, NV HAL and wolfCrypt platform layer come from wolfTPM and wolfSSL, since none of them is board specificta/prep.sh- symlinks the wolfCrypt, fwTPM and port sources plus the include roots into the build directory, because the OP-TEE build resolvessrcs-yandglobal-incdirs-yagainst thesub.mkdirectory. Also generatesuuid.mkanduuid_macro.incfromWOLFTPM_OPTEE_TA_UUID_STRin wolfTPM, and refuses a configured wolfSSL tree, whose generatedconfig.hat the tree root would otherwise shadow the OP-TEE devkit's own and fail insideuser_ta_header.cuser_settings.h- one file configuring wolfCrypt and wolfTPM, viaWOLFSSL_USER_SETTINGSandWOLFTPM_USER_SETTINGSas the STM32 port does. No generatedoptions.hhost/- a minimal libteec client, built on the boardnative/- a host build of the same sources drivingFWTPM_ProcessCommandthrough a RAM NV HAL, for changing the port under a debugger and the sanitizers. It stands in for the TEE RNG, becauseNO_FILESYSTEMcloses the host seed pathsweep.sh- finds theTA_DATA_SIZEandTA_STACK_SIZEfloors on a boardsp_arm64.cfor RSA and ECC, and the ARMv8 crypto extensions for AES, SHA-2, the ML-KEM transform and Keccak. Each has an opt-out,FWTPM_TA_NO_SP_ASMandFWTPM_TA_NO_ARMASM, because the single precision tables roughly double the trusted application. The README carries the sizes and what each buyskernel/tpm_wolftpm_tee.patch- a diff against Linux v5.15'sdrivers/char/tpm/tpm_ftpm_tee.cthat points it at this UUID, so the firmware TPM appears as/dev/tpm1and standard Linux tooling can drive it. The driver is GPL-2.0 and is not vendored here; the README has the build recipeRequires the
WOLFTPM_OPTEEsupport in wolfTPM, which suppliessrc/fwtpm/ports/optee/andwolftpm/fwtpm/fwtpm_optee.h(wolfSSL/wolfTPM#659), and theWOLFSSL_OPTEEsupport from wolfSSL/wolfssl#11919 and wolfSSL/wolfssl#11927, which supply the build environment and the heap, RNG and time mapping, and are why there are no wolfCrypt platform shims here.Testing
Validated on a Jetson Orin Nano (L4T R36.4.4). Reports
Mfg WOLF (0), Vendor wolfTPMwithTPM_PT_REVISION185. Unmodifiedcaps,getrandom,native_test,wrap_testand the fourpqc/examples pass, and NV persists across separate client processes.