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