wolfSSL SSL/TLS library, support up to TLS1.3

Dependents:   CyaSSL-Twitter-OAuth4Tw Example-client-tls-cert TwitterReader TweetTest ... more

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?

UserRevisionLine numberNew 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