chiark / gitweb /
math/f25519.c, utils/curve25519.sage: Slightly improve `quosqrt' algorithm.
[catacomb] / pub / t / ed25519.local
1 ### Local tests for Ed25519
2
3 verify {
4   ## Check that noncanonical scalars are rejected.  The base test is repeated
5   ## from the main suite; let s be the scalar part of the signature, and ℓ be
6   ## the curve order.  The negative test has s' = s + ℓ < 2^254, so the value
7   ## fits.
8   74d29127f199d86a8676aec33b4ce3f225ccb191f52c191ccd1e8cca65213a6b
9     bd8e05033f3a8bcdcbf4beceb70901c82e31
10     fbe929d743a03c17910575492f3092ee2a2bf14a60a3fcacec74a58c7334510fc262db582791322d6c8c41f1700adb80027ecabc14270b703444ae3ee7623e0a
11     0;
12   74d29127f199d86a8676aec33b4ce3f225ccb191f52c191ccd1e8cca65213a6b
13     bd8e05033f3a8bcdcbf4beceb70901c82e31
14     fbe929d743a03c17910575492f3092ee2a2bf14a60a3fcacec74a58c7334510faf36d1b541f44485422939944f04ba95027ecabc14270b703444ae3ee7623e1a
15     -1;
16
17   ## OK, so this is a massive cheat, but otherwise testing that out-of-range
18   ## coordinates are rejected is really hard.  Pick A = (0, 1), which is the
19   ## identity in E.  Then n A = A for all n; in particular, H(R, A, M) A = A
20   ## for any choice of R and M.  Furthermore, R = R + H(R, A, M) A for any R.
21   ## Let's pick R = A = (0, 1), because that seems to be working out for us.
22   ## Then s P = R + H(R, A, M) A exactly when s = 0 (mod ℓ).
23   ##
24   ## This is obviously a really daft choice of public key for security,
25   ## because the following is a completely general-purpose signature for all
26   ## messages.
27   ##
28   ## Why bother, you ask?  Well, because (0, 1) is one of the few points
29   ## which has a reduntant representation.  So we can use this to check that
30   ## we're correctly rejecting signatures which aren't in normal form.
31   0100000000000000000000000000000000000000000000000000000000000000
32     416c6c2d707572706f7365207369676e6174757265210a
33     01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
34     0;
35   eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f
36     416c6c2d707572706f7365207369676e6174757265210a
37     01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
38     -1;
39   0100000000000000000000000000000000000000000000000000000000000000
40     416c6c2d707572706f7365207369676e6174757265210a
41     eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000
42     -1;
43 }