Fix NewHope verify
https://github.com/mupq/pqm4/issues/132 repoorted that the NewHope verify function does not actually return 0 or 1, but 0 or -1, which consequenctly breaks the cmov in the FO transform. This bug was introduced when I integrated this into PQClean.
This commit is contained in:
parent
5a4b5f7358
commit
e93a6bef1f
@ -5,7 +5,7 @@ static const uint32_t qinv = 12287; // -inverse_mod(p,2^18)
|
|||||||
static const uint32_t rlog = 18;
|
static const uint32_t rlog = 18;
|
||||||
|
|
||||||
/*************************************************
|
/*************************************************
|
||||||
* Name: verify
|
* Name: montgomery_reduce
|
||||||
*
|
*
|
||||||
* Description: Montgomery reduction; given a 32-bit integer a, computes
|
* Description: Montgomery reduction; given a 32-bit integer a, computes
|
||||||
* 16-bit integer congruent to a * R^-1 mod q,
|
* 16-bit integer congruent to a * R^-1 mod q,
|
||||||
|
@ -22,7 +22,7 @@ int PQCLEAN_NEWHOPE1024CCA_CLEAN_verify(const unsigned char *a, const unsigned c
|
|||||||
r |= a[i] ^ b[i];
|
r |= a[i] ^ b[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
r = (-(int64_t)r) >> 63;
|
r = (-r) >> 63;
|
||||||
return (int)r;
|
return (int)r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ static const uint32_t qinv = 12287; // -inverse_mod(p,2^18)
|
|||||||
static const uint32_t rlog = 18;
|
static const uint32_t rlog = 18;
|
||||||
|
|
||||||
/*************************************************
|
/*************************************************
|
||||||
* Name: verify
|
* Name: montgomery_reduce
|
||||||
*
|
*
|
||||||
* Description: Montgomery reduction; given a 32-bit integer a, computes
|
* Description: Montgomery reduction; given a 32-bit integer a, computes
|
||||||
* 16-bit integer congruent to a * R^-1 mod q,
|
* 16-bit integer congruent to a * R^-1 mod q,
|
||||||
|
@ -22,7 +22,7 @@ int PQCLEAN_NEWHOPE1024CPA_CLEAN_verify(const unsigned char *a, const unsigned c
|
|||||||
r |= a[i] ^ b[i];
|
r |= a[i] ^ b[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
r = (-(int64_t)r) >> 63;
|
r = (-r) >> 63;
|
||||||
return (int)r;
|
return (int)r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ static const uint32_t qinv = 12287; // -inverse_mod(p,2^18)
|
|||||||
static const uint32_t rlog = 18;
|
static const uint32_t rlog = 18;
|
||||||
|
|
||||||
/*************************************************
|
/*************************************************
|
||||||
* Name: verify
|
* Name: montgomery_reduce
|
||||||
*
|
*
|
||||||
* Description: Montgomery reduction; given a 32-bit integer a, computes
|
* Description: Montgomery reduction; given a 32-bit integer a, computes
|
||||||
* 16-bit integer congruent to a * R^-1 mod q,
|
* 16-bit integer congruent to a * R^-1 mod q,
|
||||||
|
@ -22,7 +22,7 @@ int PQCLEAN_NEWHOPE512CCA_CLEAN_verify(const unsigned char *a, const unsigned ch
|
|||||||
r |= a[i] ^ b[i];
|
r |= a[i] ^ b[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
r = (-(int64_t)r) >> 63;
|
r = (-r) >> 63;
|
||||||
return (int)r;
|
return (int)r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ static const uint32_t qinv = 12287; // -inverse_mod(p,2^18)
|
|||||||
static const uint32_t rlog = 18;
|
static const uint32_t rlog = 18;
|
||||||
|
|
||||||
/*************************************************
|
/*************************************************
|
||||||
* Name: verify
|
* Name: montgomery_reduce
|
||||||
*
|
*
|
||||||
* Description: Montgomery reduction; given a 32-bit integer a, computes
|
* Description: Montgomery reduction; given a 32-bit integer a, computes
|
||||||
* 16-bit integer congruent to a * R^-1 mod q,
|
* 16-bit integer congruent to a * R^-1 mod q,
|
||||||
|
@ -22,7 +22,7 @@ int PQCLEAN_NEWHOPE512CPA_CLEAN_verify(const unsigned char *a, const unsigned ch
|
|||||||
r |= a[i] ^ b[i];
|
r |= a[i] ^ b[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
r = (-(int64_t)r) >> 63;
|
r = (-r) >> 63;
|
||||||
return (int)r;
|
return (int)r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user