Skip to content

Commit 07ea19f

Browse files
committed
Latch failures across every ecc-params curve lookup
1 parent 297705b commit 07ea19f

1 file changed

Lines changed: 31 additions & 6 deletions

File tree

ecc/ecc-params.c

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ int main(void)
118118
#if defined(HAVE_ECC) && defined(WOLFSSL_PUBLIC_MP)
119119
const char* curve_str = "SECP256R1";
120120
int curve_id = ECC_SECP256R1;
121+
int rc = 0;
121122
unsigned char param[MAX_ECC_BYTES];
122123

123124
wolfSSL_Debugging_ON();
@@ -126,27 +127,51 @@ int main(void)
126127

127128
ret = load_curve_param(curve_id, ECC_CURVE_FIELD_PRIME, param, sizeof(param));
128129
printf("Prime: %d\n", ret);
129-
WOLFSSL_BUFFER(param, ret);
130+
if (ret < 0)
131+
rc = ret;
132+
else
133+
WOLFSSL_BUFFER(param, ret);
130134

131135
ret = load_curve_param(curve_id, ECC_CURVE_FIELD_AF, param, sizeof(param));
132136
printf("Af: %d\n", ret);
133-
WOLFSSL_BUFFER(param, ret);
137+
if (ret < 0)
138+
rc = ret;
139+
else
140+
WOLFSSL_BUFFER(param, ret);
134141

135142
ret = load_curve_param(curve_id, ECC_CURVE_FIELD_BF, param, sizeof(param));
136143
printf("Bf: %d\n", ret);
137-
WOLFSSL_BUFFER(param, ret);
144+
if (ret < 0)
145+
rc = ret;
146+
else
147+
WOLFSSL_BUFFER(param, ret);
138148

139149
ret = load_curve_param(curve_id, ECC_CURVE_FIELD_ORDER, param, sizeof(param));
140150
printf("Order: %d\n", ret);
141-
WOLFSSL_BUFFER(param, ret);
151+
if (ret < 0)
152+
rc = ret;
153+
else
154+
WOLFSSL_BUFFER(param, ret);
142155

143156
ret = load_curve_param(curve_id, ECC_CURVE_FIELD_GX, param, sizeof(param));
144157
printf("Gx: %d\n", ret);
145-
WOLFSSL_BUFFER(param, ret);
158+
if (ret < 0)
159+
rc = ret;
160+
else
161+
WOLFSSL_BUFFER(param, ret);
146162

147163
ret = load_curve_param(curve_id, ECC_CURVE_FIELD_GY, param, sizeof(param));
148164
printf("Gy: %d\n", ret);
149-
WOLFSSL_BUFFER(param, ret);
165+
if (ret < 0)
166+
rc = ret;
167+
else
168+
WOLFSSL_BUFFER(param, ret);
169+
170+
/* load_curve_param returns a length, so only a negative value is an error.
171+
* rc latches a failure across all six calls; ret alone holds only the last.
172+
* Return 1, not rc: an exit status is truncated mod 256, and -132 would
173+
* surface as 124 -- the shell's timeout code. */
174+
ret = (rc < 0) ? 1 : 0;
150175
#else
151176
printf("Must build wolfSSL with ./configure CFLAGS=\"-DWOLFSSL_PUBLIC_MP\"\n");
152177
#endif

0 commit comments

Comments
 (0)