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_common.h 45 * 46 * @defgroup cpaCy Cryptographic API 47 * 48 * @ingroup cpa 49 * 50 * @description 51 * These functions specify the Cryptographic API. 52 * 53 *****************************************************************************/ 54 55 /** 56 ***************************************************************************** 57 * @file cpa_cy_common.h 58 * @defgroup cpaCyCommon Cryptographic Common API 59 * 60 * @ingroup cpaCy 61 * 62 * @description 63 * This file specifies items which are common for both the asymmetric 64 * (public key cryptography) and the symmetric operations for the 65 * Cryptographic API. 66 * 67 *****************************************************************************/ 68 #ifndef CPA_CY_COMMON_H 69 #define CPA_CY_COMMON_H 70 71 #ifdef __cplusplus 72 extern "C" { 73 #endif 74 75 #include "cpa.h" 76 77 /** 78 ***************************************************************************** 79 * @ingroup cpa_cyCommon 80 * CPA CY Major Version Number 81 * @description 82 * The CPA_CY API major version number. This number will be incremented 83 * when significant churn to the API has occurred. The combination of the 84 * major and minor number definitions represent the complete version number 85 * for this interface. 86 * 87 *****************************************************************************/ 88 #define CPA_CY_API_VERSION_NUM_MAJOR (2) 89 90 /** 91 ***************************************************************************** 92 * @ingroup cpa_cyCommon 93 * CPA CY Minor Version Number 94 * @description 95 * The CPA_CY API minor version number. This number will be incremented 96 * when minor changes to the API has occurred. The combination of the major 97 * and minor number definitions represent the complete version number for 98 * this interface. 99 * 100 *****************************************************************************/ 101 #define CPA_CY_API_VERSION_NUM_MINOR (3) 102 103 /** 104 ***************************************************************************** 105 * @ingroup cpaCyCommon 106 * Request priority 107 * @description 108 * Enumeration of priority of the request to be given to the API. 109 * Currently two levels - HIGH and NORMAL are supported. HIGH priority 110 * requests will be prioritized on a "best-effort" basis over requests 111 * that are marked with a NORMAL priority. 112 * 113 *****************************************************************************/ 114 typedef enum _CpaCyPriority 115 { 116 CPA_CY_PRIORITY_NORMAL = 1, /**< Normal priority */ 117 CPA_CY_PRIORITY_HIGH /**< High priority */ 118 } CpaCyPriority; 119 120 /*****************************************************************************/ 121 /* Callback Definitions */ 122 /*****************************************************************************/ 123 /** 124 ***************************************************************************** 125 * @ingroup cpaCyCommon 126 * Definition of the crypto generic callback function 127 * 128 * @description 129 * This data structure specifies the prototype for a generic callback 130 * function 131 * 132 * @context 133 * This callback function can be executed in a context that DOES NOT 134 * permit sleeping to occur. 135 * 136 * @assumptions 137 * None 138 * @sideEffects 139 * None 140 * @reentrant 141 * No 142 * @threadSafe 143 * Yes 144 * 145 * @param[in] pCallbackTag Opaque value provided by user while making individual 146 * function call. 147 * @param[in] status Status of the operation. Valid values are 148 * CPA_STATUS_SUCCESS, CPA_STATUS_FAIL and 149 * CPA_STATUS_UNSUPPORTED. 150 * @param[in] pOpData Opaque Pointer to the operation data that was 151 * submitted in the request 152 * 153 * @retval 154 * None 155 * @pre 156 * Component has been initialized. 157 * @post 158 * None 159 * @note 160 * None 161 * @see 162 * cpaCyKeyGenSsl() 163 * 164 *****************************************************************************/ 165 typedef void (*CpaCyGenericCbFunc)(void *pCallbackTag, 166 CpaStatus status, 167 void *pOpData); 168 169 /** 170 ***************************************************************************** 171 * @ingroup cpaCyCommon 172 * Definition of generic callback function with an additional output 173 * CpaFlatBuffer parameter. 174 * 175 * @description 176 * This data structure specifies the prototype for a generic callback 177 * function which provides an output buffer (of type CpaFlatBuffer). 178 * 179 * @context 180 * This callback function can be executed in a context that DOES NOT 181 * permit sleeping to occur. 182 * 183 * @assumptions 184 * None 185 * @sideEffects 186 * None 187 * @reentrant 188 * No 189 * @threadSafe 190 * Yes 191 * 192 * @param[in] pCallbackTag Opaque value provided by user while making individual 193 * function call. 194 * @param[in] status Status of the operation. Valid values are 195 * CPA_STATUS_SUCCESS, CPA_STATUS_FAIL and 196 * CPA_STATUS_UNSUPPORTED. 197 * @param[in] pOpData Opaque Pointer to the operation data that was 198 * submitted in the request 199 * @param[in] pOut Pointer to the output buffer provided in the request 200 * invoking this callback. 201 * 202 * @retval 203 * None 204 * @pre 205 * Component has been initialized. 206 * @post 207 * None 208 * @note 209 * None 210 * @see 211 * None 212 * 213 *****************************************************************************/ 214 typedef void (*CpaCyGenFlatBufCbFunc)(void *pCallbackTag, 215 CpaStatus status, 216 void *pOpdata, 217 CpaFlatBuffer *pOut); 218 219 /** 220 ***************************************************************************** 221 * @ingroup cpaCyCommon 222 * Function to return the size of the memory which must be allocated for 223 * the pPrivateMetaData member of CpaBufferList. 224 * 225 * @description 226 * This function is used obtain the size (in bytes) required to allocate 227 * a buffer descriptor for the pPrivateMetaData member in the 228 * CpaBufferList the structure. 229 * Should the function return zero then no meta data is required for the 230 * buffer list. 231 * 232 * @context 233 * This function may be called from any context. 234 * @assumptions 235 * None 236 * @sideEffects 237 * None 238 * @blocking 239 * No 240 * @reentrant 241 * No 242 * @threadSafe 243 * Yes 244 * 245 * @param[in] instanceHandle Handle to an instance of this API. 246 * @param[in] numBuffers The number of pointers in the CpaBufferList. 247 * this is the maximum number of CpaFlatBuffers 248 * which may be contained in this CpaBufferList. 249 * @param[out] pSizeInBytes Pointer to the size in bytes of memory to be 250 * allocated when the client wishes to allocate 251 * a cpaFlatBuffer 252 * 253 * @retval CPA_STATUS_SUCCESS Function executed successfully. 254 * @retval CPA_STATUS_FAIL Function failed. 255 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 256 * @retval CPA_STATUS_UNSUPPORTED Function is not supported. 257 * 258 * @pre 259 * None. 260 * @post 261 * None 262 * @note 263 * None 264 * @see 265 * cpaCyGetInstances() 266 * 267 *****************************************************************************/ 268 CpaStatus 269 cpaCyBufferListGetMetaSize(const CpaInstanceHandle instanceHandle, 270 Cpa32U numBuffers, 271 Cpa32U *pSizeInBytes); 272 273 /** 274 ***************************************************************************** 275 * @ingroup cpaCyCommon 276 * Function to return a string indicating the specific error that occurred 277 * for a particular instance. 278 * 279 * @description 280 * When a function invocation on a particular instance returns an error, 281 * the client can invoke this function to query the instance for a null 282 * terminated string which describes the general error condition, and if 283 * available additional text on the specific error. 284 * The Client MUST allocate CPA_STATUS_MAX_STR_LENGTH_IN_BYTES bytes for 285 * the buffer string. 286 * 287 * @context 288 * This function may be called from any context. 289 * @assumptions 290 * None 291 * @sideEffects 292 * None 293 * @blocking 294 * No 295 * @reentrant 296 * No 297 * @threadSafe 298 * Yes 299 * 300 * @param[in] instanceHandle Handle to an instance of this API. 301 * @param[in] errStatus The error condition that occurred 302 * @param[out] pStatusText Pointer to the string buffer that will be 303 * updated with a null terminated status text 304 * string. 305 * The invoking application MUST allocate this 306 * buffer to be CPA_STATUS_MAX_STR_LENGTH_IN_BYTES. 307 * 308 * @retval CPA_STATUS_SUCCESS Function executed successfully. 309 * @retval CPA_STATUS_FAIL Function failed. Note, In this scenario it 310 * is INVALID to call this function a further 311 * time. 312 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 313 * @retval CPA_STATUS_UNSUPPORTED Function is not supported. 314 * 315 * @pre 316 * None. 317 * @post 318 * None 319 * @note 320 * None 321 * @see 322 * CpaStatus 323 * 324 *****************************************************************************/ 325 CpaStatus 326 cpaCyGetStatusText(const CpaInstanceHandle instanceHandle, 327 CpaStatus errStatus, 328 Cpa8S *pStatusText); 329 330 /*****************************************************************************/ 331 /* Instance Discovery Functions */ 332 /*****************************************************************************/ 333 /** 334 ***************************************************************************** 335 * @ingroup cpaCyCommon 336 * Get the number of instances that are supported by the API 337 * implementation. 338 * 339 * @description 340 * This function will get the number of instances that are supported 341 * by an implementation of the Cryptographic API. This number is then 342 * used to determine the size of the array that must be passed to 343 * @ref cpaCyGetInstances(). 344 * 345 * @context 346 * This function MUST NOT be called from an interrupt context as it MAY 347 * sleep. 348 * @assumptions 349 * None 350 * @sideEffects 351 * None 352 * @blocking 353 * This function is synchronous and blocking. 354 * @reentrant 355 * No 356 * @threadSafe 357 * Yes 358 * 359 * @param[out] pNumInstances Pointer to where the number of 360 * instances will be written. 361 * 362 * @retval CPA_STATUS_SUCCESS Function executed successfully. 363 * @retval CPA_STATUS_FAIL Function failed. 364 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 365 * @retval CPA_STATUS_UNSUPPORTED Function is not supported. 366 * 367 * @pre 368 * None 369 * @post 370 * None 371 * @note 372 * This function operates in a synchronous manner and no asynchronous 373 * callback will be generated 374 * 375 * @see 376 * cpaCyGetInstances 377 * 378 *****************************************************************************/ 379 CpaStatus 380 cpaCyGetNumInstances(Cpa16U *pNumInstances); 381 382 /** 383 ***************************************************************************** 384 * @ingroup cpaCyCommon 385 * Get the handles to the instances that are supported by the 386 * API implementation. 387 * 388 * @description 389 * This function will return handles to the instances that are 390 * supported by an implementation of the Cryptographic API. These 391 * instance handles can then be used as input parameters with other 392 * Cryptographic API functions. 393 * 394 * This function will populate an array that has been allocated by the 395 * caller. The size of this API will have been determined by the 396 * cpaCyGetNumInstances() function. 397 * 398 * @context 399 * This function MUST NOT be called from an interrupt context as it MAY 400 * sleep. 401 * @assumptions 402 * None 403 * @sideEffects 404 * None 405 * @blocking 406 * This function is synchronous and blocking. 407 * @reentrant 408 * No 409 * @threadSafe 410 * Yes 411 * 412 * @param[in] numInstances Size of the array. If the value is not 413 * the same as the number of instances 414 * supported, then an error (@ref 415 * CPA_STATUS_INVALID_PARAM) is returned. 416 * @param[in,out] cyInstances Pointer to where the instance 417 * handles will be written. 418 * 419 * @retval CPA_STATUS_SUCCESS Function executed successfully. 420 * @retval CPA_STATUS_FAIL Function failed. 421 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 422 * @retval CPA_STATUS_UNSUPPORTED Function is not supported. 423 * 424 * @pre 425 * None 426 * @post 427 * None 428 * @note 429 * This function operates in a synchronous manner and no asynchronous 430 * callback will be generated 431 * 432 * @see 433 * cpaCyGetNumInstances 434 * 435 *****************************************************************************/ 436 CpaStatus 437 cpaCyGetInstances(Cpa16U numInstances, 438 CpaInstanceHandle *cyInstances); 439 440 /** 441 ***************************************************************************** 442 * @ingroup cpaCyCommon 443 * Function to get information on a particular instance. 444 * 445 * @deprecated 446 * As of v1.3 of the Crypto API, this function has been deprecated, 447 * replaced by @ref cpaCyInstanceGetInfo2. 448 * 449 * @description 450 * This function will provide instance specific information through a 451 * @ref CpaInstanceInfo structure. 452 * 453 * @context 454 * This function may be called from any context. 455 * @assumptions 456 * None 457 * @sideEffects 458 * None 459 * @blocking 460 * No 461 * @reentrant 462 * No 463 * @threadSafe 464 * Yes 465 * 466 * @param[in] instanceHandle Handle to an instance of this API to be 467 * initialized. 468 * @param[out] pInstanceInfo Pointer to the memory location allocated by 469 * the client into which the CpaInstanceInfo 470 * structure will be written. 471 * 472 * @retval CPA_STATUS_SUCCESS Function executed successfully. 473 * @retval CPA_STATUS_FAIL Function failed. 474 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 475 * @retval CPA_STATUS_UNSUPPORTED Function is not supported. 476 * 477 * @pre 478 * The client has retrieved an instanceHandle from successive calls to 479 * @ref cpaCyGetNumInstances and @ref cpaCyGetInstances. 480 * @post 481 * None 482 * @note 483 * None 484 * @see 485 * cpaCyGetNumInstances, 486 * cpaCyGetInstances, 487 * CpaInstanceInfo 488 * 489 *****************************************************************************/ 490 CpaStatus CPA_DEPRECATED 491 cpaCyInstanceGetInfo(const CpaInstanceHandle instanceHandle, 492 struct _CpaInstanceInfo * pInstanceInfo); 493 494 /** 495 ***************************************************************************** 496 * @ingroup cpaCyCommon 497 * Function to get information on a particular instance. 498 * 499 * @description 500 * This function will provide instance specific information through a 501 * @ref CpaInstanceInfo2 structure. 502 * Supersedes @ref cpaCyInstanceGetInfo. 503 * 504 * @context 505 * This function may be called from any context. 506 * @assumptions 507 * None 508 * @sideEffects 509 * None 510 * @blocking 511 * No 512 * @reentrant 513 * No 514 * @threadSafe 515 * Yes 516 * 517 * @param[in] instanceHandle Handle to an instance of this API to be 518 * initialized. 519 * @param[out] pInstanceInfo2 Pointer to the memory location allocated by 520 * the client into which the CpaInstanceInfo2 521 * structure will be written. 522 * 523 * @retval CPA_STATUS_SUCCESS Function executed successfully. 524 * @retval CPA_STATUS_FAIL Function failed. 525 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 526 * @retval CPA_STATUS_UNSUPPORTED Function is not supported. 527 * 528 * @pre 529 * The client has retrieved an instanceHandle from successive calls to 530 * @ref cpaCyGetNumInstances and @ref cpaCyGetInstances. 531 * @post 532 * None 533 * @note 534 * None 535 * @see 536 * cpaCyGetNumInstances, 537 * cpaCyGetInstances, 538 * CpaInstanceInfo 539 * 540 *****************************************************************************/ 541 CpaStatus 542 cpaCyInstanceGetInfo2(const CpaInstanceHandle instanceHandle, 543 CpaInstanceInfo2 * pInstanceInfo2); 544 545 /*****************************************************************************/ 546 /* Instance Notification Functions */ 547 /*****************************************************************************/ 548 /** 549 ***************************************************************************** 550 * @ingroup cpaCyCommon 551 * Callback function for instance notification support. 552 * 553 * @description 554 * This is the prototype for the instance notification callback function. 555 * The callback function is passed in as a parameter to the 556 * @ref cpaCyInstanceSetNotificationCb function. 557 * 558 * @context 559 * This function will be executed in a context that requires that sleeping 560 * MUST NOT be permitted. 561 * @assumptions 562 * None 563 * @sideEffects 564 * None 565 * @blocking 566 * No 567 * @reentrant 568 * No 569 * @threadSafe 570 * Yes 571 * 572 * @param[in] instanceHandle Instance handle. 573 * @param[in] pCallbackTag Opaque value provided by user while making 574 * individual function calls. 575 * @param[in] instanceEvent The event that will trigger this function to 576 * get invoked. 577 * 578 * @retval 579 * None 580 * @pre 581 * Component has been initialized and the notification function has been 582 * set via the cpaCyInstanceSetNotificationCb function. 583 * @post 584 * None 585 * @note 586 * None 587 * @see 588 * cpaCyInstanceSetNotificationCb(), 589 * 590 *****************************************************************************/ 591 typedef void (*CpaCyInstanceNotificationCbFunc)( 592 const CpaInstanceHandle instanceHandle, 593 void * pCallbackTag, 594 const CpaInstanceEvent instanceEvent); 595 596 /** 597 ***************************************************************************** 598 * @ingroup cpaCyCommon 599 * Subscribe for instance notifications. 600 * 601 * @description 602 * Clients of the CpaCy interface can subscribe for instance notifications 603 * by registering a @ref CpaCyInstanceNotificationCbFunc function. 604 * 605 * @context 606 * This function may be called from any context. 607 * @assumptions 608 * None 609 * @sideEffects 610 * None 611 * @blocking 612 * No 613 * @reentrant 614 * No 615 * @threadSafe 616 * Yes 617 * 618 * @param[in] instanceHandle Instance handle. 619 * @param[in] pInstanceNotificationCb Instance notification callback 620 * function pointer. 621 * @param[in] pCallbackTag Opaque value provided by user while 622 * making individual function calls. 623 * 624 * @retval CPA_STATUS_SUCCESS Function executed successfully. 625 * @retval CPA_STATUS_FAIL Function failed. 626 * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 627 * @retval CPA_STATUS_UNSUPPORTED Function is not supported. 628 * 629 * @pre 630 * Instance has been initialized. 631 * @post 632 * None 633 * @note 634 * None 635 * @see 636 * CpaCyInstanceNotificationCbFunc 637 * 638 *****************************************************************************/ 639 CpaStatus 640 cpaCyInstanceSetNotificationCb( 641 const CpaInstanceHandle instanceHandle, 642 const CpaCyInstanceNotificationCbFunc pInstanceNotificationCb, 643 void *pCallbackTag); 644 645 #ifdef __cplusplus 646 } /* close the extern "C" { */ 647 #endif 648 649 #endif /* CPA_CY_COMMON_H */ 650