* (commit-scalar + peer-commit-scalar) mod r part as a bit string by
* zero padding it from left to the length of the order (in full
* octets). */
- crypto_bignum_to_bin(tmp, val, sizeof(val), sae->tmp->order_len);
+ if (crypto_bignum_to_bin(tmp, val, sizeof(val),
+ sae->tmp->order_len) < 0)
+ goto fail;
wpa_hexdump(MSG_DEBUG, "SAE: PMKID", val, SAE_PMKID_LEN);
#ifdef CONFIG_SAE_PK
EC_POINT_get_affine_coordinates(e->group, (EC_POINT *) point,
x_bn, y_bn, e->bnctx)) {
if (x) {
- crypto_bignum_to_bin((struct crypto_bignum *) x_bn,
- x, len, len);
+ ret = crypto_bignum_to_bin(
+ (struct crypto_bignum *) x_bn, x, len, len);
}
- if (y) {
- crypto_bignum_to_bin((struct crypto_bignum *) y_bn,
- y, len, len);
+ if (ret >= 0 && y) {
+ ret = crypto_bignum_to_bin(
+ (struct crypto_bignum *) y_bn, y, len, len);
}
- ret = 0;
+
+ if (ret > 0)
+ ret = 0;
}
BN_clear_free(x_bn);
return -1;
}
eap_pwd_h_update(hash, (const u8 *) ciphersuite, sizeof(u32));
- crypto_bignum_to_bin(peer_scalar, cruft, order_len, order_len);
+ if (crypto_bignum_to_bin(peer_scalar, cruft, order_len,
+ order_len) < 0) {
+ os_free(cruft);
+ return -1;
+ }
+
eap_pwd_h_update(hash, cruft, order_len);
- crypto_bignum_to_bin(server_scalar, cruft, order_len, order_len);
+ if (crypto_bignum_to_bin(server_scalar, cruft, order_len,
+ order_len) < 0) {
+ os_free(cruft);
+ return -1;
+ }
+
eap_pwd_h_update(hash, cruft, order_len);
eap_pwd_h_final(hash, &session_id[1]);
os_free(cruft);
return -1;
}
- crypto_bignum_to_bin(k, cruft, prime_len, prime_len);
+
+ if (crypto_bignum_to_bin(k, cruft, prime_len, prime_len) < 0) {
+ os_free(cruft);
+ return -1;
+ }
+
eap_pwd_h_update(hash, cruft, prime_len);
os_free(cruft);
eap_pwd_h_update(hash, confirm_peer, SHA256_MAC_LEN);
* sufficiently smaller than the prime or order might need pre-pending
* with zeros.
*/
- crypto_bignum_to_bin(data->my_scalar, scalar, order_len, order_len);
+ if (crypto_bignum_to_bin(data->my_scalar, scalar, order_len,
+ order_len) < 0)
+ goto fin;
+
if (crypto_ec_point_to_bin(data->grp->group, data->my_element, element,
element + prime_len) != 0) {
wpa_printf(MSG_INFO, "EAP-PWD (peer): point assignment fail");
* zero the memory each time because this is mod prime math and some
* value may start with a few zeros and the previous one did not.
*/
- crypto_bignum_to_bin(data->k, cruft, prime_len, prime_len);
+ if (crypto_bignum_to_bin(data->k, cruft, prime_len, prime_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, prime_len);
/* server element: x, y */
eap_pwd_h_update(hash, cruft, prime_len * 2);
/* server scalar */
- crypto_bignum_to_bin(data->server_scalar, cruft, order_len, order_len);
+ if (crypto_bignum_to_bin(data->server_scalar, cruft, order_len,
+ order_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, order_len);
/* my element: x, y */
eap_pwd_h_update(hash, cruft, prime_len * 2);
/* my scalar */
- crypto_bignum_to_bin(data->my_scalar, cruft, order_len, order_len);
+ if (crypto_bignum_to_bin(data->my_scalar, cruft, order_len,
+ order_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, order_len);
/* the ciphersuite */
goto fin;
/* k */
- crypto_bignum_to_bin(data->k, cruft, prime_len, prime_len);
+ if (crypto_bignum_to_bin(data->k, cruft, prime_len, prime_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, prime_len);
/* my element */
eap_pwd_h_update(hash, cruft, prime_len * 2);
/* my scalar */
- crypto_bignum_to_bin(data->my_scalar, cruft, order_len, order_len);
+ if (crypto_bignum_to_bin(data->my_scalar, cruft, order_len,
+ order_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, order_len);
/* server element: x, y */
eap_pwd_h_update(hash, cruft, prime_len * 2);
/* server scalar */
- crypto_bignum_to_bin(data->server_scalar, cruft, order_len, order_len);
+ if (crypto_bignum_to_bin(data->server_scalar, cruft, order_len,
+ order_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, order_len);
/* the ciphersuite */
/* We send the element as (x,y) followed by the scalar */
element = wpabuf_put(data->outbuf, 2 * prime_len);
scalar = wpabuf_put(data->outbuf, order_len);
- crypto_bignum_to_bin(data->my_scalar, scalar, order_len, order_len);
+ if (crypto_bignum_to_bin(data->my_scalar, scalar, order_len,
+ order_len) < 0)
+ goto fin;
+
if (crypto_ec_point_to_bin(data->grp->group, data->my_element, element,
element + prime_len) < 0) {
wpa_printf(MSG_INFO, "EAP-PWD (server): point assignment "
*
* First is k
*/
- crypto_bignum_to_bin(data->k, cruft, prime_len, prime_len);
+ if (crypto_bignum_to_bin(data->k, cruft, prime_len, prime_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, prime_len);
/* server element: x, y */
eap_pwd_h_update(hash, cruft, prime_len * 2);
/* server scalar */
- crypto_bignum_to_bin(data->my_scalar, cruft, order_len, order_len);
+ if (crypto_bignum_to_bin(data->my_scalar, cruft, order_len,
+ order_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, order_len);
/* peer element: x, y */
eap_pwd_h_update(hash, cruft, prime_len * 2);
/* peer scalar */
- crypto_bignum_to_bin(data->peer_scalar, cruft, order_len, order_len);
+ if (crypto_bignum_to_bin(data->peer_scalar, cruft, order_len,
+ order_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, order_len);
/* ciphersuite */
goto fin;
/* k */
- crypto_bignum_to_bin(data->k, cruft, prime_len, prime_len);
+ if (crypto_bignum_to_bin(data->k, cruft, prime_len, prime_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, prime_len);
/* peer element: x, y */
eap_pwd_h_update(hash, cruft, prime_len * 2);
/* peer scalar */
- crypto_bignum_to_bin(data->peer_scalar, cruft, order_len, order_len);
+ if (crypto_bignum_to_bin(data->peer_scalar, cruft, order_len,
+ order_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, order_len);
/* server element: x, y */
eap_pwd_h_update(hash, cruft, prime_len * 2);
/* server scalar */
- crypto_bignum_to_bin(data->my_scalar, cruft, order_len, order_len);
+ if (crypto_bignum_to_bin(data->my_scalar, cruft, order_len,
+ order_len) < 0)
+ goto fin;
+
eap_pwd_h_update(hash, cruft, order_len);
/* ciphersuite */