Skip to content

Commit b28a953

Browse files
committed
SHA-2 PreHash ML-DSA
Signed-off-by: Matthias J. Kannwischer <[email protected]>
1 parent 78f112b commit b28a953

File tree

7 files changed

+846
-35
lines changed

7 files changed

+846
-35
lines changed

Makefile.Microsoft_nmake

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,23 @@
55
CFLAGS = /nologo /O2 /Imldsa /Imlmdsa/fips202 /Imldsa/fips202/native /Imldsa/native
66

77
OBJ_FILES = .\mldsa\*.obj \
8-
.\mldsa\fips202\*.obj
8+
.\mldsa\fips202\*.obj \
9+
.\mldsa\sha2\*.obj
910

1011
BUILD_DIR = test\build
1112
MLDSA44_BUILD_DIR = $(BUILD_DIR)\mldsa44
1213
MLDSA65_BUILD_DIR = $(BUILD_DIR)\mldsa65
1314
MLDSA87_BUILD_DIR = $(BUILD_DIR)\mldsa87
1415

1516
OBJ_FILES_44 = $(MLDSA44_BUILD_DIR)\mldsa\*.obj \
16-
$(MLDSA44_BUILD_DIR)\mldsa\fips202\*.obj
17+
$(MLDSA44_BUILD_DIR)\mldsa\fips202\*.obj \
18+
$(MLDSA44_BUILD_DIR)\mldsa\sha2\*.obj
1719
OBJ_FILES_65 = $(MLDSA65_BUILD_DIR)\mldsa\*.obj \
18-
$(MLDSA65_BUILD_DIR)\mldsa\fips202\*.obj
20+
$(MLDSA65_BUILD_DIR)\mldsa\fips202\*.obj \
21+
$(MLDSA65_BUILD_DIR)\mldsa\sha2\*.obj
1922
OBJ_FILES_87 = $(MLDSA87_BUILD_DIR)\mldsa\*.obj \
20-
$(MLDSA87_BUILD_DIR)\mldsa\fips202\*.obj
23+
$(MLDSA87_BUILD_DIR)\mldsa\fips202\*.obj \
24+
$(MLDSA87_BUILD_DIR)\mldsa\sha2\*.obj
2125

2226
# NOTE: We currently only build code for non-opt code, as we haven't yet made the assembly compatible on Windows
2327
!IFNDEF OPT
@@ -37,6 +41,10 @@ OPT = 0
3741
@if NOT EXIST $(MLDSA44_BUILD_DIR)\mldsa\fips202 mkdir $(MLDSA44_BUILD_DIR)\mldsa\fips202
3842
$(CC) $(CFLAGS) /D MLD_CONFIG_PARAMETER_SET=44 /c /Fo$(MLDSA44_BUILD_DIR)\mldsa\fips202\ $<
3943

44+
{mldsa\sha2}.c{$(MLDSA44_BUILD_DIR)\mldsa\sha2}.obj::
45+
@if NOT EXIST $(MLDSA44_BUILD_DIR)\mldsa\sha2 mkdir $(MLDSA44_BUILD_DIR)\mldsa\sha2
46+
$(CC) $(CFLAGS) /D MLD_CONFIG_PARAMETER_SET=44 /c /Fo$(MLDSA44_BUILD_DIR)\mldsa\sha2\ $<
47+
4048
{test}.c{$(MLDSA44_BUILD_DIR)\test}.obj::
4149
@if NOT EXIST $(MLDSA44_BUILD_DIR)\test mkdir $(MLDSA44_BUILD_DIR)\test
4250
$(CC) $(CFLAGS) /D MLD_CONFIG_PARAMETER_SET=44 /c /Fo$(MLDSA44_BUILD_DIR)\test\ $<
@@ -50,6 +58,10 @@ OPT = 0
5058
@if NOT EXIST $(MLDSA65_BUILD_DIR)\mldsa\fips202 mkdir $(MLDSA65_BUILD_DIR)\mldsa\fips202
5159
$(CC) $(CFLAGS) /D MLD_CONFIG_PARAMETER_SET=65 /c /Fo$(MLDSA65_BUILD_DIR)\mldsa\fips202\ $<
5260

61+
{mldsa\sha2}.c{$(MLDSA65_BUILD_DIR)\mldsa\sha2}.obj::
62+
@if NOT EXIST $(MLDSA65_BUILD_DIR)\mldsa\sha2 mkdir $(MLDSA65_BUILD_DIR)\mldsa\sha2
63+
$(CC) $(CFLAGS) /D MLD_CONFIG_PARAMETER_SET=65 /c /Fo$(MLDSA65_BUILD_DIR)\mldsa\sha2\ $<
64+
5365
{test}.c{$(MLDSA65_BUILD_DIR)\test}.obj::
5466
@if NOT EXIST $(MLDSA65_BUILD_DIR)\test mkdir $(MLDSA65_BUILD_DIR)\test
5567
$(CC) $(CFLAGS) /D MLD_CONFIG_PARAMETER_SET=65 /c /Fo$(MLDSA65_BUILD_DIR)\test\ $<
@@ -63,6 +75,10 @@ OPT = 0
6375
@if NOT EXIST $(MLDSA87_BUILD_DIR)\mldsa\fips202 mkdir $(MLDSA87_BUILD_DIR)\mldsa\fips202
6476
$(CC) $(CFLAGS) /D MLD_CONFIG_PARAMETER_SET=87 /c /Fo$(MLDSA87_BUILD_DIR)\mldsa\fips202\ $<
6577

78+
{mldsa\sha2}.c{$(MLDSA87_BUILD_DIR)\mldsa\sha2}.obj::
79+
@if NOT EXIST $(MLDSA87_BUILD_DIR)\mldsa\sha2 mkdir $(MLDSA87_BUILD_DIR)\mldsa\sha2
80+
$(CC) $(CFLAGS) /D MLD_CONFIG_PARAMETER_SET=87 /c /Fo$(MLDSA87_BUILD_DIR)\mldsa\sha2\ $<
81+
6682
{test}.c{$(MLDSA87_BUILD_DIR)\test}.obj::
6783
@if NOT EXIST $(MLDSA87_BUILD_DIR)\test mkdir $(MLDSA87_BUILD_DIR)\test
6884
$(CC) $(CFLAGS) /D MLD_CONFIG_PARAMETER_SET=87 /c /Fo$(MLDSA87_BUILD_DIR)\test\ $<

mldsa/sha2/sha2.h

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
/*
2+
* Copyright (c) The mldsa-native project authors
3+
* Copyright (c) The slhdsa-c project authors
4+
* SPDX-License-Identifier: Apache-2.0 OR ISC OR MIT
5+
*/
6+
7+
#ifndef MLD_SHA2_SHA2_H
8+
#define MLD_SHA2_SHA2_H
9+
10+
11+
/* FIPS 180-4 (SHA-2) */
12+
13+
#include <stddef.h>
14+
#include <stdint.h>
15+
#include "../cbmc.h"
16+
17+
#define SHA2_224_HASHBYTES 28
18+
#define SHA2_256_HASHBYTES 32
19+
#define SHA2_384_HASHBYTES 48
20+
#define SHA2_512_HASHBYTES 64
21+
#define SHA2_512_224_HASHBYTES 28
22+
#define SHA2_512_256_HASHBYTES 32
23+
24+
#define FIPS180_NAMESPACE(s) mldsa_fips180_ref_##s
25+
26+
#define mld_sha2_224 FIPS180_NAMESPACE(sha2_224)
27+
/*************************************************
28+
* Name: mld_sha2_224
29+
*
30+
* Description: SHA2-224 hash function
31+
*
32+
* Arguments: - uint8_t *out: pointer to output (28 bytes)
33+
* - const uint8_t *in: pointer to input
34+
* - size_t inlen: length of input in bytes
35+
**************************************************/
36+
void mld_sha2_224(uint8_t *out, const uint8_t *in, size_t inlen);
37+
38+
#define mld_sha2_256 FIPS180_NAMESPACE(sha2_256)
39+
/*************************************************
40+
* Name: mld_sha2_256
41+
*
42+
* Description: SHA2-256 hash function
43+
*
44+
* Arguments: - uint8_t *out: pointer to output (32 bytes)
45+
* - const uint8_t *in: pointer to input
46+
* - size_t inlen: length of input in bytes
47+
**************************************************/
48+
void mld_sha2_256(uint8_t *out, const uint8_t *in, size_t inlen);
49+
50+
#define mld_sha2_384 FIPS180_NAMESPACE(sha2_384)
51+
/*************************************************
52+
* Name: mld_sha2_384
53+
*
54+
* Description: SHA2-384 hash function
55+
*
56+
* Arguments: - uint8_t *out: pointer to output (48 bytes)
57+
* - const uint8_t *in: pointer to input
58+
* - size_t inlen: length of input in bytes
59+
**************************************************/
60+
void mld_sha2_384(uint8_t *out, const uint8_t *in, size_t inlen);
61+
62+
#define mld_sha2_512 FIPS180_NAMESPACE(sha2_512)
63+
/*************************************************
64+
* Name: mld_sha2_512
65+
*
66+
* Description: SHA2-512 hash function
67+
*
68+
* Arguments: - uint8_t *out: pointer to output (64 bytes)
69+
* - const uint8_t *in: pointer to input
70+
* - size_t inlen: length of input in bytes
71+
**************************************************/
72+
void mld_sha2_512(uint8_t *out, const uint8_t *in, size_t inlen);
73+
74+
#define mld_sha2_512_224 FIPS180_NAMESPACE(sha2_512_224)
75+
/*************************************************
76+
* Name: mld_sha2_512_224
77+
*
78+
* Description: SHA2-512/224 hash function
79+
*
80+
* Arguments: - uint8_t *out: pointer to output (28 bytes)
81+
* - const uint8_t *in: pointer to input
82+
* - size_t inlen: length of input in bytes
83+
**************************************************/
84+
void mld_sha2_512_224(uint8_t *out, const uint8_t *in, size_t inlen);
85+
86+
#define mld_sha2_512_256 FIPS180_NAMESPACE(sha2_512_256)
87+
/*************************************************
88+
* Name: mld_sha2_512_256
89+
*
90+
* Description: SHA2-512/256 hash function
91+
*
92+
* Arguments: - uint8_t *out: pointer to output (32 bytes)
93+
* - const uint8_t *in: pointer to input
94+
* - size_t inlen: length of input in bytes
95+
**************************************************/
96+
void mld_sha2_512_256(uint8_t *out, const uint8_t *in, size_t inlen);
97+
98+
#endif /* !MLD_SHA2_SHA2_H */

0 commit comments

Comments
 (0)