]> pd.if.org Git - zpackage/blob - crypto/libeddsa/lib/sc.h
add package signing code
[zpackage] / crypto / libeddsa / lib / sc.h
1 #ifndef SC_H
2 #define SC_H
3
4 #include <stddef.h>
5 #include <stdint.h>
6
7 #include "bitness.h"
8 #include "compat.h"
9 #include "limb.h"
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14
15 #ifdef USE_64BIT
16
17 #define SC_LIMB_NUM     5
18 #define SC_LIMB_BITS    52
19
20 #define SC_LIMB_MASK    ((1L << SC_LIMB_BITS)-1)
21
22 #else
23
24 #define SC_LIMB_NUM     10
25 #define SC_LIMB_BITS    26
26
27 #define SC_LIMB_MASK    ((1 << SC_LIMB_BITS)-1)
28
29 #endif
30
31
32 #define SC_BITS         (SC_LIMB_NUM * SC_LIMB_BITS)
33
34
35 /* sc_t holds 260bit in reduced form */
36 typedef limb_t sc_t[SC_LIMB_NUM];
37
38 /* lsc_t is double in size and holds up to 520bits in reduced form */
39 typedef limb_t lsc_t [2*SC_LIMB_NUM];
40
41
42
43 extern const sc_t con_off;
44
45
46 void    sc_reduce(sc_t dst, const lsc_t src);
47 void    sc_import(sc_t dst, const uint8_t *src, size_t len);
48 void    sc_export(uint8_t dst[32], const sc_t x);
49 void    sc_mul(sc_t res, const sc_t a, const sc_t b);
50 int     sc_jsf(int u0[SC_BITS+1], int u1[SC_BITS+1], const sc_t a, const sc_t b);
51
52
53 static INLINE void
54 sc_add(sc_t res, const sc_t a, const sc_t b)
55 {
56         int i;
57         for (i = 0; i < SC_LIMB_NUM; i++)
58                 res[i] = a[i] + b[i];
59 }
60
61 #ifdef __cplusplus
62 }
63 #endif
64 #endif