crypto/qat: fix smaller modulus cases for mod exp
[dpdk.git] / drivers / crypto / qat / qat_ec.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2021-2022 Intel Corporation
3  */
4
5 #ifndef _QAT_EC_H_
6 #define _QAT_EC_H_
7
8 #define EC_MAX_SIZE     571
9
10 #include <rte_crypto_asym.h>
11
12 typedef struct {
13         uint8_t data[(EC_MAX_SIZE >> 3) + 1];
14 } buffer;
15
16 enum EC_NAME {
17         SECP256R1       = 1,
18         SECP384R1,
19         SECP521R1,
20 };
21
22 struct elliptic_curve {
23         const char *name;
24         uint32_t bytesize;
25         buffer x;
26         buffer y;
27         buffer n;
28         buffer p;
29         buffer a;
30         buffer b;
31         buffer h;
32 };
33
34 static struct elliptic_curve curve[] = {
35         [SECP256R1] = {
36                 .name = "secp256r1",
37                 .bytesize = 32,
38                 .x = {
39                         .data = {
40                                 0x6B, 0x17, 0xD1, 0xF2, 0xE1, 0x2C, 0x42, 0x47,
41                                 0xF8, 0xBC, 0xE6, 0xE5, 0x63, 0xA4, 0x40, 0xF2,
42                                 0x77, 0x03, 0x7D, 0x81, 0x2D, 0xEB, 0x33, 0xA0,
43                                 0xF4, 0xA1, 0x39, 0x45, 0xD8, 0x98, 0xC2, 0x96,
44                                 },
45                 },
46                 .y = {
47                         .data = {
48                                 0x4F, 0xE3, 0x42, 0xE2, 0xFE, 0x1A, 0x7F, 0x9B,
49                                 0x8E, 0xE7, 0xEB, 0x4A, 0x7C, 0x0F, 0x9E, 0x16,
50                                 0x2B, 0xCE, 0x33, 0x57, 0x6B, 0x31, 0x5E, 0xCE,
51                                 0xCB, 0xB6, 0x40, 0x68, 0x37, 0xBF, 0x51, 0xF5,
52                                 },
53                 },
54                 .n = {
55                         .data = {
56                                 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
57                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
58                                 0xBC, 0xE6, 0xFA, 0xAD, 0xA7, 0x17, 0x9E, 0x84,
59                                 0xF3, 0xB9, 0xCA, 0xC2, 0xFC, 0x63, 0x25, 0x51,
60                                 },
61                 },
62                 .p = {
63                         .data = {
64                                 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01,
65                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
66                                 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
67                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
68                                 },
69                 },
70                 .a = {
71                         .data = {
72                                 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x01,
73                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
74                                 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
75                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
76                                 },
77                 },
78                 .b = {
79                         .data = {
80                                 0x5A, 0xC6, 0x35, 0xD8, 0xAA, 0x3A, 0x93, 0xE7,
81                                 0xB3, 0xEB, 0xBD, 0x55, 0x76, 0x98, 0x86, 0xBC,
82                                 0x65, 0x1D, 0x06, 0xB0, 0xCC, 0x53, 0xB0, 0xF6,
83                                 0x3B, 0xCE, 0x3C, 0x3E, 0x27, 0xD2, 0x60, 0x4B,
84                                 },
85                 },
86                 .h = {
87                         .data = {
88                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
89                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
90                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
91                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
92                                 },
93                 },
94         },
95
96         [SECP521R1] = {
97                 .name = "secp521r1",
98                 .bytesize = 66,
99                 .x = {
100                         .data = {
101                                 0x00, 0xC6, 0x85, 0x8E, 0x06, 0xB7, 0x04, 0x04,
102                                 0xE9, 0xCD, 0x9E, 0x3E, 0xCB, 0x66, 0x23, 0x95,
103                                 0xB4, 0x42, 0x9C, 0x64, 0x81, 0x39, 0x05, 0x3F,
104                                 0xB5, 0x21, 0xF8, 0x28, 0xAF, 0x60, 0x6B, 0x4D,
105                                 0x3D, 0xBA, 0xA1, 0x4B, 0x5E, 0x77, 0xEF, 0xE7,
106                                 0x59, 0x28, 0xFE, 0x1D, 0xC1, 0x27, 0xA2, 0xFF,
107                                 0xA8, 0xDE, 0x33, 0x48, 0xB3, 0xC1, 0x85, 0x6A,
108                                 0x42, 0x9B, 0xF9, 0x7E, 0x7E, 0x31, 0xC2, 0xE5,
109                                 0xBD, 0x66,
110                                 },
111                 },
112                 .y = {
113                         .data = {
114                                 0x01, 0x18, 0x39, 0x29, 0x6A, 0x78, 0x9A, 0x3B,
115                                 0xC0, 0x04, 0x5C, 0x8A, 0x5F, 0xB4, 0x2C, 0x7D,
116                                 0x1B, 0xD9, 0x98, 0xF5, 0x44, 0x49, 0x57, 0x9B,
117                                 0x44, 0x68, 0x17, 0xAF, 0xBD, 0x17, 0x27, 0x3E,
118                                 0x66, 0x2C, 0x97, 0xEE, 0x72, 0x99, 0x5E, 0xF4,
119                                 0x26, 0x40, 0xC5, 0x50, 0xB9, 0x01, 0x3F, 0xAD,
120                                 0x07, 0x61, 0x35, 0x3C, 0x70, 0x86, 0xA2, 0x72,
121                                 0xC2, 0x40, 0x88, 0xBE, 0x94, 0x76, 0x9F, 0xD1,
122                                 0x66, 0x50,
123                                 },
124                 },
125                 .n = {
126                         .data = {
127                                 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
128                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
129                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
130                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
131                                 0xFF, 0xFA, 0x51, 0x86, 0x87, 0x83, 0xBF, 0x2F,
132                                 0x96, 0x6B, 0x7F, 0xCC, 0x01, 0x48, 0xF7, 0x09,
133                                 0xA5, 0xD0, 0x3B, 0xB5, 0xC9, 0xB8, 0x89, 0x9C,
134                                 0x47, 0xAE, 0xBB, 0x6F, 0xB7, 0x1E, 0x91, 0x38,
135                                 0x64, 0x09,
136                                 },
137                 },
138                 .p = {
139                         .data = {
140                                 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
141                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
142                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
143                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
144                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
145                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
146                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
147                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
148                                 0xFF, 0xFF,
149                                 },
150                 },
151                 .a = {
152                         .data = {
153                                 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
154                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
155                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
156                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
157                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
158                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
159                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
160                                 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
161                                 0xFF, 0xFC,
162                                 },
163                 },
164                 .b = {
165                         .data = {
166                                 0x00, 0x51, 0x95, 0x3E, 0xB9, 0x61, 0x8E, 0x1C,
167                                 0x9A, 0x1F, 0x92, 0x9A, 0x21, 0xA0, 0xB6, 0x85,
168                                 0x40, 0xEE, 0xA2, 0xDA, 0x72, 0x5B, 0x99, 0xB3,
169                                 0x15, 0xF3, 0xB8, 0xB4, 0x89, 0x91, 0x8E, 0xF1,
170                                 0x09, 0xE1, 0x56, 0x19, 0x39, 0x51, 0xEC, 0x7E,
171                                 0x93, 0x7B, 0x16, 0x52, 0xC0, 0xBD, 0x3B, 0xB1,
172                                 0xBF, 0x07, 0x35, 0x73, 0xDF, 0x88, 0x3D, 0x2C,
173                                 0x34, 0xF1, 0xEF, 0x45, 0x1F, 0xD4, 0x6B, 0x50,
174                                 0x3F, 0x00,
175                                 },
176                 },
177                 .h = {
178                         .data = {
179                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
180                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
182                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
183                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
184                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
185                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
186                                 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
187                                 0x00, 0x01,
188                                 },
189                 },
190         }
191 };
192
193 static int
194 pick_curve(struct rte_crypto_asym_xform *xform)
195 {
196         switch (xform->ec.curve_id) {
197         case RTE_CRYPTO_EC_GROUP_SECP256R1:
198                 return SECP256R1;
199         case RTE_CRYPTO_EC_GROUP_SECP521R1:
200                 return SECP521R1;
201         default:
202                 return -1;
203         }
204 }
205
206 #endif