Skip to content

Commit 6e8b3e0

Browse files
committed
wolfcrypt/src/blake2b.c and wolfcrypt/src/blake2s.c: restore volatile-based workaround for ARM32 gcc optimizer bug.
1 parent 4228bed commit 6e8b3e0

2 files changed

Lines changed: 12 additions & 12 deletions

File tree

wolfcrypt/src/blake2b.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -120,37 +120,37 @@ int blake2b_init_param( blake2b_state *S, const blake2b_param *P )
120120

121121
int blake2b_init( blake2b_state *S, const byte outlen )
122122
{
123-
blake2b_param P;
123+
volatile blake2b_param P;
124124

125125
if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return BAD_FUNC_ARG;
126126

127-
XMEMSET(&P, 0, sizeof(P));
127+
XMEMSET((void *)(wc_ptr_t)&P, 0, sizeof(P));
128128
WC_BARRIER();
129129
P.digest_length = outlen;
130130
P.fanout = 1;
131131
P.depth = 1;
132132

133-
return blake2b_init_param(S, &P);
133+
return blake2b_init_param(S, (const blake2b_param *)(wc_ptr_t)&P);
134134
}
135135

136136
int blake2b_init_key( blake2b_state *S, const byte outlen, const void *key,
137137
const byte keylen )
138138
{
139139
int ret = 0;
140-
blake2b_param P;
140+
volatile blake2b_param P;
141141

142142
if ( ( !outlen ) || ( outlen > BLAKE2B_OUTBYTES ) ) return BAD_FUNC_ARG;
143143

144144
if ( !key || !keylen || keylen > BLAKE2B_KEYBYTES ) return BAD_FUNC_ARG;
145145

146-
XMEMSET( &P, 0, sizeof( P ) );
146+
XMEMSET( (void *)(wc_ptr_t)&P, 0, sizeof( P ) );
147147
WC_BARRIER();
148148
P.digest_length = outlen;
149149
P.key_length = keylen;
150150
P.fanout = 1;
151151
P.depth = 1;
152152

153-
ret = blake2b_init_param(S, &P);
153+
ret = blake2b_init_param(S, (const blake2b_param *)(wc_ptr_t)&P);
154154
if ( ret < 0 ) return ret;
155155

156156
{

wolfcrypt/src/blake2s.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,38 +117,38 @@ int blake2s_init_param( blake2s_state *S, const blake2s_param *P )
117117

118118
int blake2s_init( blake2s_state *S, const byte outlen )
119119
{
120-
blake2s_param P;
120+
volatile blake2s_param P;
121121

122122
if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return BAD_FUNC_ARG;
123123

124-
XMEMSET( &P, 0, sizeof( P ) );
124+
XMEMSET( (void *)(wc_ptr_t)&P, 0, sizeof( P ) );
125125
WC_BARRIER();
126126
P.digest_length = outlen;
127127
P.fanout = 1;
128128
P.depth = 1;
129129

130-
return blake2s_init_param( S, &P );
130+
return blake2s_init_param( S, (const blake2s_param *)(wc_ptr_t)&P );
131131
}
132132

133133

134134
int blake2s_init_key( blake2s_state *S, const byte outlen, const void *key,
135135
const byte keylen )
136136
{
137137
int ret = 0;
138-
blake2s_param P;
138+
volatile blake2s_param P;
139139

140140
if ( ( !outlen ) || ( outlen > BLAKE2S_OUTBYTES ) ) return BAD_FUNC_ARG;
141141

142142
if ( !key || !keylen || keylen > BLAKE2S_KEYBYTES ) return BAD_FUNC_ARG;
143143

144-
XMEMSET( &P, 0, sizeof( P ) );
144+
XMEMSET( (void *)(wc_ptr_t)&P, 0, sizeof( P ) );
145145
WC_BARRIER();
146146
P.digest_length = outlen;
147147
P.key_length = keylen;
148148
P.fanout = 1;
149149
P.depth = 1;
150150

151-
ret = blake2s_init_param( S, &P );
151+
ret = blake2s_init_param( S, (const blake2s_param *)(wc_ptr_t)&P );
152152
if (ret < 0)
153153
return ret;
154154

0 commit comments

Comments
 (0)