1 /***************************************************************************
2 *
3 * BSD LICENSE
4 *
5 * Copyright(c) 2007-2022 Intel Corporation. All rights reserved.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * * Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * * Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in
16 * the documentation and/or other materials provided with the
17 * distribution.
18 * * Neither the name of Intel Corporation nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34 *
35 ***************************************************************************/
36
37 /*
38 *****************************************************************************
39 * Doxygen group definitions
40 ****************************************************************************/
41
42 /**
43 *****************************************************************************
44 * @file cpa_cy_key.h
45 *
46 * @defgroup cpaCyKeyGen Cryptographic Key and Mask Generation API
47 *
48 * @ingroup cpaCy
49 *
50 * @description
51 * These functions specify the API for key and mask generation
52 * operations.
53 *
54 *****************************************************************************/
55
56 #ifndef CPA_CY_KEY_H
57 #define CPA_CY_KEY_H
58
59 #ifdef __cplusplus
60 extern "C" {
61 #endif
62
63 #include "cpa_cy_common.h"
64 #include "cpa_cy_sym.h" /* needed for hash algorithm, for MGF */
65
66 /**
67 *****************************************************************************
68 * @ingroup cpaCyKeyGen
69 * SSL or TLS key generation random number length.
70 *
71 * @description
72 * Defines the permitted SSL or TLS random number length in bytes that
73 * may be used with the functions @ref cpaCyKeyGenSsl and @ref
74 * cpaCyKeyGenTls. This is the length of the client or server random
75 * number values.
76 *****************************************************************************/
77 #define CPA_CY_KEY_GEN_SSL_TLS_RANDOM_LEN_IN_BYTES (32)
78
79 /**
80 *****************************************************************************
81 * @ingroup cpaCyKeyGen
82 * SSL Operation Types
83 * @description
84 * Enumeration of the different SSL operations that can be specified in
85 * the struct @ref CpaCyKeyGenSslOpData. It identifies the label.
86 *****************************************************************************/
87 typedef enum _CpaCyKeySslOp
88 {
89 CPA_CY_KEY_SSL_OP_MASTER_SECRET_DERIVE = 1,
90 /**< Derive the master secret */
91 CPA_CY_KEY_SSL_OP_KEY_MATERIAL_DERIVE,
92 /**< Derive the key material */
93 CPA_CY_KEY_SSL_OP_USER_DEFINED
94 /**< User Defined Operation for custom labels*/
95 } CpaCyKeySslOp;
96
97
98 /**
99 *****************************************************************************
100 * @ingroup cpaCyKeyGen
101 * SSL data for key generation functions
102 * @description
103 * This structure contains data for use in key generation operations for
104 * SSL. For specific SSL key generation operations, the structure fields
105 * MUST be set as follows:
106 *
107 * @par SSL Master-Secret Derivation:
108 * <br> sslOp = CPA_CY_KEY_SSL_OP_MASTER_SECRET_DERIVE
109 * <br> secret = pre-master secret key
110 * <br> seed = client_random + server_random
111 * <br> userLabel = NULL
112 *
113 * @par SSL Key-Material Derivation:
114 * <br> sslOp = CPA_CY_KEY_SSL_OP_KEY_MATERIAL_DERIVE
115 * <br> secret = master secret key
116 * <br> seed = server_random + client_random
117 * <br> userLabel = NULL
118 *
119 * <br> Note that the client/server random order is reversed from that
120 * used for master-secret derivation.
121 *
122 * @note Each of the client and server random numbers need to be of
123 * length CPA_CY_KEY_GEN_SSL_TLS_RANDOM_LEN_IN_BYTES.
124 *
125 * @note In each of the above descriptions, + indicates concatenation.
126 *
127 * @note The label used is predetermined by the SSL operation in line
128 * with the SSL 3.0 specification, and can be overridden by using
129 * a user defined operation CPA_CY_KEY_SSL_OP_USER_DEFINED and
130 * associated userLabel.
131 *
132 ****************************************************************************/
133 typedef struct _CpaCyKeyGenSslOpData {
134 CpaCyKeySslOp sslOp;
135 /**< Indicate the SSL operation to be performed */
136 CpaFlatBuffer secret;
137 /**< Flat buffer containing a pointer to either the master or pre-master
138 * secret key. The length field indicates the length of the secret key in
139 * bytes. Implementation-specific limits may apply to this length. */
140 CpaFlatBuffer seed;
141 /**< Flat buffer containing a pointer to the seed data.
142 * Implementation-specific limits may apply to this length. */
143 CpaFlatBuffer info;
144 /**< Flat buffer containing a pointer to the info data.
145 * Implementation-specific limits may apply to this length. */
146 Cpa32U generatedKeyLenInBytes;
147 /**< The requested length of the generated key in bytes.
148 * Implementation-specific limits may apply to this length. */
149 CpaFlatBuffer userLabel;
150 /**< Optional flat buffer containing a pointer to a user defined label.
151 * The length field indicates the length of the label in bytes. To use this
152 * field, the sslOp must be CPA_CY_KEY_SSL_OP_USER_DEFINED,
153 * or otherwise it is ignored and can be set to NULL.
154 * Implementation-specific limits
155 * may apply to this length. */
156 } CpaCyKeyGenSslOpData;
157
158 /**
159 *****************************************************************************
160 * @ingroup cpaCyKeyGen
161 * TLS Operation Types
162 * @description
163 * Enumeration of the different TLS operations that can be specified in
164 * the CpaCyKeyGenTlsOpData. It identifies the label.
165 *
166 * The functions @ref cpaCyKeyGenTls and @ref cpaCyKeyGenTls2
167 * accelerate the TLS PRF, which is defined as part of RFC2246 (TLS
168 * v1.0), RFC4346 (TLS v1.1), and RFC5246 (TLS v1.2).
169 * One of the inputs to each of these functions is a label.
170 * This enumerated type defines values that correspond to some of
171 * the required labels.
172 * However, for some of the operations/labels required by these RFCs,
173 * no values are specified.
174 *
175 * In such cases, a user-defined value must be provided. The client
176 * should use the enum value @ref CPA_CY_KEY_TLS_OP_USER_DEFINED, and
177 * pass the label using the userLabel field of the @ref
178 * CpaCyKeyGenTlsOpData data structure.
179 *
180 *****************************************************************************/
181 typedef enum _CpaCyKeyTlsOp
182 {
183 CPA_CY_KEY_TLS_OP_MASTER_SECRET_DERIVE = 1,
184 /**< Derive the master secret using the TLS PRF.
185 * Corresponds to RFC2246/5246 section 8.1, operation "Computing the
186 * master secret", label "master secret". */
187 CPA_CY_KEY_TLS_OP_KEY_MATERIAL_DERIVE,
188 /**< Derive the key material using the TLS PRF.
189 * Corresponds to RFC2246/5246 section 6.3, operation "Derive the key
190 * material", label "key expansion". */
191 CPA_CY_KEY_TLS_OP_CLIENT_FINISHED_DERIVE,
192 /**< Derive the client finished tag using the TLS PRF.
193 * Corresponds to RFC2246/5246 section 7.4.9, operation "Client finished",
194 * label "client finished". */
195 CPA_CY_KEY_TLS_OP_SERVER_FINISHED_DERIVE,
196 /**< Derive the server finished tag using the TLS PRF.
197 * Corresponds to RFC2246/5246 section 7.4.9, operation "Server finished",
198 * label "server finished". */
199 CPA_CY_KEY_TLS_OP_USER_DEFINED
200 /**< User Defined Operation for custom labels. */
201
202 } CpaCyKeyTlsOp;
203
204
205 /**
206 *****************************************************************************
207 * @file cpa_cy_key.h
208 * @ingroup cpaCyKeyGen
209 * TLS Operation Types
210 * @description
211 * Enumeration of the different TLS operations that can be specified in
212 * the CpaCyKeyGenHKDFOpData.
213 *
214 * The function @ref cpaCyKeyGenTls3
215 * accelerates the TLS HKDF, which is defined as part of RFC5869 (HKDF)
216 * and RFC8446 (TLS v1.3).
217 *
218 * This enumerated type defines the support HKDF operations for
219 * extraction and expansion of keying material.
220 *
221 *****************************************************************************/
222 typedef enum _CpaCyKeyHKDFOp
223 {
224 CPA_CY_HKDF_KEY_EXTRACT = 12,
225 /**< HKDF Extract operation
226 * Corresponds to RFC5869 section 2.2, step 1 "Extract" */
227 CPA_CY_HKDF_KEY_EXPAND,
228 /**< HKDF Expand operation
229 * Corresponds to RFC5869 section 2.3, step 2 "Expand" */
230 CPA_CY_HKDF_KEY_EXTRACT_EXPAND,
231 /**< HKDF operation
232 * This performs HKDF_EXTRACT and HKDF_EXPAND in a single
233 * API invocation. */
234 CPA_CY_HKDF_KEY_EXPAND_LABEL ,
235 /**< HKDF Expand label operation for TLS 1.3
236 * Corresponds to RFC8446 section 7.1 Key Schedule definition for
237 * HKDF-Expand-Label, which refers to HKDF-Expand defined in RFC5869. */
238 CPA_CY_HKDF_KEY_EXTRACT_EXPAND_LABEL
239 /**< HKDF Extract plus Expand label operation for TLS 1.3
240 * Corresponds to RFC5869 section 2.2, step 1 "Extract" followed by
241 * RFC8446 section 7.1 Key Schedule definition for
242 * HKDF-Expand-Label, which refers to HKDF-Expand defined in RFC5869. */
243 } CpaCyKeyHKDFOp;
244
245
246 /**
247 *****************************************************************************
248 * @file cpa_cy_key.h
249 * @ingroup cpaCyKeyGen
250 * TLS Operation Types
251 * @description
252 * Enumeration of the different cipher suites that may be used in a TLS
253 * v1.3 operation. This value is used to infer the sizes of the key
254 * and iv sublabel.
255 *
256 * The function @ref cpaCyKeyGenTls3
257 * accelerates the TLS HKDF, which is defined as part of RFC5869 (HKDF)
258 * and RFC8446 (TLS v1.3).
259 *
260 * This enumerated type defines the supported cipher suites in the
261 * TLS operation that require HKDF key operations.
262 *
263 *****************************************************************************/
264 typedef enum _CpaCyKeyHKDFCipherSuite
265 {
266 CPA_CY_HKDF_TLS_AES_128_GCM_SHA256 = 1,
267 CPA_CY_HKDF_TLS_AES_256_GCM_SHA384,
268 CPA_CY_HKDF_TLS_CHACHA20_POLY1305_SHA256 ,
269 CPA_CY_HKDF_TLS_AES_128_CCM_SHA256,
270 CPA_CY_HKDF_TLS_AES_128_CCM_8_SHA256
271 } CpaCyKeyHKDFCipherSuite;
272
273
274 /**
275 *****************************************************************************
276 * @file cpa_cy_key.h
277 * @ingroup cpaCyKeyGen
278 * TLS Operation Types
279 * @description
280 * Bitwise constants for HKDF sublabels
281 *
282 * These definitions provide bit settings for sublabels for
283 * HKDF-ExpandLabel operations.
284 *
285 * <br> key sublabel to generate "key" keying material
286 * <br> iv sublabel to generate "iv" keying material
287 * <br> resumption sublabel to generate "resumption" keying material
288 * <br> finished sublabel to generate "finished" keying material
289 *
290 *****************************************************************************/
291
292 #define CPA_CY_HKDF_SUBLABEL_KEY ((Cpa16U)0x0001)
293 /**< Bit for creation of key material for 'key' sublabel */
294 #define CPA_CY_HKDF_SUBLABEL_IV ((Cpa16U)0x0002)
295 /**< Bit for creation of key material for 'iv' sublabel */
296 #define CPA_CY_HKDF_SUBLABEL_RESUMPTION ((Cpa16U)0x0004)
297 /**< Bit for creation of key material for 'resumption' sublabel */
298 #define CPA_CY_HKDF_SUBLABEL_FINISHED ((Cpa16U)0x0008)
299 /**< Bit for creation of key material for 'finished' sublabel */
300
301 #define CPA_CY_HKDF_KEY_MAX_SECRET_SZ ((Cpa8U)64)
302 /** space in bytes PSK or (EC)DH */
303 #define CPA_CY_HKDF_KEY_MAX_HMAC_SZ ((Cpa8U)48)
304 /** space in bytes of CPA_CY_SYM_HASH_SHA384 result */
305 #define CPA_CY_HKDF_KEY_MAX_INFO_SZ ((Cpa8U)80)
306 /** space in bytes of largest info needed for TLS 1.3,
307 * rounded up to multiple of 8 */
308 #define CPA_CY_HKDF_KEY_MAX_LABEL_SZ ((Cpa8U)78)
309 /** space in bytes of largest label for TLS 1.3 */
310 #define CPA_CY_HKDF_KEY_MAX_LABEL_COUNT ((Cpa8U)4)
311 /** Maximum number of labels in op structure */
312
313 /**
314 *****************************************************************************
315 * @file cpa_cy_key.h
316 * @ingroup cpaCyKeyGen
317 * TLS data for key generation functions
318 * @description
319 * This structure contains data for describing label for the
320 * HKDF Extract Label function
321 *
322 * @par Extract Label Function
323 * <br> labelLen = length of the label field
324 * <br> contextLen = length of the context field
325 * <br> sublabelFlag = Mask of sub labels required for this label.
326 * <br> label = label as defined in RFC8446
327 * <br> context = context as defined in RFC8446
328 *
329 ****************************************************************************/
330 typedef struct _CpaCyKeyGenHKDFExpandLabel
331 {
332 Cpa8U label[CPA_CY_HKDF_KEY_MAX_LABEL_SZ];
333 /**< HKDFLabel field as defined in RFC8446 sec 7.1.
334 */
335 Cpa8U labelLen;
336 /**< The length, in bytes of the label */
337 Cpa8U sublabelFlag;
338 /**< mask of sublabels to be generated.
339 * This flag is composed of zero or more of:
340 * CPA_CY_HKDF_SUBLABEL_KEY
341 * CPA_CY_HKDF_SUBLABEL_IV
342 * CPA_CY_HKDF_SUBLABEL_RESUMPTION
343 * CPA_CY_HKDF_SUBLABEL_FINISHED
344 */
345 } CpaCyKeyGenHKDFExpandLabel;
346
347 /**
348 *****************************************************************************
349 * @file cpa_cy_key.h
350 * @ingroup cpaCyKeyGen
351 * TLS data for key generation functions
352 * @description
353 * This structure contains data for all HKDF operations:
354 * <br> HKDF Extract
355 * <br> HKDF Expand
356 * <br> HKDF Expand Label
357 * <br> HKDF Extract and Expand
358 * <br> HKDF Extract and Expand Label
359 *
360 * @par HKDF Map Structure Elements
361 * <br> secret - IKM value for extract operations or PRK for expand
362 * or expand operations.
363 * <br> seed - contains the salt for extract
364 * operations
365 * <br> info - contains the info data for extract operations
366 * <br> labels - See notes above
367 *
368 ****************************************************************************/
369 typedef struct _CpaCyKeyGenHKDFOpData
370 {
371 CpaCyKeyHKDFOp hkdfKeyOp;
372 /**< Keying operation to be performed. */
373 Cpa8U secretLen;
374 /**< Length of secret field */
375 Cpa16U seedLen;
376 /**< Length of seed field */
377 Cpa16U infoLen;
378 /**< Length of info field */
379 Cpa16U numLabels;
380 /**< Number of filled CpaCyKeyGenHKDFExpandLabel elements */
381 Cpa8U secret[CPA_CY_HKDF_KEY_MAX_SECRET_SZ];
382 /**< Input Key Material or PRK */
383 Cpa8U seed[CPA_CY_HKDF_KEY_MAX_HMAC_SZ];
384 /**< Input salt */
385 Cpa8U info[CPA_CY_HKDF_KEY_MAX_INFO_SZ];
386 /**< info field */
387 CpaCyKeyGenHKDFExpandLabel label[CPA_CY_HKDF_KEY_MAX_LABEL_COUNT];
388 /**< array of Expand Label structures */
389 } CpaCyKeyGenHKDFOpData;
390
391 /**
392 *****************************************************************************
393 * @ingroup cpaCyKeyGen
394 * TLS data for key generation functions
395 * @description
396 * This structure contains data for use in key generation operations for
397 * TLS. For specific TLS key generation operations, the structure fields
398 * MUST be set as follows:
399 *
400 * @par TLS Master-Secret Derivation:
401 * <br> tlsOp = CPA_CY_KEY_TLS_OP_MASTER_SECRET_DERIVE
402 * <br> secret = pre-master secret key
403 * <br> seed = client_random + server_random
404 * <br> userLabel = NULL
405 *
406 * @par TLS Key-Material Derivation:
407 * <br> tlsOp = CPA_CY_KEY_TLS_OP_KEY_MATERIAL_DERIVE
408 * <br> secret = master secret key
409 * <br> seed = server_random + client_random
410 * <br> userLabel = NULL
411 *
412 * <br> Note that the client/server random order is reversed from
413 * that used for Master-Secret Derivation.
414 *
415 * @par TLS Client finished/Server finished tag Derivation:
416 * <br> tlsOp = CPA_CY_KEY_TLS_OP_CLIENT_FINISHED_DERIVE (client)
417 * <br> or CPA_CY_KEY_TLS_OP_SERVER_FINISHED_DERIVE (server)
418 * <br> secret = master secret key
419 * <br> seed = MD5(handshake_messages) + SHA-1(handshake_messages)
420 * <br> userLabel = NULL
421 *
422 * @note Each of the client and server random seeds need to be of
423 * length CPA_CY_KEY_GEN_SSL_TLS_RANDOM_LEN_IN_BYTES.
424 * @note In each of the above descriptions, + indicates concatenation.
425 * @note The label used is predetermined by the TLS operation in line
426 * with the TLS specifications, and can be overridden by using
427 * a user defined operation CPA_CY_KEY_TLS_OP_USER_DEFINED
428 * and associated userLabel.
429 *
430 ****************************************************************************/
431 typedef struct _CpaCyKeyGenTlsOpData {
432 CpaCyKeyTlsOp tlsOp;
433 /**< TLS operation to be performed */
434 CpaFlatBuffer secret;
435 /**< Flat buffer containing a pointer to either the master or pre-master
436 * secret key. The length field indicates the length of the secret in
437 * bytes. */
438 CpaFlatBuffer seed;
439 /**< Flat buffer containing a pointer to the seed data.
440 * Implementation-specific limits may apply to this length. */
441 Cpa32U generatedKeyLenInBytes;
442 /**< The requested length of the generated key in bytes.
443 * Implementation-specific limits may apply to this length. */
444 CpaFlatBuffer userLabel;
445 /**< Optional flat buffer containing a pointer to a user defined label.
446 * The length field indicates the length of the label in bytes. To use this
447 * field, the tlsOp must be CPA_CY_KEY_TLS_OP_USER_DEFINED.
448 * Implementation-specific limits may apply to this length. */
449 } CpaCyKeyGenTlsOpData;
450
451 /**
452 *****************************************************************************
453 * @ingroup cpaCyKeyGen
454 * Key Generation Mask Generation Function (MGF) Data
455 * @description
456 * This structure contains data relating to Mask Generation Function
457 * key generation operations.
458 *
459 * @note The default hash algorithm used by the MGF is SHA-1. If a
460 * different hash algorithm is preferred, then see the extended
461 * version of this structure, @ref CpaCyKeyGenMgfOpDataExt.
462 * @see
463 * cpaCyKeyGenMgf
464 ****************************************************************************/
465 typedef struct _CpaCyKeyGenMgfOpData {
466 CpaFlatBuffer seedBuffer;
467 /**< Caller MUST allocate a buffer and populate with the input seed
468 * data. For optimal performance the start of the seed SHOULD be allocated
469 * on an 8-byte boundary. The length field represents the seed length in
470 * bytes. Implementation-specific limits may apply to this length. */
471 Cpa32U maskLenInBytes;
472 /**< The requested length of the generated mask in bytes.
473 * Implementation-specific limits may apply to this length. */
474 } CpaCyKeyGenMgfOpData;
475
476 /**
477 *****************************************************************************
478 * @ingroup cpaCyKeyGen
479 * Extension to the original Key Generation Mask Generation Function
480 * (MGF) Data
481 * @description
482 * This structure is an extension to the original MGF data structure.
483 * The extension allows the hash function to be specified.
484 * @note
485 * This structure is separate from the base @ref CpaCyKeyGenMgfOpData
486 * structure in order to retain backwards compatibility with the
487 * original version of the API.
488 * @see
489 * cpaCyKeyGenMgfExt
490 ****************************************************************************/
491 typedef struct _CpaCyKeyGenMgfOpDataExt {
492 CpaCyKeyGenMgfOpData baseOpData;
493 /**< "Base" operational data for MGF generation */
494 CpaCySymHashAlgorithm hashAlgorithm;
495 /**< Specifies the hash algorithm to be used by the Mask Generation
496 * Function */
497 } CpaCyKeyGenMgfOpDataExt;
498
499 /**
500 *****************************************************************************
501 * @ingroup cpaCyKeyGen
502 * Key Generation Statistics.
503 * @deprecated
504 * As of v1.3 of the Crypto API, this structure has been deprecated,
505 * replaced by @ref CpaCyKeyGenStats64.
506 * @description
507 * This structure contains statistics on the key and mask generation
508 * operations. Statistics are set to zero when the component is
509 * initialized, and are collected per instance.
510 *
511 ****************************************************************************/
512 typedef struct _CpaCyKeyGenStats {
513 Cpa32U numSslKeyGenRequests;
514 /**< Total number of successful SSL key generation requests. */
515 Cpa32U numSslKeyGenRequestErrors;
516 /**< Total number of SSL key generation requests that had an error and
517 * could not be processed. */
518 Cpa32U numSslKeyGenCompleted;
519 /**< Total number of SSL key generation operations that completed
520 * successfully. */
521 Cpa32U numSslKeyGenCompletedErrors;
522 /**< Total number of SSL key generation operations that could not be
523 * completed successfully due to errors. */
524 Cpa32U numTlsKeyGenRequests;
525 /**< Total number of successful TLS key generation requests. */
526 Cpa32U numTlsKeyGenRequestErrors;
527 /**< Total number of TLS key generation requests that had an error and
528 * could not be processed. */
529 Cpa32U numTlsKeyGenCompleted;
530 /**< Total number of TLS key generation operations that completed
531 * successfully. */
532 Cpa32U numTlsKeyGenCompletedErrors;
533 /**< Total number of TLS key generation operations that could not be
534 * completed successfully due to errors. */
535 Cpa32U numMgfKeyGenRequests;
536 /**< Total number of successful MGF key generation requests (including
537 * "extended" MGF requests). */
538 Cpa32U numMgfKeyGenRequestErrors;
539 /**< Total number of MGF key generation requests that had an error and
540 * could not be processed. */
541 Cpa32U numMgfKeyGenCompleted;
542 /**< Total number of MGF key generation operations that completed
543 * successfully. */
544 Cpa32U numMgfKeyGenCompletedErrors;
545 /**< Total number of MGF key generation operations that could not be
546 * completed successfully due to errors. */
547 } CpaCyKeyGenStats CPA_DEPRECATED;
548
549 /**
550 *****************************************************************************
551 * @ingroup cpaCyKeyGen
552 * Key Generation Statistics (64-bit version).
553 * @description
554 * This structure contains the 64-bit version of the statistics
555 * on the key and mask generation operations.
556 * Statistics are set to zero when the component is
557 * initialized, and are collected per instance.
558 *
559 ****************************************************************************/
560 typedef struct _CpaCyKeyGenStats64 {
561 Cpa64U numSslKeyGenRequests;
562 /**< Total number of successful SSL key generation requests. */
563 Cpa64U numSslKeyGenRequestErrors;
564 /**< Total number of SSL key generation requests that had an error and
565 * could not be processed. */
566 Cpa64U numSslKeyGenCompleted;
567 /**< Total number of SSL key generation operations that completed
568 * successfully. */
569 Cpa64U numSslKeyGenCompletedErrors;
570 /**< Total number of SSL key generation operations that could not be
571 * completed successfully due to errors. */
572 Cpa64U numTlsKeyGenRequests;
573 /**< Total number of successful TLS key generation requests. */
574 Cpa64U numTlsKeyGenRequestErrors;
575 /**< Total number of TLS key generation requests that had an error and
576 * could not be processed. */
577 Cpa64U numTlsKeyGenCompleted;
578 /**< Total number of TLS key generation operations that completed
579 * successfully. */
580 Cpa64U numTlsKeyGenCompletedErrors;
581 /**< Total number of TLS key generation operations that could not be
582 * completed successfully due to errors. */
583 Cpa64U numMgfKeyGenRequests;
584 /**< Total number of successful MGF key generation requests (including
585 * "extended" MGF requests). */
586 Cpa64U numMgfKeyGenRequestErrors;
587 /**< Total number of MGF key generation requests that had an error and
588 * could not be processed. */
589 Cpa64U numMgfKeyGenCompleted;
590 /**< Total number of MGF key generation operations that completed
591 * successfully. */
592 Cpa64U numMgfKeyGenCompletedErrors;
593 /**< Total number of MGF key generation operations that could not be
594 * completed successfully due to errors. */
595 } CpaCyKeyGenStats64;
596
597 /**
598 *****************************************************************************
599 * @ingroup cpaCyKeyGen
600 * SSL Key Generation Function.
601 * @description
602 * This function is used for SSL key generation. It implements the key
603 * generation function defined in section 6.2.2 of the SSL 3.0
604 * specification as described in
605 * http://www.mozilla.org/projects/security/pki/nss/ssl/draft302.txt.
606 *
607 * The input seed is taken as a flat buffer and the generated key is
608 * returned to caller in a flat destination data buffer.
609 * @context
610 * When called as an asynchronous function it cannot sleep. It can be
611 * executed in a context that does not permit sleeping.
612 * When called as a synchronous function it may sleep. It MUST NOT be
613 * executed in a context that DOES NOT permit sleeping.
614 * @assumptions
615 * None
616 * @sideEffects
617 * None
618 * @blocking
619 * Yes when configured to operate in synchronous mode.
620 * @reentrant
621 * No
622 * @threadSafe
623 * Yes
624 *
625 * @param[in] instanceHandle Instance handle.
626 * @param[in] pKeyGenCb Pointer to callback function to be
627 * invoked when the operation is complete.
628 * If this is set to a NULL value the
629 * function will operate synchronously.
630 * @param[in] pCallbackTag Opaque User Data for this specific
631 * call. Will be returned unchanged in the
632 * callback.
633 * @param[in] pKeyGenSslOpData Structure containing all the data
634 * needed to perform the SSL key
635 * generation operation. The client code
636 * allocates the memory for this
637 * structure. This component takes
638 * ownership of the memory until it is
639 * returned in the callback.
640 * @param[out] pGeneratedKeyBuffer Caller MUST allocate a sufficient
641 * buffer to hold the key generation
642 * output. The data pointer SHOULD be
643 * aligned on an 8-byte boundary. The
644 * length field passed in represents the
645 * size of the buffer in bytes. The value
646 * that is returned is the size of the
647 * result key in bytes.
648 * On invocation the callback function
649 * will contain this parameter in the
650 * pOut parameter.
651 *
652 * @retval CPA_STATUS_SUCCESS Function executed successfully.
653 * @retval CPA_STATUS_FAIL Function failed.
654 * @retval CPA_STATUS_RETRY Resubmit the request.
655 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
656 * @retval CPA_STATUS_RESOURCE Error related to system resources.
657 * @retval CPA_STATUS_RESTARTING API implementation is restarting.
658 * Resubmit the request.
659 *
660 * @pre
661 * The component has been initialized via cpaCyStartInstance function.
662 * @post
663 * None
664 * @see
665 * CpaCyKeyGenSslOpData,
666 * CpaCyGenFlatBufCbFunc
667 *
668 *****************************************************************************/
669 CpaStatus
670 cpaCyKeyGenSsl(const CpaInstanceHandle instanceHandle,
671 const CpaCyGenFlatBufCbFunc pKeyGenCb,
672 void *pCallbackTag,
673 const CpaCyKeyGenSslOpData *pKeyGenSslOpData,
674 CpaFlatBuffer *pGeneratedKeyBuffer);
675
676 /**
677 *****************************************************************************
678 * @ingroup cpaCyKeyGen
679 * TLS Key Generation Function.
680 * @description
681 * This function is used for TLS key generation. It implements the
682 * TLS PRF (Pseudo Random Function) as defined by RFC2246 (TLS v1.0)
683 * and RFC4346 (TLS v1.1).
684 *
685 * The input seed is taken as a flat buffer and the generated key is
686 * returned to caller in a flat destination data buffer.
687 *
688 * @context
689 * When called as an asynchronous function it cannot sleep. It can be
690 * executed in a context that does not permit sleeping.
691 * When called as a synchronous function it may sleep. It MUST NOT be
692 * executed in a context that DOES NOT permit sleeping.
693 * @assumptions
694 * None
695 * @sideEffects
696 * None
697 * @blocking
698 * Yes when configured to operate in synchronous mode.
699 * @reentrant
700 * No
701 * @threadSafe
702 * Yes
703 *
704 * @param[in] instanceHandle Instance handle.
705 * @param[in] pKeyGenCb Pointer to callback function to be
706 * invoked when the operation is complete.
707 * If this is set to a NULL value the
708 * function will operate synchronously.
709 * @param[in] pCallbackTag Opaque User Data for this specific
710 * call. Will be returned unchanged in the
711 * callback.
712 * @param[in] pKeyGenTlsOpData Structure containing all the data
713 * needed to perform the TLS key
714 * generation operation. The client code
715 * allocates the memory for this
716 * structure. This component takes
717 * ownership of the memory until it is
718 * returned in the callback.
719 * @param[out] pGeneratedKeyBuffer Caller MUST allocate a sufficient
720 * buffer to hold the key generation
721 * output. The data pointer SHOULD be
722 * aligned on an 8-byte boundary. The
723 * length field passed in represents the
724 * size of the buffer in bytes. The value
725 * that is returned is the size of the
726 * result key in bytes.
727 * On invocation the callback function
728 * will contain this parameter in the
729 * pOut parameter.
730 *
731 * @retval CPA_STATUS_SUCCESS Function executed successfully.
732 * @retval CPA_STATUS_FAIL Function failed.
733 * @retval CPA_STATUS_RETRY Resubmit the request.
734 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
735 * @retval CPA_STATUS_RESOURCE Error related to system resources.
736 * @retval CPA_STATUS_RESTARTING API implementation is restarting.
737 * Resubmit the request.
738 *
739 * @pre
740 * The component has been initialized via cpaCyStartInstance function.
741 * @post
742 * None
743 * @see
744 * CpaCyKeyGenTlsOpData,
745 * CpaCyGenFlatBufCbFunc
746 *
747 *****************************************************************************/
748 CpaStatus
749 cpaCyKeyGenTls(const CpaInstanceHandle instanceHandle,
750 const CpaCyGenFlatBufCbFunc pKeyGenCb,
751 void *pCallbackTag,
752 const CpaCyKeyGenTlsOpData *pKeyGenTlsOpData,
753 CpaFlatBuffer *pGeneratedKeyBuffer);
754
755 /**
756 *****************************************************************************
757 * @ingroup cpaCyKeyGen
758 * TLS Key Generation Function version 2.
759 * @description
760 * This function is used for TLS key generation. It implements the
761 * TLS PRF (Pseudo Random Function) as defined by RFC5246 (TLS v1.2).
762 *
763 * The input seed is taken as a flat buffer and the generated key is
764 * returned to caller in a flat destination data buffer.
765 *
766 * @context
767 * When called as an asynchronous function it cannot sleep. It can be
768 * executed in a context that does not permit sleeping.
769 * When called as a synchronous function it may sleep. It MUST NOT be
770 * executed in a context that DOES NOT permit sleeping.
771 * @assumptions
772 * None
773 * @sideEffects
774 * None
775 * @blocking
776 * Yes when configured to operate in synchronous mode.
777 * @reentrant
778 * No
779 * @threadSafe
780 * Yes
781 *
782 * @param[in] instanceHandle Instance handle.
783 * @param[in] pKeyGenCb Pointer to callback function to be
784 * invoked when the operation is complete.
785 * If this is set to a NULL value the
786 * function will operate synchronously.
787 * @param[in] pCallbackTag Opaque User Data for this specific
788 * call. Will be returned unchanged in the
789 * callback.
790 * @param[in] pKeyGenTlsOpData Structure containing all the data
791 * needed to perform the TLS key
792 * generation operation. The client code
793 * allocates the memory for this
794 * structure. This component takes
795 * ownership of the memory until it is
796 * returned in the callback.
797 * @param[in] hashAlgorithm Specifies the hash algorithm to use.
798 * According to RFC5246, this should be
799 * "SHA-256 or a stronger standard hash
800 * function."
801 * @param[out] pGeneratedKeyBuffer Caller MUST allocate a sufficient
802 * buffer to hold the key generation
803 * output. The data pointer SHOULD be
804 * aligned on an 8-byte boundary. The
805 * length field passed in represents the
806 * size of the buffer in bytes. The value
807 * that is returned is the size of the
808 * result key in bytes.
809 * On invocation the callback function
810 * will contain this parameter in the
811 * pOut parameter.
812 *
813 * @retval CPA_STATUS_SUCCESS Function executed successfully.
814 * @retval CPA_STATUS_FAIL Function failed.
815 * @retval CPA_STATUS_RETRY Resubmit the request.
816 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
817 * @retval CPA_STATUS_RESOURCE Error related to system resources.
818 * @retval CPA_STATUS_RESTARTING API implementation is restarting.
819 * Resubmit the request.
820 *
821 * @pre
822 * The component has been initialized via cpaCyStartInstance function.
823 * @post
824 * None
825 * @see
826 * CpaCyKeyGenTlsOpData,
827 * CpaCyGenFlatBufCbFunc
828 *
829 *****************************************************************************/
830 CpaStatus
831 cpaCyKeyGenTls2(const CpaInstanceHandle instanceHandle,
832 const CpaCyGenFlatBufCbFunc pKeyGenCb,
833 void *pCallbackTag,
834 const CpaCyKeyGenTlsOpData *pKeyGenTlsOpData,
835 CpaCySymHashAlgorithm hashAlgorithm,
836 CpaFlatBuffer *pGeneratedKeyBuffer);
837
838
839 /**
840 *****************************************************************************
841 * @file cpa_cy_key.h
842 * @ingroup cpaCyKeyGen
843 * TLS Key Generation Function version 3.
844 * @description
845 * This function is used for TLS key generation. It implements the
846 * TLS HKDF (HMAC Key Derivation Function) as defined by
847 * RFC5689 (HKDF) and RFC8446 (TLS 1.3).
848 *
849 * The input seed is taken as a flat buffer and the generated key is
850 * returned to caller in a flat destination data buffer.
851 *
852 * @context
853 * When called as an asynchronous function it cannot sleep. It can be
854 * executed in a context that does not permit sleeping.
855 * When called as a synchronous function it may sleep. It MUST NOT be
856 * executed in a context that DOES NOT permit sleeping.
857 * @assumptions
858 * None
859 * @sideEffects
860 * None
861 * @blocking
862 * Yes when configured to operate in synchronous mode.
863 * @reentrant
864 * No
865 * @threadSafe
866 * Yes
867 *
868 * @param[in] instanceHandle Instance handle.
869 * @param[in] pKeyGenCb Pointer to callback function to be
870 * invoked when the operation is complete.
871 * If this is set to a NULL value the
872 * function will operate synchronously.
873 * @param[in] pCallbackTag Opaque User Data for this specific
874 * call. Will be returned unchanged in the
875 * callback.
876 * @param[in] pKeyGenTlsOpData Structure containing all the data
877 * needed to perform the TLS key
878 * generation operation. The client code
879 * allocates the memory for this
880 * structure. This component takes
881 * ownership of the memory until it is
882 * returned in the callback. The memory
883 * must be pinned and contiguous, suitable
884 * for DMA operations.
885 * @param[in] hashAlgorithm Specifies the hash algorithm to use.
886 * According to RFC5246, this should be
887 * "SHA-256 or a stronger standard hash
888 * function."
889 * @param[out] pGeneratedKeyBuffer Caller MUST allocate a sufficient
890 * buffer to hold the key generation
891 * output. The data pointer SHOULD be
892 * aligned on an 8-byte boundary. The
893 * length field passed in represents the
894 * size of the buffer in bytes. The value
895 * that is returned is the size of the
896 * result key in bytes.
897 * On invocation the callback function
898 * will contain this parameter in the
899 * pOut parameter.
900 *
901 * @retval CPA_STATUS_SUCCESS Function executed successfully.
902 * @retval CPA_STATUS_FAIL Function failed.
903 * @retval CPA_STATUS_RETRY Resubmit the request.
904 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
905 * @retval CPA_STATUS_RESOURCE Error related to system resources.
906 * @retval CPA_STATUS_RESTARTING API implementation is restarting.
907 * Resubmit the request.
908 *
909 * @pre
910 * The component has been initialized via cpaCyStartInstance function.
911 * @post
912 * None
913 * @see
914 * CpaCyGenFlatBufCbFunc
915 * CpaCyKeyGenHKDFOpData
916 *
917 *****************************************************************************/
918 CpaStatus
919 cpaCyKeyGenTls3(const CpaInstanceHandle instanceHandle,
920 const CpaCyGenFlatBufCbFunc pKeyGenCb,
921 void *pCallbackTag,
922 const CpaCyKeyGenHKDFOpData *pKeyGenTlsOpData,
923 CpaCyKeyHKDFCipherSuite cipherSuite,
924 CpaFlatBuffer *pGeneratedKeyBuffer);
925
926
927 /**
928 *****************************************************************************
929 * @ingroup cpaCyKeyGen
930 * Mask Generation Function.
931 * @description
932 * This function implements the mask generation function MGF1 as
933 * defined by PKCS#1 v2.1, and RFC3447. The input seed is taken
934 * as a flat buffer and the generated mask is returned to caller in a
935 * flat destination data buffer.
936 *
937 * @note The default hash algorithm used by the MGF is SHA-1. If a
938 * different hash algorithm is preferred, then see the "extended"
939 * version of this function, @ref cpaCyKeyGenMgfExt.
940 *
941 * @context
942 * When called as an asynchronous function it cannot sleep. It can be
943 * executed in a context that does not permit sleeping.
944 * When called as a synchronous function it may sleep. It MUST NOT be
945 * executed in a context that DOES NOT permit sleeping.
946 * @assumptions
947 * None
948 * @sideEffects
949 * None
950 * @blocking
951 * Yes when configured to operate in synchronous mode.
952 * @reentrant
953 * No
954 * @threadSafe
955 * Yes
956 *
957 * @param[in] instanceHandle Instance handle.
958 * @param[in] pKeyGenCb Pointer to callback function to be
959 * invoked when the operation is complete.
960 * If this is set to a NULL value the
961 * function will operate synchronously.
962 * @param[in] pCallbackTag Opaque User Data for this specific call.
963 * Will be returned unchanged in the
964 * callback.
965 * @param[in] pKeyGenMgfOpData Structure containing all the data needed
966 * to perform the MGF key generation
967 * operation. The client code allocates the
968 * memory for this structure. This
969 * component takes ownership of the memory
970 * until it is returned in the callback.
971 * @param[out] pGeneratedMaskBuffer Caller MUST allocate a sufficient buffer
972 * to hold the generated mask. The data
973 * pointer SHOULD be aligned on an 8-byte
974 * boundary. The length field passed in
975 * represents the size of the buffer in
976 * bytes. The value that is returned is the
977 * size of the generated mask in bytes.
978 * On invocation the callback function
979 * will contain this parameter in the
980 * pOut parameter.
981 *
982 * @retval CPA_STATUS_SUCCESS Function executed successfully.
983 * @retval CPA_STATUS_FAIL Function failed.
984 * @retval CPA_STATUS_RETRY Resubmit the request.
985 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
986 * @retval CPA_STATUS_RESOURCE Error related to system resources.
987 * @retval CPA_STATUS_RESTARTING API implementation is restarting.
988 * Resubmit the request.
989 *
990 * @pre
991 * The component has been initialized via cpaCyStartInstance function.
992 * @post
993 * None
994 * @see
995 * CpaCyKeyGenMgfOpData,
996 * CpaCyGenFlatBufCbFunc
997 *
998 *****************************************************************************/
999 CpaStatus
1000 cpaCyKeyGenMgf(const CpaInstanceHandle instanceHandle,
1001 const CpaCyGenFlatBufCbFunc pKeyGenCb,
1002 void *pCallbackTag,
1003 const CpaCyKeyGenMgfOpData *pKeyGenMgfOpData,
1004 CpaFlatBuffer *pGeneratedMaskBuffer);
1005
1006 /**
1007 *****************************************************************************
1008 * @ingroup cpaCyKeyGen
1009 * Extended Mask Generation Function.
1010 * @description
1011 * This function is used for mask generation. It differs from the "base"
1012 * version of the function (@ref cpaCyKeyGenMgf) in that it allows
1013 * the hash function used by the Mask Generation Function to be
1014 * specified.
1015 *
1016 * @context
1017 * When called as an asynchronous function it cannot sleep. It can be
1018 * executed in a context that does not permit sleeping.
1019 * When called as a synchronous function it may sleep. It MUST NOT be
1020 * executed in a context that DOES NOT permit sleeping.
1021 * @assumptions
1022 * None
1023 * @sideEffects
1024 * None
1025 * @blocking
1026 * Yes when configured to operate in synchronous mode.
1027 * @reentrant
1028 * No
1029 * @threadSafe
1030 * Yes
1031 *
1032 * @param[in] instanceHandle Instance handle.
1033 * @param[in] pKeyGenCb Pointer to callback function to be
1034 * invoked when the operation is complete.
1035 * If this is set to a NULL value the
1036 * function will operate synchronously.
1037 * @param[in] pCallbackTag Opaque User Data for this specific call.
1038 * Will be returned unchanged in the
1039 * callback.
1040 * @param[in] pKeyGenMgfOpDataExt Structure containing all the data needed
1041 * to perform the extended MGF key generation
1042 * operation. The client code allocates the
1043 * memory for this structure. This
1044 * component takes ownership of the memory
1045 * until it is returned in the callback.
1046 * @param[out] pGeneratedMaskBuffer Caller MUST allocate a sufficient buffer
1047 * to hold the generated mask. The data
1048 * pointer SHOULD be aligned on an 8-byte
1049 * boundary. The length field passed in
1050 * represents the size of the buffer in
1051 * bytes. The value that is returned is the
1052 * size of the generated mask in bytes.
1053 * On invocation the callback function
1054 * will contain this parameter in the
1055 * pOut parameter.
1056 *
1057 * @retval CPA_STATUS_SUCCESS Function executed successfully.
1058 * @retval CPA_STATUS_FAIL Function failed.
1059 * @retval CPA_STATUS_RETRY Resubmit the request.
1060 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
1061 * @retval CPA_STATUS_RESOURCE Error related to system resources.
1062 * @retval CPA_STATUS_RESTARTING API implementation is restarting.
1063 * Resubmit the request.
1064 *
1065 * @pre
1066 * The component has been initialized via cpaCyStartInstance function.
1067 * @post
1068 * None
1069 * @note
1070 * This function is only used to generate a mask keys from seed
1071 * material.
1072 * @see
1073 * CpaCyKeyGenMgfOpData,
1074 * CpaCyGenFlatBufCbFunc
1075 *
1076 *****************************************************************************/
1077 CpaStatus
1078 cpaCyKeyGenMgfExt(const CpaInstanceHandle instanceHandle,
1079 const CpaCyGenFlatBufCbFunc pKeyGenCb,
1080 void *pCallbackTag,
1081 const CpaCyKeyGenMgfOpDataExt *pKeyGenMgfOpDataExt,
1082 CpaFlatBuffer *pGeneratedMaskBuffer);
1083
1084 /**
1085 *****************************************************************************
1086 * @ingroup cpaCyKeyGen
1087 * Queries the Key and Mask generation statistics specific to
1088 * an instance.
1089 *
1090 * @deprecated
1091 * As of v1.3 of the Crypto API, this function has been deprecated,
1092 * replaced by @ref cpaCyKeyGenQueryStats64().
1093 *
1094 * @description
1095 * This function will query a specific instance for key and mask
1096 * generation statistics. The user MUST allocate the CpaCyKeyGenStats
1097 * structure and pass the reference to that into this function call. This
1098 * function will write the statistic results into the passed in
1099 * CpaCyKeyGenStats structure.
1100 *
1101 * Note: statistics returned by this function do not interrupt current data
1102 * processing and as such can be slightly out of sync with operations that
1103 * are in progress during the statistics retrieval process.
1104 *
1105 * @context
1106 * This is a synchronous function and it can sleep. It MUST NOT be
1107 * executed in a context that DOES NOT permit sleeping.
1108 * @assumptions
1109 * None
1110 * @sideEffects
1111 * None
1112 * @blocking
1113 * This function is synchronous and blocking.
1114 * @reentrant
1115 * No
1116 * @threadSafe
1117 * Yes
1118 *
1119 * @param[in] instanceHandle Instance handle.
1120 * @param[out] pKeyGenStats Pointer to memory into which the statistics
1121 * will be written.
1122 *
1123 * @retval CPA_STATUS_SUCCESS Function executed successfully.
1124 * @retval CPA_STATUS_FAIL Function failed.
1125 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
1126 * @retval CPA_STATUS_RESOURCE Error related to system resources.
1127 * @retval CPA_STATUS_RESTARTING API implementation is restarting.
1128 * Resubmit the request.
1129 *
1130 * @pre
1131 * Component has been initialized.
1132 * @post
1133 * None
1134 * @note
1135 * This function operates in a synchronous manner and no asynchronous
1136 * callback will be generated.
1137 *
1138 * @see
1139 * CpaCyKeyGenStats
1140 *
1141 *****************************************************************************/
1142 CpaStatus CPA_DEPRECATED
1143 cpaCyKeyGenQueryStats(const CpaInstanceHandle instanceHandle,
1144 struct _CpaCyKeyGenStats *pKeyGenStats);
1145
1146 /**
1147 *****************************************************************************
1148 * @ingroup cpaCyKeyGen
1149 * Queries the Key and Mask generation statistics (64-bit version)
1150 * specific to an instance.
1151 *
1152 * @description
1153 * This function will query a specific instance for key and mask
1154 * generation statistics. The user MUST allocate the CpaCyKeyGenStats64
1155 * structure and pass the reference to that into this function call. This
1156 * function will write the statistic results into the passed in
1157 * CpaCyKeyGenStats64 structure.
1158 *
1159 * Note: statistics returned by this function do not interrupt current data
1160 * processing and as such can be slightly out of sync with operations that
1161 * are in progress during the statistics retrieval process.
1162 *
1163 * @context
1164 * This is a synchronous function and it can sleep. It MUST NOT be
1165 * executed in a context that DOES NOT permit sleeping.
1166 * @assumptions
1167 * None
1168 * @sideEffects
1169 * None
1170 * @blocking
1171 * This function is synchronous and blocking.
1172 * @reentrant
1173 * No
1174 * @threadSafe
1175 * Yes
1176 *
1177 * @param[in] instanceHandle Instance handle.
1178 * @param[out] pKeyGenStats Pointer to memory into which the statistics
1179 * will be written.
1180 *
1181 * @retval CPA_STATUS_SUCCESS Function executed successfully.
1182 * @retval CPA_STATUS_FAIL Function failed.
1183 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in.
1184 * @retval CPA_STATUS_RESOURCE Error related to system resources.
1185 * @retval CPA_STATUS_RESTARTING API implementation is restarting.
1186 * Resubmit the request.
1187 *
1188 * @pre
1189 * Component has been initialized.
1190 * @post
1191 * None
1192 * @note
1193 * This function operates in a synchronous manner and no asynchronous
1194 * callback will be generated.
1195 *
1196 * @see
1197 * CpaCyKeyGenStats64
1198 *****************************************************************************/
1199 CpaStatus
1200 cpaCyKeyGenQueryStats64(const CpaInstanceHandle instanceHandle,
1201 CpaCyKeyGenStats64 *pKeyGenStats);
1202
1203 #ifdef __cplusplus
1204 } /* close the extern "C" { */
1205 #endif
1206
1207 #endif /* CPA_CY_KEY_H */
Cache object: 684742d9bdd2e52fa1cb93101a0e9f36
|