xref: /dpdk/drivers/crypto/qat/qat_ec.h (revision 002486db)
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
pick_curve(struct rte_crypto_asym_xform * xform)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
207