libdecaf
point_448.h
Go to the documentation of this file.
1 
15 #ifndef __DECAF_POINT_448_H__
16 #define __DECAF_POINT_448_H__ 1
17 
18 #include <decaf/common.h>
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
25 #define DECAF_448_SCALAR_LIMBS ((446-1)/DECAF_WORD_BITS+1)
26 
29 #define DECAF_448_SCALAR_BITS 446
30 
32 #ifndef __DECAF_448_GF_DEFINED__
33 #define __DECAF_448_GF_DEFINED__ 1
34 
35 typedef struct gf_448_s {
36  decaf_word_t limb[512/DECAF_WORD_BITS];
37 } __attribute__((aligned(32))) gf_448_s, gf_448_t[1];
38 #endif /* __DECAF_448_GF_DEFINED__ */
39 
42 #define DECAF_448_SER_BYTES 56
43 
47 #define DECAF_448_HASH_BYTES 56
48 
50 #define DECAF_448_SCALAR_BYTES 56
51 
53 #define DECAF_448_INVERT_ELLIGATOR_WHICH_BITS 3
54 
56 #define DECAF_448_REMOVED_COFACTOR 4
57 
59 #define DECAF_X448_ENCODE_RATIO 2
60 
62 #define DECAF_X448_PUBLIC_BYTES 56
63 
65 #define DECAF_X448_PRIVATE_BYTES 56
66 
68 typedef struct decaf_448_point_s {
70  gf_448_t x,y,z,t; /* Twisted extended homogeneous coordinates */
73 
76 
79 
81 DECAF_API_VIS extern const size_t decaf_448_sizeof_precomputed_s, decaf_448_alignof_precomputed_s;
82 
84 typedef struct decaf_448_scalar_s {
86  decaf_word_t limb[DECAF_448_SCALAR_LIMBS];
89 
90 #if defined _MSC_VER
91 
93 extern const decaf_448_scalar_t DECAF_API_VIS decaf_448_scalar_one;
94 
96 extern const decaf_448_scalar_t DECAF_API_VIS decaf_448_scalar_zero;
97 
99 extern const decaf_448_point_t DECAF_API_VIS decaf_448_point_identity;
100 
102 extern const decaf_448_point_t DECAF_API_VIS decaf_448_point_base;
103 
105 extern const struct DECAF_API_VIS decaf_448_precomputed_s *decaf_448_precomputed_base;
106 
107 
108 #else // _MSC_VER
109 
111 DECAF_API_VIS extern const decaf_448_scalar_t decaf_448_scalar_one;
112 
114 DECAF_API_VIS extern const decaf_448_scalar_t decaf_448_scalar_zero;
115 
117 DECAF_API_VIS extern const decaf_448_point_t decaf_448_point_identity;
118 
120 DECAF_API_VIS extern const decaf_448_point_t decaf_448_point_base;
121 
123 DECAF_API_VIS extern const struct decaf_448_precomputed_s *decaf_448_precomputed_base;
124 
125 #endif // _MSC_VER
126 
137  decaf_448_scalar_t out,
138  const unsigned char ser[DECAF_448_SCALAR_BYTES]
139 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
140 
149 void DECAF_API_VIS decaf_448_scalar_decode_long (
150  decaf_448_scalar_t out,
151  const unsigned char *ser,
152  size_t ser_len
153 ) DECAF_NONNULL DECAF_NOINLINE;
154 
161 void DECAF_API_VIS decaf_448_scalar_encode (
162  unsigned char ser[DECAF_448_SCALAR_BYTES],
163  const decaf_448_scalar_t s
164 ) DECAF_NONNULL DECAF_NOINLINE DECAF_NOINLINE;
165 
172 void DECAF_API_VIS decaf_448_scalar_add (
173  decaf_448_scalar_t out,
174  const decaf_448_scalar_t a,
175  const decaf_448_scalar_t b
176 ) DECAF_NONNULL DECAF_NOINLINE;
177 
185 decaf_bool_t DECAF_API_VIS decaf_448_scalar_eq (
186  const decaf_448_scalar_t a,
187  const decaf_448_scalar_t b
188 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
189 
196 void DECAF_API_VIS decaf_448_scalar_sub (
197  decaf_448_scalar_t out,
198  const decaf_448_scalar_t a,
199  const decaf_448_scalar_t b
200 ) DECAF_NONNULL DECAF_NOINLINE;
201 
208 void DECAF_API_VIS decaf_448_scalar_mul (
209  decaf_448_scalar_t out,
210  const decaf_448_scalar_t a,
211  const decaf_448_scalar_t b
212 ) DECAF_NONNULL DECAF_NOINLINE;
213 
219 void DECAF_API_VIS decaf_448_scalar_halve (
220  decaf_448_scalar_t out,
221  const decaf_448_scalar_t a
222 ) DECAF_NONNULL DECAF_NOINLINE;
223 
231  decaf_448_scalar_t out,
232  const decaf_448_scalar_t a
233 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
234 
241 static inline void DECAF_NONNULL decaf_448_scalar_copy (
242  decaf_448_scalar_t out,
243  const decaf_448_scalar_t a
244 ) {
245  *out = *a;
246 }
247 
253 void DECAF_API_VIS decaf_448_scalar_set_unsigned (
254  decaf_448_scalar_t out,
255  uint64_t a
256 ) DECAF_NONNULL;
257 
264 void DECAF_API_VIS decaf_448_point_encode (
265  uint8_t ser[DECAF_448_SER_BYTES],
266  const decaf_448_point_t pt
267 ) DECAF_NONNULL DECAF_NOINLINE;
268 
285  const uint8_t ser[DECAF_448_SER_BYTES],
286  decaf_bool_t allow_identity
287 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
288 
296 static inline void DECAF_NONNULL decaf_448_point_copy (
298  const decaf_448_point_t b
299 ) {
300  *a=*b;
301 }
302 
312 decaf_bool_t DECAF_API_VIS decaf_448_point_eq (
313  const decaf_448_point_t a,
314  const decaf_448_point_t b
315 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
316 
326 void DECAF_API_VIS decaf_448_point_add (
327  decaf_448_point_t sum,
328  const decaf_448_point_t a,
329  const decaf_448_point_t b
330 ) DECAF_NONNULL;
331 
339 void DECAF_API_VIS decaf_448_point_double (
340  decaf_448_point_t two_a,
341  const decaf_448_point_t a
342 ) DECAF_NONNULL;
343 
353 void DECAF_API_VIS decaf_448_point_sub (
354  decaf_448_point_t diff,
355  const decaf_448_point_t a,
356  const decaf_448_point_t b
357 ) DECAF_NONNULL;
358 
366 void DECAF_API_VIS decaf_448_point_negate (
367  decaf_448_point_t nega,
368  const decaf_448_point_t a
369 ) DECAF_NONNULL;
370 
378 void DECAF_API_VIS decaf_448_point_scalarmul (
379  decaf_448_point_t scaled,
380  const decaf_448_point_t base,
381  const decaf_448_scalar_t scalar
382 ) DECAF_NONNULL DECAF_NOINLINE;
383 
402  uint8_t scaled[DECAF_448_SER_BYTES],
403  const uint8_t base[DECAF_448_SER_BYTES],
404  const decaf_448_scalar_t scalar,
405  decaf_bool_t allow_identity,
406  decaf_bool_t short_circuit
407 ) DECAF_NONNULL DECAF_WARN_UNUSED DECAF_NOINLINE;
408 
421 decaf_error_t DECAF_API_VIS decaf_x448 (
422  uint8_t shared[DECAF_X448_PUBLIC_BYTES],
423  const uint8_t base[DECAF_X448_PUBLIC_BYTES],
424  const uint8_t scalar[DECAF_X448_PRIVATE_BYTES]
425 ) DECAF_NONNULL DECAF_WARN_UNUSED DECAF_NOINLINE;
426 
448  uint8_t out[DECAF_X448_PUBLIC_BYTES],
449  const decaf_448_point_t p
450 ) DECAF_NONNULL;
451 
453 extern const uint8_t
454 #ifndef DOXYGEN
455  /* For some reason Doxygen chokes on this despite the defense in common.h... */
456  DECAF_API_VIS
457 #endif
459 
470 void DECAF_API_VIS decaf_x448_generate_key (
471  uint8_t out[DECAF_X448_PUBLIC_BYTES],
472  const uint8_t scalar[DECAF_X448_PRIVATE_BYTES]
473 ) DECAF_NONNULL DECAF_NOINLINE DECAF_DEPRECATED("Renamed to decaf_x448_derive_public_key");
474 
485 void DECAF_API_VIS decaf_x448_derive_public_key (
486  uint8_t out[DECAF_X448_PUBLIC_BYTES],
487  const uint8_t scalar[DECAF_X448_PRIVATE_BYTES]
488 ) DECAF_NONNULL DECAF_NOINLINE;
489 
490 /* FUTURE: uint8_t decaf_448_encode_like_curve448) */
491 
501 void DECAF_API_VIS decaf_448_precompute (
503  const decaf_448_point_t b
504 ) DECAF_NONNULL DECAF_NOINLINE;
505 
517 void DECAF_API_VIS decaf_448_precomputed_scalarmul (
518  decaf_448_point_t scaled,
519  const decaf_448_precomputed_s *base,
520  const decaf_448_scalar_t scalar
521 ) DECAF_NONNULL DECAF_NOINLINE;
522 
536 void DECAF_API_VIS decaf_448_point_double_scalarmul (
537  decaf_448_point_t combo,
538  const decaf_448_point_t base1,
539  const decaf_448_scalar_t scalar1,
540  const decaf_448_point_t base2,
541  const decaf_448_scalar_t scalar2
542 ) DECAF_NONNULL DECAF_NOINLINE;
543 
559 void DECAF_API_VIS decaf_448_point_dual_scalarmul (
562  const decaf_448_point_t base1,
563  const decaf_448_scalar_t scalar1,
564  const decaf_448_scalar_t scalar2
565 ) DECAF_NONNULL DECAF_NOINLINE;
566 
583  decaf_448_point_t combo,
584  const decaf_448_scalar_t scalar1,
585  const decaf_448_point_t base2,
586  const decaf_448_scalar_t scalar2
587 ) DECAF_NONNULL DECAF_NOINLINE;
588 
598 void DECAF_API_VIS decaf_448_point_cond_sel (
599  decaf_448_point_t out,
600  const decaf_448_point_t a,
601  const decaf_448_point_t b,
602  decaf_word_t pick_b
603 ) DECAF_NONNULL DECAF_NOINLINE;
604 
614 void DECAF_API_VIS decaf_448_scalar_cond_sel (
615  decaf_448_scalar_t out,
616  const decaf_448_scalar_t a,
617  const decaf_448_scalar_t b,
618  decaf_word_t pick_b
619 ) DECAF_NONNULL DECAF_NOINLINE;
620 
628 decaf_bool_t DECAF_API_VIS decaf_448_point_valid (
629  const decaf_448_point_t to_test
630 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
631 
639 void DECAF_API_VIS decaf_448_point_debugging_torque (
641  const decaf_448_point_t p
642 ) DECAF_NONNULL DECAF_NOINLINE;
643 
653 void DECAF_API_VIS decaf_448_point_debugging_pscale (
655  const decaf_448_point_t p,
656  const unsigned char factor[DECAF_448_SER_BYTES]
657 ) DECAF_NONNULL DECAF_NOINLINE;
658 
687 void DECAF_API_VIS
690  const unsigned char hashed_data[DECAF_448_HASH_BYTES]
691 ) DECAF_NONNULL DECAF_NOINLINE;
692 
701 void DECAF_API_VIS decaf_448_point_from_hash_uniform (
703  const unsigned char hashed_data[2*DECAF_448_HASH_BYTES]
704 ) DECAF_NONNULL DECAF_NOINLINE;
705 
734 decaf_error_t DECAF_API_VIS
736  unsigned char recovered_hash[DECAF_448_HASH_BYTES],
737  const decaf_448_point_t pt,
738  uint32_t which
739 ) DECAF_NONNULL DECAF_NOINLINE DECAF_WARN_UNUSED;
740 
759 decaf_error_t DECAF_API_VIS
761  unsigned char recovered_hash[2*DECAF_448_HASH_BYTES],
762  const decaf_448_point_t pt,
763  uint32_t which
764 ) DECAF_NONNULL DECAF_NOINLINE DECAF_WARN_UNUSED;
765 
767 void DECAF_API_VIS decaf_448_scalar_destroy (
768  decaf_448_scalar_t scalar
769 ) DECAF_NONNULL;
770 
774 void DECAF_API_VIS decaf_448_point_destroy (
775  decaf_448_point_t point
776 ) DECAF_NONNULL;
777 
781 void DECAF_API_VIS decaf_448_precomputed_destroy (
783 ) DECAF_NONNULL;
784 
785 #ifdef __cplusplus
786 } /* extern "C" */
787 #endif
788 
789 #endif /* __DECAF_POINT_448_H__ */
decaf_x448_generate_key
void DECAF_API_VIS decaf_x448_generate_key(uint8_t out[DECAF_X448_PUBLIC_BYTES], const uint8_t scalar[DECAF_X448_PRIVATE_BYTES]) DECAF_NONNULL DECAF_NOINLINE DECAF_DEPRECATED("Renamed to decaf_x448_derive_public_key")
RFC 7748 Diffie-Hellman base point scalarmul.
DECAF_448_SCALAR_BYTES
#define DECAF_448_SCALAR_BYTES
Number of bytes in a serialized scalar.
Definition: point_448.h:50
decaf_448_point_double_scalarmul
void DECAF_API_VIS decaf_448_point_double_scalarmul(decaf_448_point_t combo, const decaf_448_point_t base1, const decaf_448_scalar_t scalar1, const decaf_448_point_t base2, const decaf_448_scalar_t scalar2) DECAF_NONNULL DECAF_NOINLINE
Multiply two base points by two scalars: scaled = scalar1*base1 + scalar2*base2.
decaf_448_scalar_add
void DECAF_API_VIS decaf_448_scalar_add(decaf_448_scalar_t out, const decaf_448_scalar_t a, const decaf_448_scalar_t b) DECAF_NONNULL DECAF_NOINLINE
Add two scalars.
decaf_448_point_scalarmul
void DECAF_API_VIS decaf_448_point_scalarmul(decaf_448_point_t scaled, const decaf_448_point_t base, const decaf_448_scalar_t scalar) DECAF_NONNULL DECAF_NOINLINE
Multiply a base point by a scalar: scaled = scalar*base.
decaf_448_sizeof_precomputed_s
const DECAF_API_VIS size_t decaf_448_sizeof_precomputed_s
Size and alignment of precomputed point tables.
decaf_448_point_dual_scalarmul
void DECAF_API_VIS decaf_448_point_dual_scalarmul(decaf_448_point_t a1, decaf_448_point_t a2, const decaf_448_point_t base1, const decaf_448_scalar_t scalar1, const decaf_448_scalar_t scalar2) DECAF_NONNULL DECAF_NOINLINE
Multiply one base point by two scalars:
decaf_448_precompute
void DECAF_API_VIS decaf_448_precompute(decaf_448_precomputed_s *a, const decaf_448_point_t b) DECAF_NONNULL DECAF_NOINLINE
Precompute a table for fast scalar multiplication.
decaf_448_point_identity
const DECAF_API_VIS decaf_448_point_t decaf_448_point_identity
The identity (zero) point on the curve.
decaf_448_scalar_s
Representation of an element of the scalar field.
Definition: point_448.h:84
decaf_448_direct_scalarmul
decaf_error_t DECAF_API_VIS decaf_448_direct_scalarmul(uint8_t scaled[DECAF_448_SER_BYTES], const uint8_t base[DECAF_448_SER_BYTES], const decaf_448_scalar_t scalar, decaf_bool_t allow_identity, decaf_bool_t short_circuit) DECAF_NONNULL DECAF_WARN_UNUSED DECAF_NOINLINE
Multiply a base point by a scalar: scaled = scalar*base.
decaf_448_scalar_sub
void DECAF_API_VIS decaf_448_scalar_sub(decaf_448_scalar_t out, const decaf_448_scalar_t a, const decaf_448_scalar_t b) DECAF_NONNULL DECAF_NOINLINE
Subtract two scalars.
decaf_448_point_add
void DECAF_API_VIS decaf_448_point_add(decaf_448_point_t sum, const decaf_448_point_t a, const decaf_448_point_t b) DECAF_NONNULL
Add two points to produce a third point.
decaf_448_invert_elligator_nonuniform
decaf_error_t DECAF_API_VIS decaf_448_invert_elligator_nonuniform(unsigned char recovered_hash[DECAF_448_HASH_BYTES], const decaf_448_point_t pt, uint32_t which) DECAF_NONNULL DECAF_NOINLINE DECAF_WARN_UNUSED
Inverse of elligator-like hash to curve.
decaf_bool_t
uint32_t decaf_bool_t
"Boolean" type, will be set to all-zero or all-one (i.e.
Definition: common.h:89
decaf_448_base_double_scalarmul_non_secret
void DECAF_API_VIS decaf_448_base_double_scalarmul_non_secret(decaf_448_point_t combo, const decaf_448_scalar_t scalar1, const decaf_448_point_t base2, const decaf_448_scalar_t scalar2) DECAF_NONNULL DECAF_NOINLINE
Multiply two base points by two scalars: scaled = scalar1*decaf_448_point_base + scalar2*base2.
decaf_448_precomputed_s
struct decaf_448_precomputed_s decaf_448_precomputed_s
Precomputed table based on a point.
Definition: point_448.h:78
decaf_448_point_eq
decaf_bool_t DECAF_API_VIS decaf_448_point_eq(const decaf_448_point_t a, const decaf_448_point_t b) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE
Test whether two points are equal.
decaf_448_scalar_destroy
void DECAF_API_VIS decaf_448_scalar_destroy(decaf_448_scalar_t scalar) DECAF_NONNULL
Securely erase a scalar.
decaf_448_scalar_t
struct decaf_448_scalar_s decaf_448_scalar_t[1]
Representation of an element of the scalar field.
decaf_448_point_sub
void DECAF_API_VIS decaf_448_point_sub(decaf_448_point_t diff, const decaf_448_point_t a, const decaf_448_point_t b) DECAF_NONNULL
Subtract two points to produce a third point.
decaf_448_point_negate
void DECAF_API_VIS decaf_448_point_negate(decaf_448_point_t nega, const decaf_448_point_t a) DECAF_NONNULL
Negate a point to produce another point.
decaf_448_point_from_hash_uniform
void DECAF_API_VIS decaf_448_point_from_hash_uniform(decaf_448_point_t pt, const unsigned char hashed_data[2 *DECAF_448_HASH_BYTES]) DECAF_NONNULL DECAF_NOINLINE
Indifferentiable hash function encoding to curve.
decaf_x448
decaf_error_t DECAF_API_VIS decaf_x448(uint8_t shared[DECAF_X448_PUBLIC_BYTES], const uint8_t base[DECAF_X448_PUBLIC_BYTES], const uint8_t scalar[DECAF_X448_PRIVATE_BYTES]) DECAF_NONNULL DECAF_WARN_UNUSED DECAF_NOINLINE
RFC 7748 Diffie-Hellman scalarmul, used to compute shared secrets.
decaf_448_point_base
const DECAF_API_VIS decaf_448_point_t decaf_448_point_base
An arbitrarily-chosen base point on the curve.
decaf_448_point_debugging_pscale
void DECAF_API_VIS decaf_448_point_debugging_pscale(decaf_448_point_t q, const decaf_448_point_t p, const unsigned char factor[DECAF_448_SER_BYTES]) DECAF_NONNULL DECAF_NOINLINE
Projectively scale a point, for debugging purposes.
decaf_x448_derive_public_key
void DECAF_API_VIS decaf_x448_derive_public_key(uint8_t out[DECAF_X448_PUBLIC_BYTES], const uint8_t scalar[DECAF_X448_PRIVATE_BYTES]) DECAF_NONNULL DECAF_NOINLINE
RFC 7748 Diffie-Hellman base point scalarmul.
decaf_error_t
decaf_error_t
Another boolean type used to indicate success or failure.
Definition: common.h:120
decaf_448_point_debugging_torque
void DECAF_API_VIS decaf_448_point_debugging_torque(decaf_448_point_t q, const decaf_448_point_t p) DECAF_NONNULL DECAF_NOINLINE
Torque a point, for debugging purposes.
decaf_448_invert_elligator_uniform
decaf_error_t DECAF_API_VIS decaf_448_invert_elligator_uniform(unsigned char recovered_hash[2 *DECAF_448_HASH_BYTES], const decaf_448_point_t pt, uint32_t which) DECAF_NONNULL DECAF_NOINLINE DECAF_WARN_UNUSED
Inverse of elligator-like hash to curve.
decaf_448_point_t
struct decaf_448_point_s decaf_448_point_t[1]
Representation of a point on the elliptic curve.
DECAF_X448_PRIVATE_BYTES
#define DECAF_X448_PRIVATE_BYTES
Number of bytes in an x448 private key.
Definition: point_448.h:65
decaf_448_scalar_eq
decaf_bool_t DECAF_API_VIS decaf_448_scalar_eq(const decaf_448_scalar_t a, const decaf_448_scalar_t b) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE
Compare two scalars.
decaf_448_point_encode
void DECAF_API_VIS decaf_448_point_encode(uint8_t ser[DECAF_448_SER_BYTES], const decaf_448_point_t pt) DECAF_NONNULL DECAF_NOINLINE
Encode a point as a sequence of bytes.
decaf_448_point_s
Representation of a point on the elliptic curve.
Definition: point_448.h:68
DECAF_448_SER_BYTES
#define DECAF_448_SER_BYTES
Number of bytes in a serialized point.
Definition: point_448.h:42
decaf_448_scalar_one
const DECAF_API_VIS decaf_448_scalar_t decaf_448_scalar_one
The scalar 1.
DECAF_WORD_BITS
#define DECAF_WORD_BITS
The number of bits in a word.
Definition: common.h:76
decaf_448_scalar_encode
void DECAF_API_VIS decaf_448_scalar_encode(unsigned char ser[DECAF_448_SCALAR_BYTES], const decaf_448_scalar_t s) DECAF_NONNULL DECAF_NOINLINE DECAF_NOINLINE
Serialize a scalar to wire format.
decaf_448_scalar_decode_long
void DECAF_API_VIS decaf_448_scalar_decode_long(decaf_448_scalar_t out, const unsigned char *ser, size_t ser_len) DECAF_NONNULL DECAF_NOINLINE
Read a scalar from wire format or from bytes.
common.h
Common utility headers for Decaf library.
decaf_448_scalar_invert
decaf_error_t DECAF_API_VIS decaf_448_scalar_invert(decaf_448_scalar_t out, const decaf_448_scalar_t a) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE
Invert a scalar.
decaf_448_point_double
void DECAF_API_VIS decaf_448_point_double(decaf_448_point_t two_a, const decaf_448_point_t a) DECAF_NONNULL
Double a point.
decaf_448_point_valid
decaf_bool_t DECAF_API_VIS decaf_448_point_valid(const decaf_448_point_t to_test) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE
Test that a point is valid, for debugging purposes.
DECAF_X448_PUBLIC_BYTES
#define DECAF_X448_PUBLIC_BYTES
Number of bytes in an x448 public key.
Definition: point_448.h:62
decaf_448_scalar_halve
void DECAF_API_VIS decaf_448_scalar_halve(decaf_448_scalar_t out, const decaf_448_scalar_t a) DECAF_NONNULL DECAF_NOINLINE
Halve a scalar.
decaf_448_precomputed_destroy
void DECAF_API_VIS decaf_448_precomputed_destroy(decaf_448_precomputed_s *pre) DECAF_NONNULL
Securely erase a precomputed table by overwriting it with zeros.
DECAF_448_HASH_BYTES
#define DECAF_448_HASH_BYTES
Number of bytes in an elligated point.
Definition: point_448.h:47
gf_448_s
Definition: f_field.h:27
decaf_448_scalar_mul
void DECAF_API_VIS decaf_448_scalar_mul(decaf_448_scalar_t out, const decaf_448_scalar_t a, const decaf_448_scalar_t b) DECAF_NONNULL DECAF_NOINLINE
Multiply two scalars.
decaf_448_point_from_hash_nonuniform
void DECAF_API_VIS decaf_448_point_from_hash_nonuniform(decaf_448_point_t pt, const unsigned char hashed_data[DECAF_448_HASH_BYTES]) DECAF_NONNULL DECAF_NOINLINE
Almost-Elligator-like hash to curve.
decaf_x448_base_point
const uint8_t DECAF_API_VIS decaf_x448_base_point[DECAF_X448_PUBLIC_BYTES]
The base point for X448 Diffie-Hellman.
Definition: decaf.c:66
decaf_448_scalar_set_unsigned
void DECAF_API_VIS decaf_448_scalar_set_unsigned(decaf_448_scalar_t out, uint64_t a) DECAF_NONNULL
Set a scalar to an unsigned 64-bit integer.
decaf_448_scalar_cond_sel
void DECAF_API_VIS decaf_448_scalar_cond_sel(decaf_448_scalar_t out, const decaf_448_scalar_t a, const decaf_448_scalar_t b, decaf_word_t pick_b) DECAF_NONNULL DECAF_NOINLINE
Constant-time decision between two scalars.
decaf_word_t
uint32_t decaf_word_t
Word size for internal computations.
Definition: common.h:87
decaf_448_point_cond_sel
void DECAF_API_VIS decaf_448_point_cond_sel(decaf_448_point_t out, const decaf_448_point_t a, const decaf_448_point_t b, decaf_word_t pick_b) DECAF_NONNULL DECAF_NOINLINE
Constant-time decision between two points.
decaf_448_point_decode
decaf_error_t DECAF_API_VIS decaf_448_point_decode(decaf_448_point_t pt, const uint8_t ser[DECAF_448_SER_BYTES], decaf_bool_t allow_identity) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE
Decode a point from a sequence of bytes.
decaf_448_scalar_decode
decaf_error_t DECAF_API_VIS decaf_448_scalar_decode(decaf_448_scalar_t out, const unsigned char ser[DECAF_448_SCALAR_BYTES]) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE
Read a scalar from wire format or from bytes.
decaf_448_scalar_zero
const DECAF_API_VIS decaf_448_scalar_t decaf_448_scalar_zero
The scalar 0.
decaf_448_precomputed_base
DECAF_API_VIS const struct decaf_448_precomputed_s * decaf_448_precomputed_base
Precomputed table of multiples of the base point on the curve.
decaf_448_precomputed_scalarmul
void DECAF_API_VIS decaf_448_precomputed_scalarmul(decaf_448_point_t scaled, const decaf_448_precomputed_s *base, const decaf_448_scalar_t scalar) DECAF_NONNULL DECAF_NOINLINE
Multiply a precomputed base point by a scalar: scaled = scalar*base.
decaf_448_point_mul_by_ratio_and_encode_like_x448
void DECAF_API_VIS decaf_448_point_mul_by_ratio_and_encode_like_x448(uint8_t out[DECAF_X448_PUBLIC_BYTES], const decaf_448_point_t p) DECAF_NONNULL
Multiply a point by DECAF_X448_ENCODE_RATIO, then encode it like RFC 7748.
decaf_448_point_destroy
void DECAF_API_VIS decaf_448_point_destroy(decaf_448_point_t point) DECAF_NONNULL
Securely erase a point by overwriting it with zeros.