libdecaf
point_255.h
Go to the documentation of this file.
1 
15 #ifndef __DECAF_POINT_255_H__
16 #define __DECAF_POINT_255_H__ 1
17 
18 #include <decaf/common.h>
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
25 #define DECAF_255_SCALAR_LIMBS ((253-1)/DECAF_WORD_BITS+1)
29 #define DECAF_255_SCALAR_BITS 253
30 
32 #ifndef __DECAF_25519_GF_DEFINED__
33 #define __DECAF_25519_GF_DEFINED__ 1
35 typedef struct gf_25519_s {
36  decaf_word_t limb[320/DECAF_WORD_BITS];
37 } __attribute__((aligned(32))) gf_25519_s, gf_25519_t[1];
38 #endif /* __DECAF_25519_GF_DEFINED__ */
42 #define DECAF_255_SER_BYTES 32
43 
47 #define DECAF_255_HASH_BYTES 32
48 
50 #define DECAF_255_SCALAR_BYTES 32
51 
53 #define DECAF_255_INVERT_ELLIGATOR_WHICH_BITS 5
54 
56 #define DECAF_255_REMOVED_COFACTOR 8
57 
59 #define DECAF_X25519_ENCODE_RATIO 4
60 
62 #define DECAF_X25519_PUBLIC_BYTES 32
63 
65 #define DECAF_X25519_PRIVATE_BYTES 32
66 
68 typedef struct decaf_255_point_s {
70  gf_25519_t x,y,z,t; /* Twisted extended homogeneous coordinates */
73 
76 
79 
81 DECAF_API_VIS extern const size_t decaf_255_sizeof_precomputed_s, decaf_255_alignof_precomputed_s;
82 
84 typedef struct decaf_255_scalar_s {
86  decaf_word_t limb[DECAF_255_SCALAR_LIMBS];
89 
90 #if defined _MSC_VER
91 
93 extern const decaf_255_scalar_t DECAF_API_VIS decaf_255_scalar_one;
94 
96 extern const decaf_255_scalar_t DECAF_API_VIS decaf_255_scalar_zero;
97 
99 extern const decaf_255_point_t DECAF_API_VIS decaf_255_point_identity;
100 
102 extern const decaf_255_point_t DECAF_API_VIS decaf_255_point_base;
103 
105 extern const struct DECAF_API_VIS decaf_255_precomputed_s *decaf_255_precomputed_base;
106 
107 
108 #else // _MSC_VER
109 
111 DECAF_API_VIS extern const decaf_255_scalar_t decaf_255_scalar_one;
112 
114 DECAF_API_VIS extern const decaf_255_scalar_t decaf_255_scalar_zero;
115 
117 DECAF_API_VIS extern const decaf_255_point_t decaf_255_point_identity;
118 
120 DECAF_API_VIS extern const decaf_255_point_t decaf_255_point_base;
121 
123 DECAF_API_VIS extern const struct decaf_255_precomputed_s *decaf_255_precomputed_base;
124 
125 #endif // _MSC_VER
136 decaf_error_t DECAF_API_VIS decaf_255_scalar_decode (
137  decaf_255_scalar_t out,
138  const unsigned char ser[DECAF_255_SCALAR_BYTES]
139 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
140 
149 void DECAF_API_VIS decaf_255_scalar_decode_long (
150  decaf_255_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_255_scalar_encode (
162  unsigned char ser[DECAF_255_SCALAR_BYTES],
163  const decaf_255_scalar_t s
164 ) DECAF_NONNULL DECAF_NOINLINE DECAF_NOINLINE;
165 
172 void DECAF_API_VIS decaf_255_scalar_add (
173  decaf_255_scalar_t out,
174  const decaf_255_scalar_t a,
175  const decaf_255_scalar_t b
176 ) DECAF_NONNULL DECAF_NOINLINE;
177 
186  const decaf_255_scalar_t a,
187  const decaf_255_scalar_t b
188 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
189 
196 void DECAF_API_VIS decaf_255_scalar_sub (
197  decaf_255_scalar_t out,
198  const decaf_255_scalar_t a,
199  const decaf_255_scalar_t b
200 ) DECAF_NONNULL DECAF_NOINLINE;
201 
208 void DECAF_API_VIS decaf_255_scalar_mul (
209  decaf_255_scalar_t out,
210  const decaf_255_scalar_t a,
211  const decaf_255_scalar_t b
212 ) DECAF_NONNULL DECAF_NOINLINE;
213 
219 void DECAF_API_VIS decaf_255_scalar_halve (
220  decaf_255_scalar_t out,
221  const decaf_255_scalar_t a
222 ) DECAF_NONNULL DECAF_NOINLINE;
223 
231  decaf_255_scalar_t out,
232  const decaf_255_scalar_t a
233 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
234 
241 static inline void DECAF_NONNULL decaf_255_scalar_copy (
242  decaf_255_scalar_t out,
243  const decaf_255_scalar_t a
244 ) {
245  *out = *a;
246 }
247 
253 void DECAF_API_VIS decaf_255_scalar_set_unsigned (
254  decaf_255_scalar_t out,
255  uint64_t a
256 ) DECAF_NONNULL;
257 
264 void DECAF_API_VIS decaf_255_point_encode (
265  uint8_t ser[DECAF_255_SER_BYTES],
266  const decaf_255_point_t pt
267 ) DECAF_NONNULL DECAF_NOINLINE;
268 
285  const uint8_t ser[DECAF_255_SER_BYTES],
286  decaf_bool_t allow_identity
287 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
288 
296 static inline void DECAF_NONNULL decaf_255_point_copy (
298  const decaf_255_point_t b
299 ) {
300  *a=*b;
301 }
302 
313  const decaf_255_point_t a,
314  const decaf_255_point_t b
315 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
316 
326 void DECAF_API_VIS decaf_255_point_add (
327  decaf_255_point_t sum,
328  const decaf_255_point_t a,
329  const decaf_255_point_t b
330 ) DECAF_NONNULL;
331 
339 void DECAF_API_VIS decaf_255_point_double (
340  decaf_255_point_t two_a,
341  const decaf_255_point_t a
342 ) DECAF_NONNULL;
343 
353 void DECAF_API_VIS decaf_255_point_sub (
354  decaf_255_point_t diff,
355  const decaf_255_point_t a,
356  const decaf_255_point_t b
357 ) DECAF_NONNULL;
358 
366 void DECAF_API_VIS decaf_255_point_negate (
367  decaf_255_point_t nega,
368  const decaf_255_point_t a
369 ) DECAF_NONNULL;
370 
378 void DECAF_API_VIS decaf_255_point_scalarmul (
379  decaf_255_point_t scaled,
380  const decaf_255_point_t base,
381  const decaf_255_scalar_t scalar
382 ) DECAF_NONNULL DECAF_NOINLINE;
383 
402  uint8_t scaled[DECAF_255_SER_BYTES],
403  const uint8_t base[DECAF_255_SER_BYTES],
404  const decaf_255_scalar_t scalar,
405  decaf_bool_t allow_identity,
406  decaf_bool_t short_circuit
407 ) DECAF_NONNULL DECAF_WARN_UNUSED DECAF_NOINLINE;
408 
422  uint8_t shared[DECAF_X25519_PUBLIC_BYTES],
423  const uint8_t base[DECAF_X25519_PUBLIC_BYTES],
424  const uint8_t scalar[DECAF_X25519_PRIVATE_BYTES]
425 ) DECAF_NONNULL DECAF_WARN_UNUSED DECAF_NOINLINE;
426 
448  uint8_t out[DECAF_X25519_PUBLIC_BYTES],
449  const decaf_255_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_x25519_generate_key (
471  uint8_t out[DECAF_X25519_PUBLIC_BYTES],
472  const uint8_t scalar[DECAF_X25519_PRIVATE_BYTES]
473 ) DECAF_NONNULL DECAF_NOINLINE DECAF_DEPRECATED("Renamed to decaf_x25519_derive_public_key");
474 
485 void DECAF_API_VIS decaf_x25519_derive_public_key (
486  uint8_t out[DECAF_X25519_PUBLIC_BYTES],
487  const uint8_t scalar[DECAF_X25519_PRIVATE_BYTES]
488 ) DECAF_NONNULL DECAF_NOINLINE;
489 
490 /* FUTURE: uint8_t decaf_255_encode_like_curve25519) */
491 
501 void DECAF_API_VIS decaf_255_precompute (
503  const decaf_255_point_t b
504 ) DECAF_NONNULL DECAF_NOINLINE;
505 
518  decaf_255_point_t scaled,
519  const decaf_255_precomputed_s *base,
520  const decaf_255_scalar_t scalar
521 ) DECAF_NONNULL DECAF_NOINLINE;
522 
537  decaf_255_point_t combo,
538  const decaf_255_point_t base1,
539  const decaf_255_scalar_t scalar1,
540  const decaf_255_point_t base2,
541  const decaf_255_scalar_t scalar2
542 ) DECAF_NONNULL DECAF_NOINLINE;
543 
559 void DECAF_API_VIS decaf_255_point_dual_scalarmul (
562  const decaf_255_point_t base1,
563  const decaf_255_scalar_t scalar1,
564  const decaf_255_scalar_t scalar2
565 ) DECAF_NONNULL DECAF_NOINLINE;
566 
583  decaf_255_point_t combo,
584  const decaf_255_scalar_t scalar1,
585  const decaf_255_point_t base2,
586  const decaf_255_scalar_t scalar2
587 ) DECAF_NONNULL DECAF_NOINLINE;
588 
598 void DECAF_API_VIS decaf_255_point_cond_sel (
599  decaf_255_point_t out,
600  const decaf_255_point_t a,
601  const decaf_255_point_t b,
602  decaf_word_t pick_b
603 ) DECAF_NONNULL DECAF_NOINLINE;
604 
614 void DECAF_API_VIS decaf_255_scalar_cond_sel (
615  decaf_255_scalar_t out,
616  const decaf_255_scalar_t a,
617  const decaf_255_scalar_t b,
618  decaf_word_t pick_b
619 ) DECAF_NONNULL DECAF_NOINLINE;
620 
629  const decaf_255_point_t to_test
630 ) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE;
631 
641  const decaf_255_point_t p
642 ) DECAF_NONNULL DECAF_NOINLINE;
643 
655  const decaf_255_point_t p,
656  const unsigned char factor[DECAF_255_SER_BYTES]
657 ) DECAF_NONNULL DECAF_NOINLINE;
658 
687 void DECAF_API_VIS
690  const unsigned char hashed_data[DECAF_255_HASH_BYTES]
691 ) DECAF_NONNULL DECAF_NOINLINE;
692 
703  const unsigned char hashed_data[2*DECAF_255_HASH_BYTES]
704 ) DECAF_NONNULL DECAF_NOINLINE;
705 
734 decaf_error_t DECAF_API_VIS
736  unsigned char recovered_hash[DECAF_255_HASH_BYTES],
737  const decaf_255_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_255_HASH_BYTES],
762  const decaf_255_point_t pt,
763  uint32_t which
764 ) DECAF_NONNULL DECAF_NOINLINE DECAF_WARN_UNUSED;
765 
767 void DECAF_API_VIS decaf_255_scalar_destroy (
768  decaf_255_scalar_t scalar
769 ) DECAF_NONNULL;
770 
774 void DECAF_API_VIS decaf_255_point_destroy (
775  decaf_255_point_t point
776 ) DECAF_NONNULL;
777 
781 void DECAF_API_VIS decaf_255_precomputed_destroy (
783 ) DECAF_NONNULL;
784 
785 #ifdef __cplusplus
786 } /* extern "C" */
787 #endif
788 
789 #endif /* __DECAF_POINT_255_H__ */
Common utility headers for Decaf library.
#define DECAF_WORD_BITS
The number of bits in a word.
Definition: common.h:76
uint32_t decaf_bool_t
"Boolean" type, will be set to all-zero or all-one (i.e.
Definition: common.h:89
uint32_t decaf_word_t
Word size for internal computations.
Definition: common.h:87
decaf_error_t
Another boolean type used to indicate success or failure.
Definition: common.h:120
void DECAF_API_VIS decaf_255_point_scalarmul(decaf_255_point_t scaled, const decaf_255_point_t base, const decaf_255_scalar_t scalar) DECAF_NONNULL DECAF_NOINLINE
Multiply a base point by a scalar: scaled = scalar*base.
decaf_error_t DECAF_API_VIS decaf_255_direct_scalarmul(uint8_t scaled[DECAF_255_SER_BYTES], const uint8_t base[DECAF_255_SER_BYTES], const decaf_255_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.
void DECAF_API_VIS decaf_255_scalar_encode(unsigned char ser[DECAF_255_SCALAR_BYTES], const decaf_255_scalar_t s) DECAF_NONNULL DECAF_NOINLINE DECAF_NOINLINE
Serialize a scalar to wire format.
void DECAF_API_VIS decaf_255_point_cond_sel(decaf_255_point_t out, const decaf_255_point_t a, const decaf_255_point_t b, decaf_word_t pick_b) DECAF_NONNULL DECAF_NOINLINE
Constant-time decision between two points.
decaf_error_t DECAF_API_VIS decaf_255_scalar_invert(decaf_255_scalar_t out, const decaf_255_scalar_t a) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE
Invert a scalar.
decaf_error_t DECAF_API_VIS decaf_255_invert_elligator_uniform(unsigned char recovered_hash[2 *DECAF_255_HASH_BYTES], const decaf_255_point_t pt, uint32_t which) DECAF_NONNULL DECAF_NOINLINE DECAF_WARN_UNUSED
Inverse of elligator-like hash to curve.
void DECAF_API_VIS decaf_255_point_double_scalarmul(decaf_255_point_t combo, const decaf_255_point_t base1, const decaf_255_scalar_t scalar1, const decaf_255_point_t base2, const decaf_255_scalar_t scalar2) DECAF_NONNULL DECAF_NOINLINE
Multiply two base points by two scalars: scaled = scalar1*base1 + scalar2*base2.
const uint8_t DECAF_API_VIS decaf_x25519_base_point[DECAF_X25519_PUBLIC_BYTES]
The base point for X25519 Diffie-Hellman.
Definition: decaf.c:66
void DECAF_API_VIS decaf_255_point_encode(uint8_t ser[DECAF_255_SER_BYTES], const decaf_255_point_t pt) DECAF_NONNULL DECAF_NOINLINE
Encode a point as a sequence of bytes.
#define DECAF_255_SER_BYTES
Number of bytes in a serialized point.
Definition: point_255.h:42
struct decaf_255_precomputed_s decaf_255_precomputed_s
Precomputed table based on a point.
Definition: point_255.h:78
DECAF_API_VIS const struct decaf_255_precomputed_s * decaf_255_precomputed_base
Precomputed table of multiples of the base point on the curve.
void DECAF_API_VIS decaf_255_precompute(decaf_255_precomputed_s *a, const decaf_255_point_t b) DECAF_NONNULL DECAF_NOINLINE
Precompute a table for fast scalar multiplication.
decaf_error_t DECAF_API_VIS decaf_255_point_decode(decaf_255_point_t pt, const uint8_t ser[DECAF_255_SER_BYTES], decaf_bool_t allow_identity) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE
Decode a point from a sequence of bytes.
void DECAF_API_VIS decaf_255_scalar_add(decaf_255_scalar_t out, const decaf_255_scalar_t a, const decaf_255_scalar_t b) DECAF_NONNULL DECAF_NOINLINE
Add two scalars.
void DECAF_API_VIS decaf_255_point_debugging_pscale(decaf_255_point_t q, const decaf_255_point_t p, const unsigned char factor[DECAF_255_SER_BYTES]) DECAF_NONNULL DECAF_NOINLINE
Projectively scale a point, for debugging purposes.
void DECAF_API_VIS decaf_255_point_destroy(decaf_255_point_t point) DECAF_NONNULL
Securely erase a point by overwriting it with zeros.
struct decaf_255_point_s decaf_255_point_t[1]
Representation of a point on the elliptic curve.
decaf_bool_t DECAF_API_VIS decaf_255_scalar_eq(const decaf_255_scalar_t a, const decaf_255_scalar_t b) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE
Compare two scalars.
void DECAF_API_VIS decaf_x25519_derive_public_key(uint8_t out[DECAF_X25519_PUBLIC_BYTES], const uint8_t scalar[DECAF_X25519_PRIVATE_BYTES]) DECAF_NONNULL DECAF_NOINLINE
RFC 7748 Diffie-Hellman base point scalarmul.
struct decaf_255_scalar_s decaf_255_scalar_t[1]
Representation of an element of the scalar field.
decaf_error_t DECAF_API_VIS decaf_x25519(uint8_t shared[DECAF_X25519_PUBLIC_BYTES], const uint8_t base[DECAF_X25519_PUBLIC_BYTES], const uint8_t scalar[DECAF_X25519_PRIVATE_BYTES]) DECAF_NONNULL DECAF_WARN_UNUSED DECAF_NOINLINE
RFC 7748 Diffie-Hellman scalarmul, used to compute shared secrets.
void DECAF_API_VIS decaf_255_point_negate(decaf_255_point_t nega, const decaf_255_point_t a) DECAF_NONNULL
Negate a point to produce another point.
void DECAF_API_VIS decaf_255_scalar_destroy(decaf_255_scalar_t scalar) DECAF_NONNULL
Securely erase a scalar.
void DECAF_API_VIS decaf_255_scalar_set_unsigned(decaf_255_scalar_t out, uint64_t a) DECAF_NONNULL
Set a scalar to an unsigned 64-bit integer.
#define DECAF_X25519_PRIVATE_BYTES
Number of bytes in an x25519 private key.
Definition: point_255.h:65
void DECAF_API_VIS decaf_255_precomputed_scalarmul(decaf_255_point_t scaled, const decaf_255_precomputed_s *base, const decaf_255_scalar_t scalar) DECAF_NONNULL DECAF_NOINLINE
Multiply a precomputed base point by a scalar: scaled = scalar*base.
#define DECAF_X25519_PUBLIC_BYTES
Number of bytes in an x25519 public key.
Definition: point_255.h:62
void DECAF_API_VIS decaf_255_point_from_hash_uniform(decaf_255_point_t pt, const unsigned char hashed_data[2 *DECAF_255_HASH_BYTES]) DECAF_NONNULL DECAF_NOINLINE
Indifferentiable hash function encoding to curve.
#define DECAF_255_SCALAR_BYTES
Number of bytes in a serialized scalar.
Definition: point_255.h:50
void DECAF_API_VIS decaf_255_scalar_mul(decaf_255_scalar_t out, const decaf_255_scalar_t a, const decaf_255_scalar_t b) DECAF_NONNULL DECAF_NOINLINE
Multiply two scalars.
DECAF_API_VIS const decaf_255_point_t decaf_255_point_base
An arbitrarily-chosen base point on the curve.
void DECAF_API_VIS decaf_255_scalar_halve(decaf_255_scalar_t out, const decaf_255_scalar_t a) DECAF_NONNULL DECAF_NOINLINE
Halve a scalar.
void DECAF_API_VIS decaf_255_point_sub(decaf_255_point_t diff, const decaf_255_point_t a, const decaf_255_point_t b) DECAF_NONNULL
Subtract two points to produce a third point.
DECAF_API_VIS const decaf_255_scalar_t decaf_255_scalar_one
The scalar 1.
void DECAF_API_VIS decaf_255_point_dual_scalarmul(decaf_255_point_t a1, decaf_255_point_t a2, const decaf_255_point_t base1, const decaf_255_scalar_t scalar1, const decaf_255_scalar_t scalar2) DECAF_NONNULL DECAF_NOINLINE
Multiply one base point by two scalars:
void DECAF_API_VIS decaf_255_point_debugging_torque(decaf_255_point_t q, const decaf_255_point_t p) DECAF_NONNULL DECAF_NOINLINE
Torque a point, for debugging purposes.
decaf_bool_t DECAF_API_VIS decaf_255_point_eq(const decaf_255_point_t a, const decaf_255_point_t b) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE
Test whether two points are equal.
DECAF_API_VIS const decaf_255_point_t decaf_255_point_identity
The identity (zero) point on the curve.
void DECAF_API_VIS decaf_255_scalar_sub(decaf_255_scalar_t out, const decaf_255_scalar_t a, const decaf_255_scalar_t b) DECAF_NONNULL DECAF_NOINLINE
Subtract two scalars.
void DECAF_API_VIS decaf_255_point_mul_by_ratio_and_encode_like_x25519(uint8_t out[DECAF_X25519_PUBLIC_BYTES], const decaf_255_point_t p) DECAF_NONNULL
Multiply a point by DECAF_X25519_ENCODE_RATIO, then encode it like RFC 7748.
decaf_bool_t DECAF_API_VIS decaf_255_point_valid(const decaf_255_point_t to_test) DECAF_WARN_UNUSED DECAF_NONNULL DECAF_NOINLINE
Test that a point is valid, for debugging purposes.
DECAF_API_VIS const size_t decaf_255_sizeof_precomputed_s
Size and alignment of precomputed point tables.
decaf_error_t DECAF_API_VIS decaf_255_invert_elligator_nonuniform(unsigned char recovered_hash[DECAF_255_HASH_BYTES], const decaf_255_point_t pt, uint32_t which) DECAF_NONNULL DECAF_NOINLINE DECAF_WARN_UNUSED
Inverse of elligator-like hash to curve.
void DECAF_API_VIS decaf_255_point_add(decaf_255_point_t sum, const decaf_255_point_t a, const decaf_255_point_t b) DECAF_NONNULL
Add two points to produce a third point.
void DECAF_API_VIS decaf_x25519_generate_key(uint8_t out[DECAF_X25519_PUBLIC_BYTES], const uint8_t scalar[DECAF_X25519_PRIVATE_BYTES]) DECAF_NONNULL DECAF_NOINLINE DECAF_DEPRECATED("Renamed to decaf_x25519_derive_public_key")
RFC 7748 Diffie-Hellman base point scalarmul.
void DECAF_API_VIS decaf_255_point_double(decaf_255_point_t two_a, const decaf_255_point_t a) DECAF_NONNULL
Double a point.
#define DECAF_255_HASH_BYTES
Number of bytes in an elligated point.
Definition: point_255.h:47
void DECAF_API_VIS decaf_255_scalar_cond_sel(decaf_255_scalar_t out, const decaf_255_scalar_t a, const decaf_255_scalar_t b, decaf_word_t pick_b) DECAF_NONNULL DECAF_NOINLINE
Constant-time decision between two scalars.
void DECAF_API_VIS decaf_255_base_double_scalarmul_non_secret(decaf_255_point_t combo, const decaf_255_scalar_t scalar1, const decaf_255_point_t base2, const decaf_255_scalar_t scalar2) DECAF_NONNULL DECAF_NOINLINE
Multiply two base points by two scalars: scaled = scalar1*decaf_255_point_base + scalar2*base2.
DECAF_API_VIS const decaf_255_scalar_t decaf_255_scalar_zero
The scalar 0.
void DECAF_API_VIS decaf_255_precomputed_destroy(decaf_255_precomputed_s *pre) DECAF_NONNULL
Securely erase a precomputed table by overwriting it with zeros.
void DECAF_API_VIS decaf_255_scalar_decode_long(decaf_255_scalar_t out, const unsigned char *ser, size_t ser_len) DECAF_NONNULL DECAF_NOINLINE
Read a scalar from wire format or from bytes.
void DECAF_API_VIS decaf_255_point_from_hash_nonuniform(decaf_255_point_t pt, const unsigned char hashed_data[DECAF_255_HASH_BYTES]) DECAF_NONNULL DECAF_NOINLINE
Almost-Elligator-like hash to curve.
Representation of a point on the elliptic curve.
Definition: point_255.h:68
Representation of an element of the scalar field.
Definition: point_255.h:84
Definition: f_field.h:27