mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 20:33:31 +01:00
ed25519: Check retval of unpack_negative_vartime in donna.
This commit is contained in:
parent
559195ea82
commit
0d9873ac0d
@ -497,7 +497,8 @@ ed25519_public_key_from_curve25519_public_key(ed25519_public_key_t *pubkey,
|
|||||||
* service descriptors are encrypted with a key derived from the service's
|
* service descriptors are encrypted with a key derived from the service's
|
||||||
* long-term public key, and then signed with (and stored at a position
|
* long-term public key, and then signed with (and stored at a position
|
||||||
* indexed by) a short-term key derived by blinding the long-term keys.
|
* indexed by) a short-term key derived by blinding the long-term keys.
|
||||||
*/
|
*
|
||||||
|
* Return 0 if blinding was successful, else return -1. */
|
||||||
int
|
int
|
||||||
ed25519_keypair_blind(ed25519_keypair_t *out,
|
ed25519_keypair_blind(ed25519_keypair_t *out,
|
||||||
const ed25519_keypair_t *inp,
|
const ed25519_keypair_t *inp,
|
||||||
@ -508,7 +509,9 @@ ed25519_keypair_blind(ed25519_keypair_t *out,
|
|||||||
get_ed_impl()->blind_secret_key(out->seckey.seckey,
|
get_ed_impl()->blind_secret_key(out->seckey.seckey,
|
||||||
inp->seckey.seckey, param);
|
inp->seckey.seckey, param);
|
||||||
|
|
||||||
ed25519_public_blind(&pubkey_check, &inp->pubkey, param);
|
if (ed25519_public_blind(&pubkey_check, &inp->pubkey, param) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
ed25519_public_key_generate(&out->pubkey, &out->seckey);
|
ed25519_public_key_generate(&out->pubkey, &out->seckey);
|
||||||
|
|
||||||
tor_assert(fast_memeq(pubkey_check.pubkey, out->pubkey.pubkey, 32));
|
tor_assert(fast_memeq(pubkey_check.pubkey, out->pubkey.pubkey, 32));
|
||||||
@ -528,8 +531,7 @@ ed25519_public_blind(ed25519_public_key_t *out,
|
|||||||
const ed25519_public_key_t *inp,
|
const ed25519_public_key_t *inp,
|
||||||
const uint8_t *param)
|
const uint8_t *param)
|
||||||
{
|
{
|
||||||
get_ed_impl()->blind_public_key(out->pubkey, inp->pubkey, param);
|
return get_ed_impl()->blind_public_key(out->pubkey, inp->pubkey, param);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -304,7 +304,9 @@ ed25519_donna_blind_public_key(unsigned char *out, const unsigned char *inp,
|
|||||||
/* No "ge25519_unpack", negate the public key. */
|
/* No "ge25519_unpack", negate the public key. */
|
||||||
memcpy(pkcopy, inp, 32);
|
memcpy(pkcopy, inp, 32);
|
||||||
pkcopy[31] ^= (1<<7);
|
pkcopy[31] ^= (1<<7);
|
||||||
ge25519_unpack_negative_vartime(&A, pkcopy);
|
if (!ge25519_unpack_negative_vartime(&A, pkcopy)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* A' = [tweak] * A + [0] * basepoint. */
|
/* A' = [tweak] * A + [0] * basepoint. */
|
||||||
ge25519_double_scalarmult_vartime(&Aprime, &A, t, zero);
|
ge25519_double_scalarmult_vartime(&Aprime, &A, t, zero);
|
||||||
|
Loading…
Reference in New Issue
Block a user