@@ -31,7 +31,7 @@ int wolfCLU_verify_signature(char* sig, char* hashFile, char* out,
3131 char * keyPath , int keyType , int pubIn ,
3232 int inForm )
3333{
34- int hSz = 0 ;
34+ long hSz = 0 ;
3535 int fSz ;
3636 int ret = WOLFCLU_FATAL_ERROR ;
3737
@@ -51,7 +51,18 @@ int wolfCLU_verify_signature(char* sig, char* hashFile, char* out,
5151 }
5252
5353 XFSEEK (f , 0 , SEEK_END );
54- fSz = (int )XFTELL (f );
54+ fSz = XFTELL (f );
55+
56+ if (fSz < 0 ) {
57+ wolfCLU_LogError ("Invalid Sig File %s." , sig );
58+ XFCLOSE (f );
59+ return BAD_FUNC_ARG ;
60+ }
61+ if (fSz > MAX_SIG_SZ ) {
62+ wolfCLU_LogError ("Sig File too Large %s." , sig );
63+ XFCLOSE (f );
64+ return BAD_FUNC_ARG ;
65+ }
5566
5667 data = (byte * )XMALLOC (fSz , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
5768 if (data == NULL ) {
@@ -79,7 +90,15 @@ int wolfCLU_verify_signature(char* sig, char* hashFile, char* out,
7990 }
8091
8192 XFSEEK (h , 0 , SEEK_END );
82- hSz = (int )XFTELL (h );
93+ hSz = XFTELL (h );
94+
95+ if (hSz < 0 ) {
96+ wolfCLU_LogError ("Unable to Get Size of Hash File %s." ,
97+ hashFile );
98+ ret = BAD_FUNC_ARG ;
99+ XFCLOSE (h );
100+ break ;
101+ }
83102
84103 hash = (byte * )XMALLOC (hSz , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
85104 if (hash == NULL ) {
@@ -109,7 +128,16 @@ int wolfCLU_verify_signature(char* sig, char* hashFile, char* out,
109128 }
110129
111130 XFSEEK (h , 0 , SEEK_END );
112- hSz = (int )XFTELL (h );
131+ hSz = XFTELL (h );
132+
133+
134+ if (hSz < 0 ) {
135+ wolfCLU_LogError ("Unable to Get Size of Hash File %s." ,
136+ hashFile );
137+ ret = BAD_FUNC_ARG ;
138+ XFCLOSE (h );
139+ break ;
140+ }
113141
114142 hash = (byte * )XMALLOC (hSz , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
115143 if (hash == NULL ) {
@@ -142,7 +170,15 @@ int wolfCLU_verify_signature(char* sig, char* hashFile, char* out,
142170
143171 /* hSz means msgLen */
144172 XFSEEK (h , 0 , SEEK_END );
145- hSz = (int )XFTELL (h );
173+ hSz = XFTELL (h );
174+
175+ if (hSz < 0 ) {
176+ wolfCLU_LogError ("Unable to Get Size of Hash File %s." ,
177+ hashFile );
178+ ret = BAD_FUNC_ARG ;
179+ XFCLOSE (h );
180+ break ;
181+ }
146182
147183 /* hash means msg */
148184 hash = (byte * )XMALLOC (hSz , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
@@ -176,7 +212,16 @@ int wolfCLU_verify_signature(char* sig, char* hashFile, char* out,
176212
177213 /* hSz means msgLen */
178214 XFSEEK (h , 0 , SEEK_END );
179- hSz = (int )XFTELL (h );
215+ hSz = XFTELL (h );
216+
217+
218+ if (hSz < 0 ) {
219+ wolfCLU_LogError ("Unable to Get Size of Hash File %s." ,
220+ hashFile );
221+ ret = BAD_FUNC_ARG ;
222+ XFCLOSE (h );
223+ break ;
224+ }
180225
181226 /* hash means msg */
182227 hash = (byte * )XMALLOC (hSz , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
@@ -208,7 +253,15 @@ int wolfCLU_verify_signature(char* sig, char* hashFile, char* out,
208253
209254 /* hSz means msgLen */
210255 XFSEEK (h , 0 , SEEK_END );
211- hSz = (int )XFTELL (h );
256+ hSz = XFTELL (h );
257+
258+ if (hSz < 0 ) {
259+ wolfCLU_LogError ("Unable to Get Size of Hash File %s." ,
260+ hashFile );
261+ ret = BAD_FUNC_ARG ;
262+ XFCLOSE (h );
263+ break ;
264+ }
212265
213266 /* hash means msg */
214267 hash = (byte * )XMALLOC (hSz , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
@@ -249,7 +302,7 @@ int wolfCLU_verify_signature_rsa(byte* sig, char* out, int sigSz, char* keyPath,
249302
250303#ifndef NO_RSA
251304 int ret ;
252- int keyFileSz = 0 ;
305+ long keyFileSz = 0 ;
253306 word32 index = 0 ;
254307 XFILE keyPathFile = NULL ;
255308 RsaKey key ;
@@ -275,7 +328,13 @@ int wolfCLU_verify_signature_rsa(byte* sig, char* out, int sigSz, char* keyPath,
275328 }
276329 if (ret == 0 ) {
277330 XFSEEK (keyPathFile , 0 , SEEK_END );
278- keyFileSz = (int )XFTELL (keyPathFile );
331+ keyFileSz = XFTELL (keyPathFile );
332+ if (keyFileSz < 0 ) {
333+ wolfCLU_LogError ("Unable to Get Size of Key File %s." , keyPath );
334+ ret = BAD_FUNC_ARG ;
335+ }
336+ }
337+ if (ret == 0 ) {
279338 keyBuf = (byte * )XMALLOC (keyFileSz + 1 , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
280339 if (keyBuf == NULL ) {
281340 ret = MEMORY_E ;
@@ -415,7 +474,13 @@ int wolfCLU_verify_signature_ecc(byte* sig, int sigSz, byte* hash, int hashSz,
415474 }
416475 if (ret == 0 ) {
417476 XFSEEK (keyPathFile , 0 , SEEK_END );
418- keyFileSz = (int )XFTELL (keyPathFile );
477+ keyFileSz = XFTELL (keyPathFile );
478+ if (keyFileSz < 0 ) {
479+ wolfCLU_LogError ("Unable to Get Size of Key File %s." , keyPath );
480+ ret = BAD_FUNC_ARG ;
481+ }
482+ }
483+ if (ret == 0 ) {
419484 keyBuf = (byte * )XMALLOC (keyFileSz + 1 , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
420485 if (keyBuf == NULL ) {
421486 ret = MEMORY_E ;
@@ -571,7 +636,13 @@ int wolfCLU_verify_signature_ed25519(byte* sig, int sigSz,
571636 }
572637 if (ret == 0 ) {
573638 XFSEEK (keyPathFile , 0 , SEEK_END );
574- keyFileSz = (int )XFTELL (keyPathFile );
639+ keyFileSz = XFTELL (keyPathFile );
640+ if (keyFileSz < 0 ) {
641+ wolfCLU_LogError ("Unable to Get Size of Key File %s." , keyPath );
642+ ret = BAD_FUNC_ARG ;
643+ }
644+ }
645+ if (ret == 0 ) {
575646 keyBuf = (byte * )XMALLOC (keyFileSz + 1 , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
576647 if (keyBuf == NULL ) {
577648 ret = MEMORY_E ;
@@ -721,7 +792,16 @@ int wolfCLU_verify_signature_dilithium(byte* sig, int sigSz, byte* msg,
721792 }
722793
723794 XFSEEK (keyFile , 0 , SEEK_END );
724- keyFileSz = (int )XFTELL (keyFile );
795+ keyFileSz = XFTELL (keyFile );
796+ if (keyFileSz < 0 ) {
797+ wolfCLU_LogError ("Failed to get size of public key FILE." );
798+ XFCLOSE (keyFile );
799+ wc_dilithium_free (key );
800+ #ifdef WOLFSSL_SMALL_STACK
801+ XFREE (key , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
802+ #endif
803+ return BAD_FUNC_ARG ;
804+ }
725805 keyBuf = (byte * )XMALLOC (keyFileSz , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
726806 if (keyBuf == NULL ) {
727807 wolfCLU_LogError ("Failed to malloc key buffer." );
@@ -856,7 +936,14 @@ int wolfCLU_verify_signature_xmss(byte* sig, int sigSz,
856936
857937 if (ret == 0 ) {
858938 XFSEEK (keyFile , 0 , SEEK_END );
859- keyFileSz = (int )XFTELL (keyFile );
939+ keyFileSz = XFTELL (keyFile );
940+ if (keyFileSz < 0 ) {
941+ ret = WOLFCLU_FATAL_ERROR ;
942+ wolfCLU_LogError ("Failed to get size of public key FILE." );
943+ }
944+ }
945+
946+ if (ret == 0 ) {
860947 keyBuf = (byte * )XMALLOC (keyFileSz , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
861948 if (keyBuf == NULL ) {
862949 ret = MEMORY_E ;
@@ -1012,7 +1099,14 @@ int wolfCLU_verify_signature_xmssmt(byte* sig, int sigSz,
10121099
10131100 if (ret == 0 ) {
10141101 XFSEEK (keyFile , 0 , SEEK_END );
1015- keyFileSz = (int )XFTELL (keyFile );
1102+ keyFileSz = XFTELL (keyFile );
1103+ if (keyFileSz < 0 ) {
1104+ ret = WOLFCLU_FATAL_ERROR ;
1105+ wolfCLU_LogError ("Failed to get size of public key FILE." );
1106+ }
1107+ }
1108+
1109+ if (ret == 0 ) {
10161110 keyBuf = (byte * )XMALLOC (keyFileSz , HEAP_HINT , DYNAMIC_TYPE_TMP_BUFFER );
10171111 if (keyBuf == NULL ) {
10181112 ret = MEMORY_E ;
0 commit comments