我想盡快把 HMAC-SHA-256 改成用硬體去實現, 不過, 在用硬體之前, 先用純軟體的 nrf_oberon 跑跑看, 首先, 在 CI 加一段, 去找 liboberon 的位子, 找到之後, 在 CI 會看到這個
然後修改 Makefile, 注意第 1, 2, 3 行和第 9 行的 $(LIBS)
CFLAGS += -I$(NRFXLIB_DIR)/crypto/nrf_oberon/include
OBERON_LIB_DIR ?= $(NRFXLIB_DIR)/crypto/nrf_oberon/lib/cortex-m33/soft-float
LDFLAGS += -L$(OBERON_LIB_DIR)
...
sign.elf: $(LDS) $(OBJS) $(RNG_OBJS)
@echo "==> start building with $(CC), output should be $(ELF)"
$(CC) $(CFLAGS) $(SRCS) -v $(LDFLAGS) $(LIBS) -o $(ELF)
然後連結失敗
再修改 Makefile, 注意第18行的$(OBERON_LIB)
ifeq ($(TARGET),nrf52840)
...
ARCH_DIR := cortex-m4
FLOAT_DIR := soft-float
...
else ifeq ($(TARGET),nrf5340dk)
...
ARCH_DIR := cortex-m33+nodsp
FLOAT_DIR := soft-float
...
endif
OBERON_LIB := -L$(NRFXLIB_DIR)/crypto/nrf_oberon/lib/$(ARCH_DIR)/$(FLOAT_DIR)
...
$(CC) $(CFLAGS) $(SRCS) -v $(OBERON_LIB) $(LDFLAGS) -o $(ELF)
nRF52840 的連結成功
但 nRF5340DK 的連結還是失敗
原始碼層級的跨平台是基於HAL進行開發,自始不依賴特定平台,所以我一直沒用真實的開發版,sha2也用軟體版,甚至亂數產生器也隨便弄,甚至前幾天乾脆用KAT的rng.c。
因為我希望我的開發自始就是基於HAL而不是依賴於特定平台特定硬體,直到演算法實作在HAL上成功之後,然後去把底層的硬體相依的code 給補上,再rebuild,到時候就能把焦點放在HAL底層的平台實作。
截至目前為止,簽章的實作已經差不多了,一個 SLH-DSA 的簽章會有的 R、FORS signature 和 HT signature 已經大部份寫了,此時我應該接著把剩餘的code寫完,然後進行KAT的測試,然後直到KAT都PASS了再開始寫HAL底層。
但今天是Day 17了,我希望30天的鐵人賽裡面能有至少10天的時間是留給實體的開發版,所以我打算從今天開始就開始增加 Makefile 和 renode 的篇幅, 早日完成模擬, 早日開始在實體的開發板子上實驗
明天我將繼續解決連結失敗的問題