*/
export function crypto_verify (s: StaticArray<u8>, M: StaticArray<u8>, mlen: i32, pub: StaticArray<u8>): i32 {
- // fail if public key `k` is non-canonical (`p = 2²⁵⁵-19 <= k`)
+ // fail if public key `k` is non-canonical (`p = 2²⁵⁵-19 ≤ k`)
if (!ge_is_canonical(pub)) return -1
- // fail if private scalar `S` is non-canonical (`L <= S`)
+ // fail if private scalar `S` is non-canonical (`L ≤ S`)
memory.copy(changetype<usize>(S), changetype<usize>(s) + 32, 32)
if (!sc_is_canonical(S)) return -1
/**
* Arithmetic on field elements. These are integers in the range
*
- * `0 <= n < p`
+ * `0 ≤ n < p`
*
* where
*
* Basic claim: q = floor(2⁻²⁵⁵(h + 19 2^(-25)h9 + 2^(-1))).
*
* Proof:
- * Have |h|<=p so |q|<=1 so |19² 2⁻²⁵⁵ q|<1/4.
+ * Have |h|≤p so |q|≤1 so |19² 2⁻²⁵⁵ q|<1/4.
* Also have |h-2²³⁰ h9|<2²³¹ so |19 2⁻²⁵⁵(h-2²³⁰ h9)|<1/4.
*
* Write y=2^(-1)-19² 2⁻²⁵⁵q-19 2⁻²⁵⁵(h-2²³⁰ h9).
* Then 0<y<1.
*
* Write r=h-pq.
- * Have 0 <= r <= p-1 = 2²⁵⁵-20.
- * Thus 0 <= r+19(2⁻²⁵⁵)r < r+19(2⁻²⁵⁵)2²⁵⁵ <= 2²⁵⁵-1.
+ * Have 0 ≤ r ≤ p-1 = 2²⁵⁵-20.
+ * Thus 0 ≤ r+19(2⁻²⁵⁵)r < r+19(2⁻²⁵⁵)2²⁵⁵ ≤ 2²⁵⁵-1.
*
* Write x=r+19(2⁻²⁵⁵)r+y.
* Then 0 < x < 2²⁵⁵ so floor(2⁻²⁵⁵x) = 0 so floor(q+2⁻²⁵⁵x) = q.
* `0x5866666666666666666666666666666666666666666666666666666666666666`
*
* Preconditions:
- * - `a[31] <= 127`
+ * - `a[31] ≤ 127`
*/
function ge_scalarmult_base (h: ge_p3, a: StaticArray<u8>): void {
const e = ge_scalarmult_base_e
/**
* Validate signature scalar S is canonical (S < L)
* - Accept immediately if `S < 2²⁵²` since this implies `S < L`
- * - Reject immediately if `S >= 2²⁵³` since this implies `S >= L`
- * - Otherwise, check canonicity for `2²⁵² <= S < 2²⁵³`
+ * - Reject immediately if `S ≥ 2²⁵³` since this implies `S ≥ L`
+ * - Otherwise, check canonicity for `2²⁵² ≤ S < 2²⁵³`
*/
export function sc_is_canonical (S: StaticArray<u8>): bool {
if ((S[31] & 0xF0) == 0) return true