.include <bsd.own.mk>

PROG=	mlsignify
SRCS+=	mlsignify-main.c
CPPFLAGS+=	-I${DIST} -I${DIST}/liboqs
WARNS=	5
MKMAN=	no

.sinclude "../../namespace.mk"

# uncomment this to build a 5MB executable, statically linked
#LDSTATIC=	-static

DIST=	${.CURDIR}/../../dist
.PATH: ${DIST}

LIB_MLDSA_DIR!=	cd ${.CURDIR}/../../lib && ${PRINTOBJDIR}
LDADD+=		-L${LIB_MLDSA_DIR} -lmldsa -lcrypto
DPADD+=		${LIB_MLDSA_DIR}/libmldsa.a

.include <bsd.prog.mk>

t: ${PROG}
	@echo "1. Keygen"
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -G -p default.pub -s default.sec > 1.out
	diff 1.expected 1.out
	ls -l default.*
	rm -f 1.out default.*
	@echo "2. keygen for named keys"
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -p test-20260817.pub -s test-20260817.sec -G > 2.out
	diff 2.expected 2.out
	ls -l test-20260817.*
	rm -f 2.out test-20260817.*
	@echo "3. keygen for more named keys"
	if [ -f 2026Q5-signing-key.pub -o -f 2026Q5-signing-key.sec ]; then \
		rm -f 2026Q5-signing-key.*;				\
	fi
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -G -p 2026Q5-signing-key.pub -s 2026Q5-signing-key.sec > 3.out
	diff 3.expected 3.out
	ls -l 2026Q5-signing-key.*
	rm -f 3.out
	@echo "4. use sec key to sign something"
	rm -f data.2026Q5-signing-key.sig
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -S -s 2026Q5-signing-key.sec -m data > 4.out
	diff 4.expected 4.out
	ls -al data*
	rm -f 4.out
	@echo "5. use pub key to verify the signature"
	ls -al 2026Q5-signing-key.*
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -V -p 2026Q5-signing-key.pub -m data > 5.out
	diff 5.expected 5.out
	ls -al data*
	rm -f 5.out
	@echo "6. sign and verify stream data"
	ls -al 2026Q5-signing-key.*
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -S -s 2026Q5-signing-key.sec -e < data > 6embed.out
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -V -p 2026Q5-signing-key.pub -e < 6embed.out > 6.out
	ls -al data 6embed.out 6.out
	diff 6.expected 6.out
	rm -f 6.out 6embed.out data.2026Q5-signing-key.sig
	@echo "7. no pass signing"
	ls -al 2026Q5-signing-key.*
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -G -n -p nopass.pub -s nopass.sec
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -S -s nopass.sec -e < data > 7embed.out
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -V -p nopass.pub -e < 7embed.out > 7.out
	ls -al data 7embed.out 7.out
	diff 7.expected 7.out
	rm -f 7.out 7embed.out data.nopass.sig nopass.pub nopass.sec
	@echo "8. use pub key to sign and verify the signature, quiet"
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -G -q -n -p nopass.pub -s nopass.sec
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -S -q -s nopass.sec -m data > 8.out
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -V -q -p nopass.pub -m data > 8a.out
	diff 8.expected 8.out
	diff 8a.expected 8a.out
	rm -f 8.out 8a.out data.nopass.sig nopass.sec nopass.pub
	@echo "9. check sha256 file list"
	sha256 Makefile data 6.expected > list
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -G -q -n -p nopass.pub -s nopass.sec
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -S -q -s nopass.sec -m list
	ls -al list*
	env LD_LIBRARY_PATH=${LIB_MLDSA_DIR} ./${PROG} -C -p nopass.pub -x list.nopass.sig > 9.out
	diff 9.expected 9.out
	rm -f 9.out nopass.* list list.nopass.sig
