The LAUNCHXL-F28P55X (TMS320F28P550SJ) features a 150 MHz C28x DSP from TI’s C2000 real-time control family. Designed for motor drives, solar inverters, EV chargers, and digital power supplies, it lacks a hardware TRNG.
However, it provides three independent clock sources: two on-chip RC oscillators (INTOSC1 and INTOSC2) and the crystal driving the PLL. Using the chip’s two Dual-Clock Comparators (DCC), one oscillator counts against another. The least significant bit (LSB) of this count captures the relative phase drift (a source of true physical noise).
Hardware measurements show the credited noise source yields 0.93 bits of min-entropy per bit, reaching the statistical limit for this sample size and making it virtually indistinguishable from uniform noise. The system processes this raw stream through a multi-stage pipeline:
- Oversampling: 4x raw bit capture
- Health Testing: Continuous SP 800-90B validation
- Conditioning: SHA-256 compression
- Output Generation: SP 800-90A Hash-DRBG
Enable this feature using WOLFSSL_C2000_ENTROPY or by running make ENTROPY=1 in the reference example. Both this implementation and the hardware-AES port are included in wolfSSL PR #11202.
Because this design relies on general noise principles, the core logic was moved into random.c as the generic wc_NoiseSrc_* module rather than staying in the port. It implements the full suite of NIST SP 800-90B compliance and state-management responsibilities:
- NIST SP 800-90B Health Tests:
- Startup Tests (Section 4.3): Ensures the noise source passes basic entropy checks before generating operational seeds.
- Repetition Count Test (Section 4.4.1): Continuously monitors for “stuck” condition failures where the source outputs identical consecutive values.
- Adaptive Proportion Test (Section 4.4.2): Continuously checks for statistical bias or loss of entropy over a running window of samples.
- Entropy Budget Tracking: Accumulates and enforces min-entropy limits before allowing output.
- Conditioning: Compresses and unbiases raw noise using SHA-256.
- Fail-Closed State Management: Latches permanently into an error state if health tests fail, preventing unseeded output.
Target platforms only need to supply a small configuration struct and a callback function that returns one octet of raw noise. The C2000 driver is left owning only the low-level DCC registers.
Every tuning parameter and hardware selection has a build-time override. You can change oscillator pairings, reallocate DCCs for clock monitoring, or adjust min-entropy estimates via build flags without altering the core port.
Measured on Hardware
A host analyzed 262,144 raw LSB bits extracted per source:
| Source | Min-entropy / bit | Bias | Max abs(acf) lag 1..64 | Chi-square p |
|---|---|---|---|---|
| INTOSC1 window / PLL counted (Credited) | 0.932 | -0.0000 | 0.005 | 0.623 |
| INTOSC2 window / PLL counted | 0.843 | -0.0027 | 0.005 | 0.000 |
| ADC LSB (Floating input) | 0.834 | -0.0086 | 0.073 | 0.000 |
Only INTOSC1 is credited in the entropy budget; the other sources fail the chi-square uniformity test.
The secondary DCC source is still collected and hashed for defense in depth, as additional data cannot reduce overall entropy. Because this secondary source is unbudgeted, a health-test failure simply drops its data without halting seed production.
The analysis script included in the reference example reproduces these metrics.
For questions regarding wolfCrypt entropy sources, SP 800-90B validation, or custom hardware ports, contact facts@wolfssl.com or +1 425 245 8247.
Download wolfSSL Now

