My Project
Loading...
Searching...
No Matches
ge_448.h
1/* ge_448.h
2 *
3 * Copyright (C) 2006-2020 wolfSSL Inc.
4 *
5 * This file is part of wolfSSL.
6 *
7 * wolfSSL is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * wolfSSL is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
20 */
21
22
23#ifndef WOLF_CRYPT_GE_448_H
24#define WOLF_CRYPT_GE_448_H
25
26#include <wolfssl/wolfcrypt/settings.h>
27
28#ifdef HAVE_ED448
29
30#include <wolfssl/wolfcrypt/fe_448.h>
31
32/*
33ge448 means group element.
34
35Here the group is the set of pairs (x,y) of field elements (see fe.h)
36satisfying -x^2 + y^2 = 1 + d x^2y^2
37where d = -39081.
38
39Representations:
40 ge448_p2 (projective) : (X:Y:Z) satisfying x=X/Z, y=Y/Z
41 ge448_precomp (affine): (x,y)
42*/
43
44#ifdef ED448_SMALL
45 typedef byte ge448;
46 #define GE448_WORDS 56
47#elif defined(CURVED448_128BIT)
48 typedef int64_t ge448;
49 #define GE448_WORDS 8
50#else
51 typedef int32_t ge448;
52 #define GE448_WORDS 16
53#endif
54
55typedef struct {
56 ge448 X[GE448_WORDS];
57 ge448 Y[GE448_WORDS];
58 ge448 Z[GE448_WORDS];
59} ge448_p2;
60
61
62WOLFSSL_LOCAL int ge448_compress_key(byte*, const byte*, const byte*);
63WOLFSSL_LOCAL int ge448_from_bytes_negate_vartime(ge448_p2 *,
64 const unsigned char *);
65
66WOLFSSL_LOCAL int ge448_double_scalarmult_vartime(ge448_p2 *,
67 const unsigned char *,
68 const ge448_p2 *,
69 const unsigned char *);
70WOLFSSL_LOCAL void ge448_scalarmult_base(ge448_p2 *, const unsigned char *);
71WOLFSSL_LOCAL void sc448_reduce(byte*);
72WOLFSSL_LOCAL void sc448_muladd(byte*, const byte*, const byte*, const byte*);
73WOLFSSL_LOCAL void ge448_to_bytes(unsigned char *, const ge448_p2 *);
74
75
76#ifndef ED448_SMALL
77typedef struct {
78 ge448 x[GE448_WORDS];
79 ge448 y[GE448_WORDS];
81
82#endif /* !ED448_SMALL */
83
84#endif /* HAVE_ED448 */
85
86#endif /* WOLF_CRYPT_GE_448_H */
Definition ge_448.h:55
Definition ge_448.h:77