Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0+ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Definitions of EC-RDSA Curve Parameters
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright (c) 2019 Vitaly Chikunov <vt@altlinux.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * This program is free software; you can redistribute it and/or modify it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * under the terms of the GNU General Public License as published by the Free
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  * Software Foundation; either version 2 of the License, or (at your option)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * any later version.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #ifndef _CRYTO_ECRDSA_DEFS_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #define _CRYTO_ECRDSA_DEFS_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #include "ecc.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #define ECRDSA_MAX_SIG_SIZE (2 * 512 / 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #define ECRDSA_MAX_DIGITS (512 / 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22)  * EC-RDSA uses its own set of curves.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24)  * cp256{a,b,c} curves first defined for GOST R 34.10-2001 in RFC 4357 (as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25)  * 256-bit {A,B,C}-ParamSet), but inherited for GOST R 34.10-2012 and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26)  * proposed for use in R 50.1.114-2016 and RFC 7836 as the 256-bit curves.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) /* OID_gostCPSignA 1.2.643.2.2.35.1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) static u64 cp256a_g_x[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	0x0000000000000001ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	0x0000000000000000ull, 0x0000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) static u64 cp256a_g_y[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	0x22ACC99C9E9F1E14ull, 0x35294F2DDF23E3B1ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	0x27DF505A453F2B76ull, 0x8D91E471E0989CDAull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) static u64 cp256a_p[] = { /* p = 2^256 - 617 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	0xFFFFFFFFFFFFFD97ull, 0xFFFFFFFFFFFFFFFFull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) static u64 cp256a_n[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	0x45841B09B761B893ull, 0x6C611070995AD100ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) static u64 cp256a_a[] = { /* a = p - 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	0xFFFFFFFFFFFFFD94ull, 0xFFFFFFFFFFFFFFFFull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) static u64 cp256a_b[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	0x00000000000000a6ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	0x0000000000000000ull, 0x0000000000000000ull };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) static struct ecc_curve gost_cp256a = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	.name = "cp256a",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	.g = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 		.x = cp256a_g_x,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 		.y = cp256a_g_y,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 		.ndigits = 256 / 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	.p = cp256a_p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	.n = cp256a_n,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	.a = cp256a_a,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	.b = cp256a_b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) /* OID_gostCPSignB 1.2.643.2.2.35.2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) static u64 cp256b_g_x[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	0x0000000000000001ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	0x0000000000000000ull, 0x0000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) static u64 cp256b_g_y[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	0x744BF8D717717EFCull, 0xC545C9858D03ECFBull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	0xB83D1C3EB2C070E5ull, 0x3FA8124359F96680ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) static u64 cp256b_p[] = { /* p = 2^255 + 3225 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	0x0000000000000C99ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	0x0000000000000000ull, 0x8000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) static u64 cp256b_n[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	0xE497161BCC8A198Full, 0x5F700CFFF1A624E5ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	0x0000000000000001ull, 0x8000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) static u64 cp256b_a[] = { /* a = p - 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	0x0000000000000C96ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	0x0000000000000000ull, 0x8000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) static u64 cp256b_b[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	0x2F49D4CE7E1BBC8Bull, 0xE979259373FF2B18ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	0x66A7D3C25C3DF80Aull, 0x3E1AF419A269A5F8ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) static struct ecc_curve gost_cp256b = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	.name = "cp256b",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	.g = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 		.x = cp256b_g_x,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 		.y = cp256b_g_y,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 		.ndigits = 256 / 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	.p = cp256b_p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	.n = cp256b_n,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 	.a = cp256b_a,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	.b = cp256b_b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) /* OID_gostCPSignC 1.2.643.2.2.35.3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) static u64 cp256c_g_x[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	0x0000000000000000ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	0x0000000000000000ull, 0x0000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) static u64 cp256c_g_y[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	0x366E550DFDB3BB67ull, 0x4D4DC440D4641A8Full,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	0x3CBF3783CD08C0EEull, 0x41ECE55743711A8Cull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) static u64 cp256c_p[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	0x7998F7B9022D759Bull, 0xCF846E86789051D3ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	0xAB1EC85E6B41C8AAull, 0x9B9F605F5A858107ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	/* pre-computed value for Barrett's reduction */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	0xedc283cdd217b5a2ull, 0xbac48fc06398ae59ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	0x405384d55f9f3b73ull, 0xa51f176161f1d734ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	0x0000000000000001ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) static u64 cp256c_n[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	0xF02F3A6598980BB9ull, 0x582CA3511EDDFB74ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	0xAB1EC85E6B41C8AAull, 0x9B9F605F5A858107ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) static u64 cp256c_a[] = { /* a = p - 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	0x7998F7B9022D7598ull, 0xCF846E86789051D3ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	0xAB1EC85E6B41C8AAull, 0x9B9F605F5A858107ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) static u64 cp256c_b[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	0x000000000000805aull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	0x0000000000000000ull, 0x0000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) static struct ecc_curve gost_cp256c = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	.name = "cp256c",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	.g = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 		.x = cp256c_g_x,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 		.y = cp256c_g_y,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 		.ndigits = 256 / 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	.p = cp256c_p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	.n = cp256c_n,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	.a = cp256c_a,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 	.b = cp256c_b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) /* tc512{a,b} curves first recommended in 2013 and then standardized in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)  * R 50.1.114-2016 and RFC 7836 for use with GOST R 34.10-2012 (as TC26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)  * 512-bit ParamSet{A,B}).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) /* OID_gostTC26Sign512A 1.2.643.7.1.2.1.2.1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) static u64 tc512a_g_x[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	0x0000000000000003ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	0x0000000000000000ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 	0x0000000000000000ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	0x0000000000000000ull, 0x0000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) static u64 tc512a_g_y[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	0x89A589CB5215F2A4ull, 0x8028FE5FC235F5B8ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	0x3D75E6A50E3A41E9ull, 0xDF1626BE4FD036E9ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	0x778064FDCBEFA921ull, 0xCE5E1C93ACF1ABC1ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 	0xA61B8816E25450E6ull, 0x7503CFE87A836AE3ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) static u64 tc512a_p[] = { /* p = 2^512 - 569 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	0xFFFFFFFFFFFFFDC7ull, 0xFFFFFFFFFFFFFFFFull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 	0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) static u64 tc512a_n[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	0xCACDB1411F10B275ull, 0x9B4B38ABFAD2B85Dull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	0x6FF22B8D4E056060ull, 0x27E69532F48D8911ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) static u64 tc512a_a[] = { /* a = p - 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	0xFFFFFFFFFFFFFDC4ull, 0xFFFFFFFFFFFFFFFFull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	0xFFFFFFFFFFFFFFFFull, 0xFFFFFFFFFFFFFFFFull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) static u64 tc512a_b[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	0x503190785A71C760ull, 0x862EF9D4EBEE4761ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 	0x4CB4574010DA90DDull, 0xEE3CB090F30D2761ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	0x79BD081CFD0B6265ull, 0x34B82574761CB0E8ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	0xC1BD0B2B6667F1DAull, 0xE8C2505DEDFC86DDull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) static struct ecc_curve gost_tc512a = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	.name = "tc512a",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	.g = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 		.x = tc512a_g_x,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 		.y = tc512a_g_y,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 		.ndigits = 512 / 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	.p = tc512a_p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	.n = tc512a_n,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	.a = tc512a_a,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	.b = tc512a_b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) /* OID_gostTC26Sign512B 1.2.643.7.1.2.1.2.2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) static u64 tc512b_g_x[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	0x0000000000000002ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 	0x0000000000000000ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 	0x0000000000000000ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) 	0x0000000000000000ull, 0x0000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) static u64 tc512b_g_y[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 	0x7E21340780FE41BDull, 0x28041055F94CEEECull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	0x152CBCAAF8C03988ull, 0xDCB228FD1EDF4A39ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	0xBE6DD9E6C8EC7335ull, 0x3C123B697578C213ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	0x2C071E3647A8940Full, 0x1A8F7EDA389B094Cull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) static u64 tc512b_p[] = { /* p = 2^511 + 111 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 	0x000000000000006Full, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 	0x0000000000000000ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	0x0000000000000000ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	0x0000000000000000ull, 0x8000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) static u64 tc512b_n[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	0xC6346C54374F25BDull, 0x8B996712101BEA0Eull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 	0xACFDB77BD9D40CFAull, 0x49A1EC142565A545ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 	0x0000000000000001ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	0x0000000000000000ull, 0x8000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) static u64 tc512b_a[] = { /* a = p - 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	0x000000000000006Cull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	0x0000000000000000ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 	0x0000000000000000ull, 0x0000000000000000ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 	0x0000000000000000ull, 0x8000000000000000ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) static u64 tc512b_b[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	0xFB8CCBC7C5140116ull, 0x50F78BEE1FA3106Eull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	0x7F8B276FAD1AB69Cull, 0x3E965D2DB1416D21ull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 	0xBF85DC806C4B289Full, 0xB97C7D614AF138BCull,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 	0x7E3E06CF6F5E2517ull, 0x687D1B459DC84145ull, };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) static struct ecc_curve gost_tc512b = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	.name = "tc512b",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	.g = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 		.x = tc512b_g_x,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 		.y = tc512b_g_y,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 		.ndigits = 512 / 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	.p = tc512b_p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	.n = tc512b_n,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 	.a = tc512b_a,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 	.b = tc512b_b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) #endif