1 Commits

Author SHA1 Message Date
6c48a29db1 adds initial version of lwc 2025-05-22 11:14:03 +02:00
6 changed files with 92 additions and 74 deletions

4
.gitignore vendored
View File

@@ -12,8 +12,6 @@
*.ilk
*.map
*.exp
# Objdump output
*.dis
# Precompiled Headers
*.gch
@@ -156,5 +154,3 @@ CTestTestfile.cmake
.vscode/c_cpp_properties.json
semihosting_test/build/semihosting_test
semihosting_test/build/Makefile
.cache

View File

@@ -571,7 +571,33 @@ static int ee_vsprintf(char *buf, const char *fmt, va_list args) {
#include <platform.h>
void uart_send_char(char c) { write(STDOUT_FILENO, &c, 1); }
void uart_send_char(char c) {
write(STDOUT_FILENO, &c, 1); // write or puts ??
/*
#if defined(BOARD_ehrenberg)
while (get_uart_rx_tx_reg_tx_free(uart) == 0)
;
uart_write(uart, c);
if (c == '\n') {
while (get_uart_rx_tx_reg_tx_free(uart) == 0)
;
uart_write(uart, '\r');
}
#elif defined(BOARD_iss)
*((uint32_t *)0xFFFF0000) = c;
#else
while (UART0_REG(UART_REG_TXFIFO) & 0x80000000)
;
UART0_REG(UART_REG_TXFIFO) = c;
if (c == '\n') {
while (UART0_REG(UART_REG_TXFIFO) & 0x80000000)
;
UART0_REG(UART_REG_TXFIFO) = '\r';
}
#endif
*/
}
int ee_printf(const char *fmt, ...) {
char buf[1024], *p;

1
lwc/.gitignore vendored
View File

@@ -1 +0,0 @@
build/

View File

@@ -10,45 +10,27 @@ export REPO_HOME = ${PWD}
export ALG ?= ascon
#hash or aead
export API ?= aead
#generic, rv32 or rv64
export ARCH ?= rv32
#nist, rv32 or rv64m if imp is nist does not allow for ASCON_RVXX_TYPE
export IMP ?= rv32
#rvxx requires a ACSCON_RVXX_TYPEX
#export CONF ?= -DASCON_RV32_TYPE1 # -DASCON_RV32_TYPE1 or -DASCON_RV32_TYPE2 (with custom instrs)
export ARCH ?= generic
export IMP ?= nist
export ISE ?= xalu
TARGET = ascon
ISA?=gc_zbb_zbkb_zbkx
export CONF ?=
C_SRCS = $(wildcard *.c)
HEADERS = $(wildcard *.h)
OPT ?= -O0
CFLAGS += $(OPT) -g
#CFLAGS += -DDRIVER_BYPASS_TEST
CFLAGS += -DDRIVER_BYPASS_TIME #Time throws a trap somewhere
# -----------------------------------------------------------------------------
BOARD=iss
LINK_TARGET=link
RISCV_ARCH:=rv32$(ISA)
ifeq ($(ISA),e)
RISCV_ABI:=ilp32e
else
RISCV_ABI:=ilp32
endif
LDFLAGS += -g -Wl,--wrap=printf
sw-build :
@make --directory="${REPO_HOME}/src" build
sw-run :
@make --directory="${REPO_HOME}/src" run
sw-scan :
@make --directory="${REPO_HOME}/src" scan
sw-clean :
@make --directory="${REPO_HOME}/src" clean
compiler := $(shell which riscv64-unknown-elf-gcc)
TOOL_DIR=$(dir $(compiler))
# -----------------------------------------------------------------------------
TRIPLET=riscv64-unknown-elf
BSP_BASE = ../bare-metal-bsp
all: ${TARGET}.elf
include ${REPO_HOME}/src/Makefile
CFLAGS += ${GCC_FLAGS}
include $(BSP_BASE)/env/common-gcc.mk
clean :
@rm --force --recursive ${REPO_HOME}/build/*
# =============================================================================

View File

@@ -4,17 +4,27 @@
# can be found at https://opensource.org/licenses/MIT (or should be included
# as LICENSE.txt within the associated archive or repository).
ifndef REPO_HOME
$(error "execute 'source ./bin/conf.sh' to configure environment")
endif
ifndef REPO_VERSION
$(error "execute 'source ./bin/conf.sh' to configure environment")
endif
export API ?= aead
# =============================================================================
# include build-related content for algorithm
include ${REPO_HOME}/src/${ALG}/Makefile.in
include ./${ALG}/Makefile.in
# include build-related content for architecture
#include ${REPO_HOME}/src/share/arch/${ARCH}/Makefile.in
include ./share/arch/${ARCH}/Makefile.in
# parameterise source code using environment variables
ifeq "${API}" "aead"
GCC_FLAGS += -DAPI_AEAD
endif
ifeq "${API}" "hash"
GCC_FLAGS += -DAPI_HASH
endif
@@ -27,9 +37,9 @@ endif
# -----------------------------------------------------------------------------
ifeq "${IMP}" "nist"
export LWISE_INCLUDES += ${REPO_HOME}/build/${ALG} ${REPO_HOME}/src/share ${REPO_HOME}/src/share/nist ${REPO_HOME}/src/share/arch/${ARCH}
export LWISE_INCLUDES += ${REPO_HOME}/build/${ALG} ./share ./share/nist ./share/arch/${ARCH}
else
export LWISE_INCLUDES += ${REPO_HOME}/build/${ALG} ${REPO_HOME}/src/share ${REPO_HOME}/src/share/nist ${REPO_HOME}/src/share/arch/${ARCH} ${REPO_HOME}/src/${ALG}/arch/${ARCH} ${REPO_HOME}/src/${ALG}/imp/${IMP} ${REPO_HOME}/src/${ALG}/imp/share
export LWISE_INCLUDES += ${REPO_HOME}/build/${ALG} ./share ./share/nist ./share/arch/${ARCH} ./${ALG}/arch/${ARCH} ./${ALG}/imp/${IMP} ./${ALG}/imp/share
endif
export LWISE_SOURCES += $(wildcard $(addsuffix /*.c, ${LWISE_INCLUDES}))
@@ -38,30 +48,32 @@ export LWISE_SOURCES += $(wildcard $(addsuffix /*.s, ${LWISE_INCLUDES}))
export LWISE_SOURCES += $(wildcard $(addsuffix /*.S, ${LWISE_INCLUDES}))
export LWISE_HEADERS += $(wildcard $(addsuffix /*.h, ${LWISE_INCLUDES}))
export ALL_INCLUDES := ${LWISE_INCLUDES} ${NIST_INCLUDES} ${REPO_HOME}/build/${ALG}
INCLUDES += $(foreach dir,$(ALL_INCLUDES),-I$(dir))
export INCLUDES := ${LWISE_INCLUDES} ${NIST_INCLUDES}
export SOURCES := ${LWISE_SOURCES} ${NIST_SOURCES}
export HEADERS := ${LWISE_HEADERS} ${NIST_HEADERS}
export SOURCES := ${LWISE_SOURCES} ${NIST_SOURCES} ${REPO_HOME}/build/${ALG}/kat_${API}.c
export HEADERS := ${LWISE_HEADERS} ${NIST_HEADERS} ${REPO_HOME}/build/${ALG}/kat_${API}.h
export TARGETS += ${REPO_HOME}/build/${ALG}
export TARGETS += ${REPO_HOME}/build/${ALG}/kat_${API}.h
export TARGETS += ${REPO_HOME}/build/${ALG}/kat_${API}.c
export TARGETS += ${REPO_HOME}/build/${ALG}/driver-${API}_${ARCH}_${IMP}.elf
export TARGETS += ${REPO_HOME}/build/${ALG}/driver-${API}_${ARCH}_${IMP}.asm
# -----------------------------------------------------------------------------
${REPO_HOME}/build/${ALG} :
@mkdir --parents ${@}
${SOURCES} : ${REPO_HOME}/build/${ALG}/kat_${API}.c ${REPO_HOME}/build/${ALG}/kat_${API}.h
${REPO_HOME}/build/${ALG}/kat_${API}.h : ${NIST_KAT}
@python3 ${REPO_HOME}/src/share/kat.py --api="${API}" --header < ${<} > ${@}
@python3 ./share/kat.py --api="${API}" --header < ${<} > ${@}
${REPO_HOME}/build/${ALG}/kat_${API}.c : ${NIST_KAT}
@python3 ${REPO_HOME}/src/share/kat.py --api="${API}" --source < ${<} > ${@}
@python3 ./share/kat.py --api="${API}" --source < ${<} > ${@}
${REPO_HOME}/build/${ALG}/driver-${API}_${ARCH}_${IMP}.elf : ${SOURCES}
@${GCC_PREFIX}-gcc ${GCC_FLAGS} ${GCC_PATHS} $(addprefix -I ,${INCLUDES}) -std='gnu99' -O3 -o ${@} $(filter %.c, ${^}) $(filter %.cpp, ${^}) $(filter %.S, ${^}) ${GCC_LIBS}
C_SRCS += $(filter %.c, ${SOURCES})
CXX_SRCS += $(filter %.cpp, ${SOURCES})
ASM_SRCS += $(filter %.S, ${SOURCES})
${REPO_HOME}/build/${ALG}/driver-${API}_${ARCH}_${IMP}.asm : ${REPO_HOME}/build/${ALG}/driver-${API}_${ARCH}_${IMP}.elf
@${GCC_PREFIX}-objdump --disassemble-all ${<} > ${@}
# -----------------------------------------------------------------------------
@@ -90,6 +102,9 @@ dump :
@echo "HEADERS = ${HEADERS}"
@echo "TARGETS = ${TARGETS}"
@echo "ASM_SRCS = ${ASM_SRCS}"
build : ${TARGETS}
clean :
@rm --force --recursive ${TARGETS}
# =============================================================================

View File

@@ -255,39 +255,39 @@ int main( int argc, char* argv[] ) {
rand_bytes_init();
#if defined( API_AEAD ) && !defined( DRIVER_BYPASS_TEST )
printf( "++ test : encrypt\n" "\n" );
printf( "++ test : encrypt" "\n" );
test_encrypt();
printf( "-- test : encrypt\n" "\n" );
printf( "-- test : encrypt" "\n" );
printf( "++ test : decrypt\n" "\n" );
printf( "++ test : decrypt" "\n" );
test_decrypt();
printf( "-- test : decrypt\n" "\n" );
printf( "-- test : decrypt" "\n" );
#endif
#if defined( API_HASH ) && !defined( DRIVER_BYPASS_TEST )
printf( "++ test : hash\n" "\n" );
printf( "++ test : hash" "\n" );
test_hash();
printf( "-- test : hash\n" "\n" );
printf( "-- test : hash" "\n" );
#endif
#if defined( API_AEAD ) && !defined( DRIVER_BYPASS_TIME )
printf( "++ time : encrypt\n" "\n" );
printf( "++ time : encrypt" "\n" );
time_encrypt();
printf( "-- time : encrypt\n" "\n" );
printf( "-- time : encrypt" "\n" );
printf( "++ time : decrypt\n" "\n" );
printf( "++ time : decrypt" "\n" );
time_decrypt();
printf( "-- time : decrypt\n" "\n" );
printf( "-- time : decrypt" "\n" );
printf( "++ time : kernel\n" "\n" );
printf( "++ time : kernel" "\n" );
time_kernel();
printf( "-- time : kernel\n" "\n" );
printf( "-- time : kernel" "\n" );
#endif
#if defined( API_HASH ) && !defined( DRIVER_BYPASS_TIME )
printf( "++ time : hash\n" "\n" );
printf( "++ time : hash" "\n" );
time_hash();
printf( "-- time : hash\n" "\n" );
printf( "-- time : hash" "\n" );
#endif
rand_bytes_fini();