@@ -14,9 +14,9 @@ test/test_xmssmt_core_fast_XMSSMT* | |||||
test/test_determinism | test/test_determinism | ||||
test/speed | test/speed | ||||
test/gen_testvectors | test/gen_testvectors | ||||
test/xmss_keypair | |||||
test/xmss_open | |||||
test/xmss_sign | |||||
test/xmssmt_keypair | |||||
test/xmssmt_open | |||||
test/xmssmt_sign | |||||
ui/xmss_keypair | |||||
ui/xmss_open | |||||
ui/xmss_sign | |||||
ui/xmssmt_keypair | |||||
ui/xmssmt_open | |||||
ui/xmssmt_sign |
@@ -17,12 +17,12 @@ TESTS = test/test_wots \ | |||||
test/test_xmssmt \ | test/test_xmssmt \ | ||||
test/test_determinism \ | test/test_determinism \ | ||||
UI = test/xmss_keypair \ | |||||
test/xmss_sign \ | |||||
test/xmss_open \ | |||||
test/xmssmt_keypair \ | |||||
test/xmssmt_sign \ | |||||
test/xmssmt_open \ | |||||
UI = ui/xmss_keypair \ | |||||
ui/xmss_sign \ | |||||
ui/xmss_open \ | |||||
ui/xmssmt_keypair \ | |||||
ui/xmssmt_sign \ | |||||
ui/xmssmt_open \ | |||||
all: $(TESTS) $(UI) | all: $(TESTS) $(UI) | ||||
@@ -37,6 +37,12 @@ test/%: test/%.c $(SOURCES) $(OBJS) $(HEADERS) | |||||
test/test_wots: params.c hash.c fips202.c hash_address.c randombytes.c wots.c xmss_commons.c test/test_wots.c params.h hash.h fips202.h hash_address.h randombytes.h wots.h xmss_commons.h | test/test_wots: params.c hash.c fips202.c hash_address.c randombytes.c wots.c xmss_commons.c test/test_wots.c params.h hash.h fips202.h hash_address.h randombytes.h wots.h xmss_commons.h | ||||
$(CC) $(CFLAGS) params.c hash.c fips202.c hash_address.c randombytes.c wots.c xmss_commons.c test/test_wots.c -o $@ -lcrypto | $(CC) $(CFLAGS) params.c hash.c fips202.c hash_address.c randombytes.c wots.c xmss_commons.c test/test_wots.c -o $@ -lcrypto | ||||
ui/xmss_%: ui/%.c $(SOURCES) $(OBJS) $(HEADERS) | |||||
$(CC) $(CFLAGS) -o $@ $(SOURCES) $< $(LDLIBS) | |||||
ui/xmssmt_%: ui/%.c $(SOURCES) $(OBJS) $(HEADERS) | |||||
$(CC) -DXMSSMT $(CFLAGS) -o $@ $(SOURCES) $< $(LDLIBS) | |||||
clean: | clean: | ||||
-$(RM) $(TESTS) | -$(RM) $(TESTS) | ||||
-$(RM) $(UI) | -$(RM) $(UI) |
@@ -1,30 +0,0 @@ | |||||
#include "../params.h" | |||||
#include "../xmss.h" | |||||
#include <stdio.h> | |||||
#include <stdint.h> | |||||
int main(int argc, char **argv) | |||||
{ | |||||
xmss_params params; | |||||
uint32_t oid; | |||||
if (argc != 2) { | |||||
fprintf(stderr, "Expected parameter string (e.g. 'XMSS-SHA2_10_256')" | |||||
" as only parameter.\n" | |||||
"The keypair is written to stdout.\n"); | |||||
return -1; | |||||
} | |||||
xmssmt_str_to_oid(&oid, argv[1]); | |||||
xmssmt_parse_oid(¶ms, oid); | |||||
unsigned char pk[XMSS_OID_LEN + params.pk_bytes]; | |||||
unsigned char sk[XMSS_OID_LEN + params.sk_bytes]; | |||||
xmssmt_keypair(pk, sk, oid); | |||||
fwrite(pk, 1, XMSS_OID_LEN + params.pk_bytes, stdout); | |||||
fwrite(sk, 1, XMSS_OID_LEN + params.sk_bytes, stdout); | |||||
fclose(stdout); | |||||
} |
@@ -1,47 +0,0 @@ | |||||
#include "../params.h" | |||||
#include "../xmss_core.h" | |||||
#include <stdio.h> | |||||
#define MLEN 32 | |||||
int main(int argc, char **argv) { | |||||
FILE *keypair; | |||||
xmss_params params; | |||||
uint32_t oid; | |||||
int ret; | |||||
if (argc != 2) { | |||||
fprintf(stderr, "Expected keypair filename as only parameter, " | |||||
"and the signature + message via stdin.\n" | |||||
"Keypair file needs only to contain the public key.\n" | |||||
"The return code 0 indicates verification success.\n"); | |||||
return -1; | |||||
} | |||||
keypair = fopen(argv[1], "rb"); | |||||
if (keypair == NULL) { | |||||
return -1; | |||||
} | |||||
fread(&oid, 1, XMSS_OID_LEN, keypair); | |||||
xmssmt_parse_oid(¶ms, oid); | |||||
unsigned char pk[params.pk_bytes]; | |||||
unsigned char sm[params.sig_bytes + MLEN]; | |||||
unsigned char m[params.sig_bytes + MLEN]; | |||||
unsigned long long mlen; | |||||
fread(pk, 1, params.pk_bytes, keypair); | |||||
fread(sm, 1, params.sig_bytes + MLEN, stdin); | |||||
ret = xmssmt_core_sign_open(¶ms, m, &mlen, sm, params.sig_bytes + MLEN, pk); | |||||
if (ret) { | |||||
printf("Verification failed!\n"); | |||||
} | |||||
else { | |||||
printf("Verification succeeded.\n"); | |||||
} | |||||
return ret; | |||||
} |
@@ -1,52 +0,0 @@ | |||||
#include "../params.h" | |||||
#include "../xmss_core.h" | |||||
#include <stdio.h> | |||||
#define MLEN 32 | |||||
int main(int argc, char **argv) { | |||||
FILE *keypair; | |||||
xmss_params params; | |||||
uint32_t oid_pk; | |||||
uint32_t oid_sk; | |||||
if (argc != 2) { | |||||
fprintf(stderr, "Expected keypair filename as only parameter, " | |||||
"and the message via stdin.\n" | |||||
"The keypair is updated with the changed state, " | |||||
"and the message + signature is output via stdout.\n"); | |||||
return -1; | |||||
} | |||||
keypair = fopen(argv[1], "r+b"); | |||||
if (keypair == NULL) { | |||||
fprintf(stderr, "Could not open keypair file.\n"); | |||||
return -1; | |||||
} | |||||
/* Read the OID from the public key, as we need its length to seek past it. */ | |||||
fread(&oid_pk, 1, XMSS_OID_LEN, keypair); | |||||
xmssmt_parse_oid(¶ms, oid_pk); | |||||
/* fseek past the public key. */ | |||||
fseek(keypair, params.pk_bytes, SEEK_CUR); | |||||
/* This is the OID we're actually going to use. Likely the same, but still.. */ | |||||
fread(&oid_sk, 1, XMSS_OID_LEN, keypair); | |||||
xmssmt_parse_oid(¶ms, oid_sk); | |||||
unsigned char sk[params.sk_bytes]; | |||||
unsigned char m[MLEN]; | |||||
unsigned char sm[params.sig_bytes + MLEN]; | |||||
unsigned long long smlen; | |||||
fread(sk, 1, params.sk_bytes, keypair); | |||||
fread(m, 1, MLEN, stdin); | |||||
xmssmt_core_sign(¶ms, sk, sm, &smlen, m, MLEN); | |||||
fseek(keypair, -((long int)params.sk_bytes), SEEK_CUR); | |||||
fwrite(sk, 1, params.sk_bytes, keypair); | |||||
fwrite(sm, 1, params.sig_bytes + MLEN, stdout); | |||||
fclose(keypair); | |||||
fclose(stdout); | |||||
} |
@@ -3,6 +3,16 @@ | |||||
#include <stdio.h> | #include <stdio.h> | ||||
#include <stdint.h> | #include <stdint.h> | ||||
#ifdef XMSSMT | |||||
#define XMSS_STR_TO_OID xmssmt_str_to_oid | |||||
#define XMSS_PARSE_OID xmssmt_parse_oid | |||||
#define XMSS_KEYPAIR xmssmt_keypair | |||||
#else | |||||
#define XMSS_STR_TO_OID xmss_str_to_oid | |||||
#define XMSS_PARSE_OID xmss_parse_oid | |||||
#define XMSS_KEYPAIR xmss_keypair | |||||
#endif | |||||
int main(int argc, char **argv) | int main(int argc, char **argv) | ||||
{ | { | ||||
xmss_params params; | xmss_params params; | ||||
@@ -15,13 +25,13 @@ int main(int argc, char **argv) | |||||
return -1; | return -1; | ||||
} | } | ||||
xmss_str_to_oid(&oid, argv[1]); | |||||
xmss_parse_oid(¶ms, oid); | |||||
XMSS_STR_TO_OID(&oid, argv[1]); | |||||
XMSS_PARSE_OID(¶ms, oid); | |||||
unsigned char pk[XMSS_OID_LEN + params.pk_bytes]; | unsigned char pk[XMSS_OID_LEN + params.pk_bytes]; | ||||
unsigned char sk[XMSS_OID_LEN + params.sk_bytes]; | unsigned char sk[XMSS_OID_LEN + params.sk_bytes]; | ||||
xmss_keypair(pk, sk, oid); | |||||
XMSS_KEYPAIR(pk, sk, oid); | |||||
fwrite(pk, 1, XMSS_OID_LEN + params.pk_bytes, stdout); | fwrite(pk, 1, XMSS_OID_LEN + params.pk_bytes, stdout); | ||||
fwrite(sk, 1, XMSS_OID_LEN + params.sk_bytes, stdout); | fwrite(sk, 1, XMSS_OID_LEN + params.sk_bytes, stdout); |
@@ -4,6 +4,14 @@ | |||||
#define MLEN 32 | #define MLEN 32 | ||||
#ifdef XMSSMT | |||||
#define XMSS_PARSE_OID xmssmt_parse_oid | |||||
#define XMSS_CORE_SIGN_OPEN xmssmt_core_sign_open | |||||
#else | |||||
#define XMSS_PARSE_OID xmss_parse_oid | |||||
#define XMSS_CORE_SIGN_OPEN xmss_core_sign_open | |||||
#endif | |||||
int main(int argc, char **argv) { | int main(int argc, char **argv) { | ||||
FILE *keypair; | FILE *keypair; | ||||
xmss_params params; | xmss_params params; | ||||
@@ -24,7 +32,7 @@ int main(int argc, char **argv) { | |||||
} | } | ||||
fread(&oid, 1, XMSS_OID_LEN, keypair); | fread(&oid, 1, XMSS_OID_LEN, keypair); | ||||
xmss_parse_oid(¶ms, oid); | |||||
XMSS_PARSE_OID(¶ms, oid); | |||||
unsigned char pk[params.pk_bytes]; | unsigned char pk[params.pk_bytes]; | ||||
unsigned char sm[params.sig_bytes + MLEN]; | unsigned char sm[params.sig_bytes + MLEN]; | ||||
@@ -34,7 +42,7 @@ int main(int argc, char **argv) { | |||||
fread(pk, 1, params.pk_bytes, keypair); | fread(pk, 1, params.pk_bytes, keypair); | ||||
fread(sm, 1, params.sig_bytes + MLEN, stdin); | fread(sm, 1, params.sig_bytes + MLEN, stdin); | ||||
ret = xmss_core_sign_open(¶ms, m, &mlen, sm, params.sig_bytes + MLEN, pk); | |||||
ret = XMSS_CORE_SIGN_OPEN(¶ms, m, &mlen, sm, params.sig_bytes + MLEN, pk); | |||||
if (ret) { | if (ret) { | ||||
printf("Verification failed!\n"); | printf("Verification failed!\n"); |
@@ -4,6 +4,14 @@ | |||||
#define MLEN 32 | #define MLEN 32 | ||||
#ifdef XMSSMT | |||||
#define XMSS_PARSE_OID xmssmt_parse_oid | |||||
#define XMSS_CORE_SIGN xmssmt_core_sign | |||||
#else | |||||
#define XMSS_PARSE_OID xmss_parse_oid | |||||
#define XMSS_CORE_SIGN xmss_core_sign | |||||
#endif | |||||
int main(int argc, char **argv) { | int main(int argc, char **argv) { | ||||
FILE *keypair; | FILE *keypair; | ||||
xmss_params params; | xmss_params params; | ||||
@@ -26,13 +34,13 @@ int main(int argc, char **argv) { | |||||
/* Read the OID from the public key, as we need its length to seek past it */ | /* Read the OID from the public key, as we need its length to seek past it */ | ||||
fread(&oid_pk, 1, XMSS_OID_LEN, keypair); | fread(&oid_pk, 1, XMSS_OID_LEN, keypair); | ||||
xmss_parse_oid(¶ms, oid_pk); | |||||
XMSS_PARSE_OID(¶ms, oid_pk); | |||||
/* fseek past the public key */ | /* fseek past the public key */ | ||||
fseek(keypair, params.pk_bytes, SEEK_CUR); | fseek(keypair, params.pk_bytes, SEEK_CUR); | ||||
/* This is the OID we're actually going to use. Likely the same, but still. */ | /* This is the OID we're actually going to use. Likely the same, but still. */ | ||||
fread(&oid_sk, 1, XMSS_OID_LEN, keypair); | fread(&oid_sk, 1, XMSS_OID_LEN, keypair); | ||||
xmss_parse_oid(¶ms, oid_sk); | |||||
XMSS_PARSE_OID(¶ms, oid_sk); | |||||
unsigned char sk[params.sk_bytes]; | unsigned char sk[params.sk_bytes]; | ||||
unsigned char m[MLEN]; | unsigned char m[MLEN]; | ||||
@@ -41,7 +49,7 @@ int main(int argc, char **argv) { | |||||
fread(sk, 1, params.sk_bytes, keypair); | fread(sk, 1, params.sk_bytes, keypair); | ||||
fread(m, 1, MLEN, stdin); | fread(m, 1, MLEN, stdin); | ||||
xmss_core_sign(¶ms, sk, sm, &smlen, m, MLEN); | |||||
XMSS_CORE_SIGN(¶ms, sk, sm, &smlen, m, MLEN); | |||||
fseek(keypair, -((long int)params.sk_bytes), SEEK_CUR); | fseek(keypair, -((long int)params.sk_bytes), SEEK_CUR); | ||||
fwrite(sk, 1, params.sk_bytes, keypair); | fwrite(sk, 1, params.sk_bytes, keypair); |