1266b0663SKrzysztof Zdziarski /*************************************************************************** 2266b0663SKrzysztof Zdziarski * 3266b0663SKrzysztof Zdziarski * BSD LICENSE 4266b0663SKrzysztof Zdziarski * 5266b0663SKrzysztof Zdziarski * Copyright(c) 2007-2023 Intel Corporation. All rights reserved. 6266b0663SKrzysztof Zdziarski * All rights reserved. 7266b0663SKrzysztof Zdziarski * 8266b0663SKrzysztof Zdziarski * Redistribution and use in source and binary forms, with or without 9266b0663SKrzysztof Zdziarski * modification, are permitted provided that the following conditions 10266b0663SKrzysztof Zdziarski * are met: 11266b0663SKrzysztof Zdziarski * 12266b0663SKrzysztof Zdziarski * * Redistributions of source code must retain the above copyright 13266b0663SKrzysztof Zdziarski * notice, this list of conditions and the following disclaimer. 14266b0663SKrzysztof Zdziarski * * Redistributions in binary form must reproduce the above copyright 15266b0663SKrzysztof Zdziarski * notice, this list of conditions and the following disclaimer in 16266b0663SKrzysztof Zdziarski * the documentation and/or other materials provided with the 17266b0663SKrzysztof Zdziarski * distribution. 18266b0663SKrzysztof Zdziarski * * Neither the name of Intel Corporation nor the names of its 19266b0663SKrzysztof Zdziarski * contributors may be used to endorse or promote products derived 20266b0663SKrzysztof Zdziarski * from this software without specific prior written permission. 21266b0663SKrzysztof Zdziarski * 22266b0663SKrzysztof Zdziarski * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23266b0663SKrzysztof Zdziarski * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24266b0663SKrzysztof Zdziarski * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 25266b0663SKrzysztof Zdziarski * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 26266b0663SKrzysztof Zdziarski * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 27266b0663SKrzysztof Zdziarski * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 28266b0663SKrzysztof Zdziarski * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29266b0663SKrzysztof Zdziarski * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30266b0663SKrzysztof Zdziarski * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31266b0663SKrzysztof Zdziarski * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 32266b0663SKrzysztof Zdziarski * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33266b0663SKrzysztof Zdziarski * 34266b0663SKrzysztof Zdziarski * 35266b0663SKrzysztof Zdziarski ***************************************************************************/ 36266b0663SKrzysztof Zdziarski 37266b0663SKrzysztof Zdziarski /* 38266b0663SKrzysztof Zdziarski ***************************************************************************** 39266b0663SKrzysztof Zdziarski * Doxygen group definitions 40266b0663SKrzysztof Zdziarski ****************************************************************************/ 41266b0663SKrzysztof Zdziarski 42266b0663SKrzysztof Zdziarski /** 43266b0663SKrzysztof Zdziarski ***************************************************************************** 44266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 45266b0663SKrzysztof Zdziarski * 46266b0663SKrzysztof Zdziarski * @defgroup cpaCyKpt Intel(R) Key Protection Technology (KPT) Cryptographic API 47266b0663SKrzysztof Zdziarski * 48266b0663SKrzysztof Zdziarski * @ingroup cpaCy 49266b0663SKrzysztof Zdziarski * 50266b0663SKrzysztof Zdziarski * @description 51266b0663SKrzysztof Zdziarski * These functions specify the APIs for Key Protection Technology (KPT) 52266b0663SKrzysztof Zdziarski * Cryptographic services. 53266b0663SKrzysztof Zdziarski * 54266b0663SKrzysztof Zdziarski * @note 55266b0663SKrzysztof Zdziarski * These functions implement the KPT Cryptographic API. 56266b0663SKrzysztof Zdziarski * This API is experimental and subject to change. 57266b0663SKrzysztof Zdziarski * 58266b0663SKrzysztof Zdziarski *****************************************************************************/ 59266b0663SKrzysztof Zdziarski 60266b0663SKrzysztof Zdziarski #ifndef __CPA_CY_KPT_H__ 61266b0663SKrzysztof Zdziarski #define __CPA_CY_KPT_H__ 62266b0663SKrzysztof Zdziarski 63266b0663SKrzysztof Zdziarski #ifdef __cplusplus 64266b0663SKrzysztof Zdziarski extern "C" { 65266b0663SKrzysztof Zdziarski #endif 66266b0663SKrzysztof Zdziarski #include "cpa_cy_common.h" 67266b0663SKrzysztof Zdziarski #include "cpa_cy_rsa.h" 68266b0663SKrzysztof Zdziarski #include "cpa_cy_ecdsa.h" 69266b0663SKrzysztof Zdziarski #include "cpa_cy_ec.h" 70266b0663SKrzysztof Zdziarski 71266b0663SKrzysztof Zdziarski /** 72266b0663SKrzysztof Zdziarski ***************************************************************************** 73266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 74266b0663SKrzysztof Zdziarski * KPT wrapping key handle 75266b0663SKrzysztof Zdziarski * 76266b0663SKrzysztof Zdziarski * @description 77266b0663SKrzysztof Zdziarski * Handle to a unique wrapping key in wrapping key table. Application 78266b0663SKrzysztof Zdziarski * creates it in KPT key transfer phase and maintains it for KPT Crypto 79266b0663SKrzysztof Zdziarski * service. For each KPT Crypto service API invocation, this handle will 80266b0663SKrzysztof Zdziarski * be used to get a SWK(Symmetric Wrapping Key) to unwrap 81266b0663SKrzysztof Zdziarski * WPK(Wrapped Private Key) before performing the requested crypto 82266b0663SKrzysztof Zdziarski * service. 83266b0663SKrzysztof Zdziarski * 84266b0663SKrzysztof Zdziarski *****************************************************************************/ 85266b0663SKrzysztof Zdziarski typedef Cpa64U CpaCyKptHandle; 86266b0663SKrzysztof Zdziarski 87266b0663SKrzysztof Zdziarski /** 88266b0663SKrzysztof Zdziarski ***************************************************************************** 89266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 90266b0663SKrzysztof Zdziarski * Return Status 91266b0663SKrzysztof Zdziarski * @description 92266b0663SKrzysztof Zdziarski * This enumeration lists all the possible return status after completing 93266b0663SKrzysztof Zdziarski * KPT APIs. 94266b0663SKrzysztof Zdziarski * 95266b0663SKrzysztof Zdziarski *****************************************************************************/ 96266b0663SKrzysztof Zdziarski typedef enum CpaCyKptKeyManagementStatus_t 97266b0663SKrzysztof Zdziarski { 98266b0663SKrzysztof Zdziarski CPA_CY_KPT_SUCCESS = 0, 99266b0663SKrzysztof Zdziarski /**< Generic success status for all KPT wrapping key handling functions*/ 100266b0663SKrzysztof Zdziarski CPA_CY_KPT_LOADKEY_FAIL_QUOTA_EXCEEDED_PER_VFID, 101266b0663SKrzysztof Zdziarski /**< SWK count exceeds the configured maxmium value per VFID*/ 102266b0663SKrzysztof Zdziarski CPA_CY_KPT_LOADKEY_FAIL_QUOTA_EXCEEDED_PER_PASID, 103266b0663SKrzysztof Zdziarski /**< SWK count exceeds the configured maxmium value per PASID*/ 104266b0663SKrzysztof Zdziarski CPA_CY_KPT_LOADKEY_FAIL_QUOTA_EXCEEDED, 105266b0663SKrzysztof Zdziarski /**< SWK count exceeds the configured maxmium value when not scoped to 106266b0663SKrzysztof Zdziarski * VFID or PASID*/ 107266b0663SKrzysztof Zdziarski CPA_CY_KPT_SWK_FAIL_NOT_FOUND, 108266b0663SKrzysztof Zdziarski /**< Unable to find SWK entry by handle */ 109266b0663SKrzysztof Zdziarski CPA_CY_KPT_FAILED, 110266b0663SKrzysztof Zdziarski } CpaCyKptKeyManagementStatus; 111266b0663SKrzysztof Zdziarski 112266b0663SKrzysztof Zdziarski /** 113266b0663SKrzysztof Zdziarski ***************************************************************************** 114266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 115266b0663SKrzysztof Zdziarski * PKCS#1 v2.2 RSA-3K signature output length in bytes. 116266b0663SKrzysztof Zdziarski * @see CpaCyKptValidationKey 117266b0663SKrzysztof Zdziarski * 118266b0663SKrzysztof Zdziarski *****************************************************************************/ 119266b0663SKrzysztof Zdziarski #define CPA_CY_RSA3K_SIG_SIZE_INBYTES 384 120266b0663SKrzysztof Zdziarski 121266b0663SKrzysztof Zdziarski /** 122266b0663SKrzysztof Zdziarski ***************************************************************************** 123266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 124266b0663SKrzysztof Zdziarski * KPT device credentials key certificate 125266b0663SKrzysztof Zdziarski * @description 126266b0663SKrzysztof Zdziarski * This structure defines the key format for use with KPT. 127266b0663SKrzysztof Zdziarski * @see 128266b0663SKrzysztof Zdziarski * cpaCyKptQueryDeviceCredentials 129266b0663SKrzysztof Zdziarski * 130266b0663SKrzysztof Zdziarski *****************************************************************************/ 131266b0663SKrzysztof Zdziarski typedef struct CpaCyKptValidationKey_t 132266b0663SKrzysztof Zdziarski { 133266b0663SKrzysztof Zdziarski CpaCyRsaPublicKey publicKey; 134266b0663SKrzysztof Zdziarski /**< Key */ 135266b0663SKrzysztof Zdziarski Cpa8U signature[CPA_CY_RSA3K_SIG_SIZE_INBYTES]; 136266b0663SKrzysztof Zdziarski /**< Signature of key */ 137266b0663SKrzysztof Zdziarski } CpaCyKptValidationKey; 138266b0663SKrzysztof Zdziarski 139266b0663SKrzysztof Zdziarski /** 140266b0663SKrzysztof Zdziarski ***************************************************************************** 141266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 142266b0663SKrzysztof Zdziarski * Cipher algorithms used to generate a wrapped private key (WPK) from 143266b0663SKrzysztof Zdziarski * the clear private key. 144266b0663SKrzysztof Zdziarski * 145266b0663SKrzysztof Zdziarski * @description 146266b0663SKrzysztof Zdziarski * This enumeration lists supported cipher algorithms and modes. 147266b0663SKrzysztof Zdziarski * 148266b0663SKrzysztof Zdziarski *****************************************************************************/ 149266b0663SKrzysztof Zdziarski typedef enum CpaCyKptWrappingKeyType_t 150266b0663SKrzysztof Zdziarski { 151266b0663SKrzysztof Zdziarski CPA_CY_KPT_WRAPPING_KEY_TYPE_AES256_GCM = 0 152266b0663SKrzysztof Zdziarski } CpaCyKptWrappingKeyType; 153266b0663SKrzysztof Zdziarski 154266b0663SKrzysztof Zdziarski /** 155266b0663SKrzysztof Zdziarski ***************************************************************************** 156266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 157266b0663SKrzysztof Zdziarski * KPT Loading key format specification. 158266b0663SKrzysztof Zdziarski * @description 159266b0663SKrzysztof Zdziarski * This structure defines the format of the symmetric wrapping key to be 160266b0663SKrzysztof Zdziarski * loaded into KPT. Application sets these parameters through the 161266b0663SKrzysztof Zdziarski * cpaCyKptLoadKey calls. 162266b0663SKrzysztof Zdziarski * 163266b0663SKrzysztof Zdziarski *****************************************************************************/ 164266b0663SKrzysztof Zdziarski typedef struct CpaCyKptLoadKey_t 165266b0663SKrzysztof Zdziarski { 166266b0663SKrzysztof Zdziarski CpaFlatBuffer eSWK; 167266b0663SKrzysztof Zdziarski /**< Encrypted SWK */ 168266b0663SKrzysztof Zdziarski CpaCyKptWrappingKeyType wrappingAlgorithm; 169266b0663SKrzysztof Zdziarski /**< Symmetric wrapping algorithm */ 170266b0663SKrzysztof Zdziarski } CpaCyKptLoadKey; 171266b0663SKrzysztof Zdziarski 172266b0663SKrzysztof Zdziarski /** 173266b0663SKrzysztof Zdziarski ***************************************************************************** 174266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 175266b0663SKrzysztof Zdziarski * Max length of initialization vector 176266b0663SKrzysztof Zdziarski * @description 177266b0663SKrzysztof Zdziarski * Defines the permitted max iv length in bytes that may be used in 178266b0663SKrzysztof Zdziarski * private key wrapping/unwrapping.For AEC-GCM, iv length is 12 bytes. 179266b0663SKrzysztof Zdziarski * 180266b0663SKrzysztof Zdziarski *@see cpaCyKptUnwrapContext 181266b0663SKrzysztof Zdziarski * 182266b0663SKrzysztof Zdziarski *****************************************************************************/ 183266b0663SKrzysztof Zdziarski #define CPA_CY_KPT_MAX_IV_LENGTH (12) 184266b0663SKrzysztof Zdziarski 185266b0663SKrzysztof Zdziarski /** 186266b0663SKrzysztof Zdziarski ***************************************************************************** 187266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 188266b0663SKrzysztof Zdziarski * Max length of Additional Authenticated Data 189266b0663SKrzysztof Zdziarski * @description 190266b0663SKrzysztof Zdziarski * Defines the permitted max aad length in bytes that may be used in 191266b0663SKrzysztof Zdziarski * private key wrapping/unwrapping. 192266b0663SKrzysztof Zdziarski * 193266b0663SKrzysztof Zdziarski *@see cpaCyKptUnwrapContext 194266b0663SKrzysztof Zdziarski * 195266b0663SKrzysztof Zdziarski *****************************************************************************/ 196266b0663SKrzysztof Zdziarski #define CPA_CY_KPT_MAX_AAD_LENGTH (16) 197266b0663SKrzysztof Zdziarski 198266b0663SKrzysztof Zdziarski /** 199266b0663SKrzysztof Zdziarski ***************************************************************************** 200266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 201266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 202266b0663SKrzysztof Zdziarski * Structure of KPT unwrapping context. 203266b0663SKrzysztof Zdziarski * @description 204266b0663SKrzysztof Zdziarski * This structure is a parameter of KPT crypto APIs, it contains data 205266b0663SKrzysztof Zdziarski * relating to KPT WPK unwrapping, the application needs to fill in this 206266b0663SKrzysztof Zdziarski * information. 207266b0663SKrzysztof Zdziarski * 208266b0663SKrzysztof Zdziarski *****************************************************************************/ 209266b0663SKrzysztof Zdziarski typedef struct CpaCyKptUnwrapContext_t 210266b0663SKrzysztof Zdziarski { 211266b0663SKrzysztof Zdziarski CpaCyKptHandle kptHandle; 212266b0663SKrzysztof Zdziarski /**< This is application's unique handle that identifies its 213266b0663SKrzysztof Zdziarski * (symmetric) wrapping key*/ 214266b0663SKrzysztof Zdziarski Cpa8U iv[CPA_CY_KPT_MAX_IV_LENGTH]; 215266b0663SKrzysztof Zdziarski /**< Initialization Vector */ 216266b0663SKrzysztof Zdziarski Cpa8U additionalAuthData[CPA_CY_KPT_MAX_AAD_LENGTH]; 217266b0663SKrzysztof Zdziarski /**< A buffer holding the Additional Authenticated Data.*/ 218266b0663SKrzysztof Zdziarski Cpa32U aadLenInBytes; 219266b0663SKrzysztof Zdziarski /**< Number of bytes representing the size of AAD within additionalAuthData 220266b0663SKrzysztof Zdziarski * buffer. */ 221266b0663SKrzysztof Zdziarski } CpaCyKptUnwrapContext; 222266b0663SKrzysztof Zdziarski 223266b0663SKrzysztof Zdziarski /** 224266b0663SKrzysztof Zdziarski ***************************************************************************** 225266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 226266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 227266b0663SKrzysztof Zdziarski * RSA Private Key Structure For Representation 1. 228266b0663SKrzysztof Zdziarski * @description 229266b0663SKrzysztof Zdziarski * This structure contains the first representation that can be used for 230266b0663SKrzysztof Zdziarski * describing the RSA private key, represented by the tuple of the 231266b0663SKrzysztof Zdziarski * modulus (N) and the private exponent (D). 232266b0663SKrzysztof Zdziarski * The representation is encrypted as follows: 233266b0663SKrzysztof Zdziarski * Encrypt - AES-256-GCM (Key, AAD, Input) 234266b0663SKrzysztof Zdziarski * "||" - denotes concatenation 235266b0663SKrzysztof Zdziarski * Key = SWK 236266b0663SKrzysztof Zdziarski * AAD = DER(OID) 237266b0663SKrzysztof Zdziarski * Input = (D || N) 238266b0663SKrzysztof Zdziarski * Encrypt (SWK, AAD, (D || N)) 239266b0663SKrzysztof Zdziarski * Output (AuthTag, (D || N)') 240266b0663SKrzysztof Zdziarski * EncryptedRSAKey = (D || N)' 241266b0663SKrzysztof Zdziarski * 242266b0663SKrzysztof Zdziarski * privateKey = (EncryptedRSAKey || AuthTag) 243266b0663SKrzysztof Zdziarski * 244266b0663SKrzysztof Zdziarski * OID's that shall be supported by KPT implementation: 245266b0663SKrzysztof Zdziarski * OID DER(OID) 246266b0663SKrzysztof Zdziarski * 1.2.840.113549.1.1 06 08 2A 86 48 86 F7 0D 01 01 247266b0663SKrzysztof Zdziarski * 248266b0663SKrzysztof Zdziarski * Permitted lengths for N and D are: 249266b0663SKrzysztof Zdziarski * - 512 bits (64 bytes), 250266b0663SKrzysztof Zdziarski * - 1024 bits (128 bytes), 251266b0663SKrzysztof Zdziarski * - 1536 bits (192 bytes), 252266b0663SKrzysztof Zdziarski * - 2048 bits (256 bytes), 253266b0663SKrzysztof Zdziarski * - 3072 bits (384 bytes), 254266b0663SKrzysztof Zdziarski * - 4096 bits (512 bytes), or 255266b0663SKrzysztof Zdziarski * - 8192 bits (1024 bytes). 256266b0663SKrzysztof Zdziarski * 257266b0663SKrzysztof Zdziarski * AuthTag is 128 bits (16 bytes) 258266b0663SKrzysztof Zdziarski * 259266b0663SKrzysztof Zdziarski * @note It is important that the value D is big enough. It is STRONGLY 260266b0663SKrzysztof Zdziarski * recommended that this value is at least half the length of the modulus 261266b0663SKrzysztof Zdziarski * N to protect against the Wiener attack. 262266b0663SKrzysztof Zdziarski * 263266b0663SKrzysztof Zdziarski *****************************************************************************/ 264266b0663SKrzysztof Zdziarski typedef struct CpaCyKptRsaPrivateKeyRep1_t 265266b0663SKrzysztof Zdziarski { 266266b0663SKrzysztof Zdziarski CpaFlatBuffer privateKey; 267266b0663SKrzysztof Zdziarski /**< The EncryptedRSAKey concatenated with AuthTag */ 268266b0663SKrzysztof Zdziarski } CpaCyKptRsaPrivateKeyRep1; 269266b0663SKrzysztof Zdziarski 270266b0663SKrzysztof Zdziarski /** 271266b0663SKrzysztof Zdziarski ***************************************************************************** 272266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 273266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 274266b0663SKrzysztof Zdziarski * KPT RSA Private Key Structure For Representation 2. 275266b0663SKrzysztof Zdziarski * @description 276266b0663SKrzysztof Zdziarski * This structure contains the second representation that can be used for 277266b0663SKrzysztof Zdziarski * describing the RSA private key. The quintuple of p, q, dP, dQ, and qInv 278266b0663SKrzysztof Zdziarski * (explained below and in the spec) are required for the second 279266b0663SKrzysztof Zdziarski * representation. For KPT the parameters are Encrypted 280266b0663SKrzysztof Zdziarski * with the assoicated SWK as follows: 281266b0663SKrzysztof Zdziarski * Encrypt - AES-256-GCM (Key, AAD, Input) 282266b0663SKrzysztof Zdziarski * "||" - denotes concatenation 283266b0663SKrzysztof Zdziarski * Key = SWK 284266b0663SKrzysztof Zdziarski * AAD = DER(OID) 285266b0663SKrzysztof Zdziarski * Input = (P || Q || dP || dQ || Qinv || publicExponentE) 286266b0663SKrzysztof Zdziarski * Expanded Description: 287266b0663SKrzysztof Zdziarski * Encrypt (SWK, AAD, 288266b0663SKrzysztof Zdziarski * (P || Q || dP || dQ || Qinv || publicExponentE)) 289266b0663SKrzysztof Zdziarski * EncryptedRSAKey = (P || Q || dP || dQ || Qinv || publicExponentE)' 290266b0663SKrzysztof Zdziarski * Output (AuthTag, EncryptedRSAKey) 291266b0663SKrzysztof Zdziarski * 292266b0663SKrzysztof Zdziarski * privateKey = EncryptedRSAKey || AuthTag 293266b0663SKrzysztof Zdziarski * 294266b0663SKrzysztof Zdziarski * OID's that shall be supported by KPT implementation: 295266b0663SKrzysztof Zdziarski * OID DER(OID) 296266b0663SKrzysztof Zdziarski * 1.2.840.113549.1.1 06 08 2A 86 48 86 F7 0D 01 01 297266b0663SKrzysztof Zdziarski * 298266b0663SKrzysztof Zdziarski * All of the encrypted parameters will be of equal size. The length of 299266b0663SKrzysztof Zdziarski * each will be equal to keySize in bytes/2. 300266b0663SKrzysztof Zdziarski * For example for a key size of 256 Bytes (2048 bits), the length of 301266b0663SKrzysztof Zdziarski * P, Q, dP, dQ, and Qinv are all 128 Bytes, plus the 302266b0663SKrzysztof Zdziarski * publicExponentE of 256 Bytes, giving a total size for 303266b0663SKrzysztof Zdziarski * EncryptedRSAKey of 896 Bytes. 304266b0663SKrzysztof Zdziarski * 305266b0663SKrzysztof Zdziarski * AuthTag is 128 bits (16 bytes) 306266b0663SKrzysztof Zdziarski * 307266b0663SKrzysztof Zdziarski * Permitted Key Sizes are: 308266b0663SKrzysztof Zdziarski * - 512 bits (64 bytes), 309266b0663SKrzysztof Zdziarski * - 1024 bits (128 bytes), 310266b0663SKrzysztof Zdziarski * - 1536 bits (192 bytes), 311266b0663SKrzysztof Zdziarski * - 2048 bits (256 bytes), 312266b0663SKrzysztof Zdziarski * - 3072 bits (384 bytes), 313266b0663SKrzysztof Zdziarski * - 4096 bits (512 bytes), or 314266b0663SKrzysztof Zdziarski * - 8192 bits (1024 bytes). 315266b0663SKrzysztof Zdziarski * 316266b0663SKrzysztof Zdziarski *****************************************************************************/ 317266b0663SKrzysztof Zdziarski typedef struct CpaCyKptRsaPrivateKeyRep2_t 318266b0663SKrzysztof Zdziarski { 319266b0663SKrzysztof Zdziarski CpaFlatBuffer privateKey; 320266b0663SKrzysztof Zdziarski /**< RSA private key representation 2 is built up from the 321266b0663SKrzysztof Zdziarski * tuple of p, q, dP, dQ, qInv, publicExponentE and AuthTag. 322266b0663SKrzysztof Zdziarski */ 323266b0663SKrzysztof Zdziarski } CpaCyKptRsaPrivateKeyRep2; 324266b0663SKrzysztof Zdziarski 325266b0663SKrzysztof Zdziarski /** 326266b0663SKrzysztof Zdziarski ***************************************************************************** 327266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 328266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 329266b0663SKrzysztof Zdziarski * RSA Private Key Structure. 330266b0663SKrzysztof Zdziarski * @description 331266b0663SKrzysztof Zdziarski * This structure contains the two representations that can be used for 332266b0663SKrzysztof Zdziarski * describing the RSA private key. The privateKeyRepType will be used to 333266b0663SKrzysztof Zdziarski * identify which representation is to be used. Typically, using the 334266b0663SKrzysztof Zdziarski * second representation results in faster decryption operations. 335266b0663SKrzysztof Zdziarski * 336266b0663SKrzysztof Zdziarski *****************************************************************************/ 337266b0663SKrzysztof Zdziarski typedef struct CpaCyKptRsaPrivateKey_t 338266b0663SKrzysztof Zdziarski { 339266b0663SKrzysztof Zdziarski CpaCyRsaVersion version; 340266b0663SKrzysztof Zdziarski /**< Indicates the version of the PKCS #1 specification that is 341266b0663SKrzysztof Zdziarski * supported. 342266b0663SKrzysztof Zdziarski * Note that this applies to both representations. */ 343266b0663SKrzysztof Zdziarski CpaCyRsaPrivateKeyRepType privateKeyRepType; 344266b0663SKrzysztof Zdziarski /**< This value is used to identify which of the private key 345266b0663SKrzysztof Zdziarski * representation types in this structure is relevant. 346266b0663SKrzysztof Zdziarski * When performing key generation operations for Type 2 representations, 347266b0663SKrzysztof Zdziarski * memory must also be allocated for the type 1 representations, and values 348266b0663SKrzysztof Zdziarski * for both will be returned. */ 349266b0663SKrzysztof Zdziarski CpaCyKptRsaPrivateKeyRep1 privateKeyRep1; 350266b0663SKrzysztof Zdziarski /**< This is the first representation of the RSA private key as 351266b0663SKrzysztof Zdziarski * defined in the PKCS #1 V2.2 specification. */ 352266b0663SKrzysztof Zdziarski CpaCyKptRsaPrivateKeyRep2 privateKeyRep2; 353266b0663SKrzysztof Zdziarski /**< This is the second representation of the RSA private key as 354266b0663SKrzysztof Zdziarski * defined in the PKCS #1 V2.2 specification. */ 355266b0663SKrzysztof Zdziarski } CpaCyKptRsaPrivateKey; 356266b0663SKrzysztof Zdziarski 357266b0663SKrzysztof Zdziarski /** 358266b0663SKrzysztof Zdziarski ***************************************************************************** 359266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 360266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 361266b0663SKrzysztof Zdziarski * KPT RSA Decryption Primitive Operation Data 362266b0663SKrzysztof Zdziarski * @description 363266b0663SKrzysztof Zdziarski * This structure lists the different items that are required in the 364266b0663SKrzysztof Zdziarski * cpaCyKptRsaDecrypt function. As the RSA decryption primitive and 365266b0663SKrzysztof Zdziarski * signature primitive operations are mathematically identical this 366266b0663SKrzysztof Zdziarski * structure may also be used to perform an RSA signature primitive 367266b0663SKrzysztof Zdziarski * operation. 368266b0663SKrzysztof Zdziarski * When performing an RSA decryption primitive operation, the input data 369266b0663SKrzysztof Zdziarski * is the cipher text and the output data is the message text. 370266b0663SKrzysztof Zdziarski * When performing an RSA signature primitive operation, the input data 371266b0663SKrzysztof Zdziarski * is the message and the output data is the signature. 372266b0663SKrzysztof Zdziarski * The client MUST allocate the memory for this structure. When the 373266b0663SKrzysztof Zdziarski * structure is passed into the function, ownership of the memory passes 374266b0663SKrzysztof Zdziarski * to he function. Ownership of the memory returns to the client when 375266b0663SKrzysztof Zdziarski * this structure is returned in the CpaCyGenFlatBufCbFunc 376266b0663SKrzysztof Zdziarski * callback function. 377266b0663SKrzysztof Zdziarski * 378266b0663SKrzysztof Zdziarski * @note 379266b0663SKrzysztof Zdziarski * If the client modifies or frees the memory referenced in this structure 380266b0663SKrzysztof Zdziarski * after it has been submitted to the cpaCyKptRsaDecrypt function, and 381266b0663SKrzysztof Zdziarski * before it has been returned in the callback, undefined behavior will 382266b0663SKrzysztof Zdziarski * result. 383266b0663SKrzysztof Zdziarski * All values in this structure are required to be in Most Significant Byte 384266b0663SKrzysztof Zdziarski * first order, e.g. inputData.pData[0] = MSB. 385266b0663SKrzysztof Zdziarski * 386266b0663SKrzysztof Zdziarski *****************************************************************************/ 387266b0663SKrzysztof Zdziarski typedef struct CpaCyKptRsaDecryptOpData_t 388266b0663SKrzysztof Zdziarski { 389266b0663SKrzysztof Zdziarski CpaCyKptRsaPrivateKey *pRecipientPrivateKey; 390266b0663SKrzysztof Zdziarski /**< Pointer to the recipient's RSA private key. */ 391266b0663SKrzysztof Zdziarski CpaFlatBuffer inputData; 392266b0663SKrzysztof Zdziarski /**< The input data that the RSA decryption primitive operation is 393266b0663SKrzysztof Zdziarski * performed on. The data pointed to is an integer that MUST be in big- 394266b0663SKrzysztof Zdziarski * endian order. The value MUST be between 0 and the modulus n - 1. */ 395266b0663SKrzysztof Zdziarski } CpaCyKptRsaDecryptOpData; 396266b0663SKrzysztof Zdziarski 397266b0663SKrzysztof Zdziarski 398266b0663SKrzysztof Zdziarski /** 399266b0663SKrzysztof Zdziarski ***************************************************************************** 400266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 401266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 402266b0663SKrzysztof Zdziarski * KPT ECDSA Sign R & S Operation Data. 403266b0663SKrzysztof Zdziarski * 404266b0663SKrzysztof Zdziarski * @description 405266b0663SKrzysztof Zdziarski * This structure contains the operation data for the cpaCyKptEcdsaSignRS 406266b0663SKrzysztof Zdziarski * function. The client MUST allocate the memory for this structure and the 407266b0663SKrzysztof Zdziarski * items pointed to by this structure. When the structure is passed into 408266b0663SKrzysztof Zdziarski * the function, ownership of the memory passes to the function. Ownership 409266b0663SKrzysztof Zdziarski * of the memory returns to the client when this structure is returned in 410266b0663SKrzysztof Zdziarski * the callback function. 411266b0663SKrzysztof Zdziarski * This key structure is encrypted when passed into cpaCyKptEcdsaSignRS 412266b0663SKrzysztof Zdziarski * Encrypt - AES-256-GCM (Key, AAD, Input) 413266b0663SKrzysztof Zdziarski * "||" - denotes concatenation 414266b0663SKrzysztof Zdziarski * 415266b0663SKrzysztof Zdziarski * Key = SWK 416266b0663SKrzysztof Zdziarski * AAD = DER(OID) 417266b0663SKrzysztof Zdziarski * Input = (d) 418266b0663SKrzysztof Zdziarski * Encrypt (SWK, AAD, (d)) 419266b0663SKrzysztof Zdziarski * Output (AuthTag, EncryptedECKey) 420266b0663SKrzysztof Zdziarski * 421266b0663SKrzysztof Zdziarski * privatekey == EncryptedECKey || AuthTag 422266b0663SKrzysztof Zdziarski * 423266b0663SKrzysztof Zdziarski * OID's that shall be supported by KPT implementation: 424266b0663SKrzysztof Zdziarski * Curve OID DER(OID) 425266b0663SKrzysztof Zdziarski * secp256r1 1.2.840.10045.3.1.7 06 08 2A 86 48 CE 3D 03 01 07 426266b0663SKrzysztof Zdziarski * secp384r1 1.3.132.0.34 06 05 2B 81 04 00 22 427266b0663SKrzysztof Zdziarski * secp521r1 1.3.132.0.35 06 05 2B 81 04 00 23 428266b0663SKrzysztof Zdziarski * 429266b0663SKrzysztof Zdziarski * Expected private key (d) sizes: 430266b0663SKrzysztof Zdziarski * secp256r1 256 bits 431266b0663SKrzysztof Zdziarski * secp384r1 384 bits 432266b0663SKrzysztof Zdziarski * secp521r1 576 bits (rounded up to a multiple of 64-bit quadword) 433266b0663SKrzysztof Zdziarski * 434266b0663SKrzysztof Zdziarski * AuthTag is 128 bits (16 bytes) 435266b0663SKrzysztof Zdziarski * 436266b0663SKrzysztof Zdziarski * For optimal performance all data buffers SHOULD be 8-byte aligned. 437266b0663SKrzysztof Zdziarski * 438266b0663SKrzysztof Zdziarski * @note 439266b0663SKrzysztof Zdziarski * If the client modifies or frees the memory referenced in this 440266b0663SKrzysztof Zdziarski * structure after it has been submitted to the cpaCyKptEcdsaSignRS 441266b0663SKrzysztof Zdziarski * function, and before it has been returned in the callback, undefined 442266b0663SKrzysztof Zdziarski * behavior will result. 443266b0663SKrzysztof Zdziarski * 444266b0663SKrzysztof Zdziarski * @see 445266b0663SKrzysztof Zdziarski * cpaCyEcdsaSignRS() 446266b0663SKrzysztof Zdziarski * 447266b0663SKrzysztof Zdziarski *****************************************************************************/ 448266b0663SKrzysztof Zdziarski typedef struct CpaCyKptEcdsaSignRSOpData_t 449266b0663SKrzysztof Zdziarski { 450266b0663SKrzysztof Zdziarski CpaFlatBuffer privateKey; 451266b0663SKrzysztof Zdziarski /**< Encrypted private key data of the form 452266b0663SKrzysztof Zdziarski * EncryptECKey || AuthTag */ 453266b0663SKrzysztof Zdziarski CpaFlatBuffer m; 454266b0663SKrzysztof Zdziarski /**< digest of the message to be signed */ 455266b0663SKrzysztof Zdziarski } CpaCyKptEcdsaSignRSOpData; 456266b0663SKrzysztof Zdziarski 457266b0663SKrzysztof Zdziarski /** 458266b0663SKrzysztof Zdziarski ***************************************************************************** 459266b0663SKrzysztof Zdziarski * Discovery and Provisioning APIs for KPT 460266b0663SKrzysztof Zdziarski * 461266b0663SKrzysztof Zdziarski *****************************************************************************/ 462266b0663SKrzysztof Zdziarski 463266b0663SKrzysztof Zdziarski /** 464266b0663SKrzysztof Zdziarski ***************************************************************************** 465266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 466266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 467266b0663SKrzysztof Zdziarski * Query KPT's issuing public key(R_Pu) and signature from QAT driver. 468266b0663SKrzysztof Zdziarski * @description 469266b0663SKrzysztof Zdziarski * This function is to query the RSA3K issuing key and its 470266b0663SKrzysztof Zdziarski * PKCS#1 v2.2 SHA-384 signature from the QAT driver. 471266b0663SKrzysztof Zdziarski * @context 472266b0663SKrzysztof Zdziarski * This function may sleep, and MUST NOT be called in interrupt context. 473266b0663SKrzysztof Zdziarski * @assumptions 474266b0663SKrzysztof Zdziarski * None 475266b0663SKrzysztof Zdziarski * @sideEffects 476266b0663SKrzysztof Zdziarski * None 477266b0663SKrzysztof Zdziarski * @blocking 478266b0663SKrzysztof Zdziarski * This function is synchronous and blocking. 479266b0663SKrzysztof Zdziarski * @param[in] instanceHandle Instance handle. 480266b0663SKrzysztof Zdziarski * @param[out] pIssueCert KPT-2.0 Issuing certificate in PEM format 481266b0663SKrzysztof Zdziarski as defined in RFC#7468 482266b0663SKrzysztof Zdziarski * @param[out] pKptStatus One of the status codes denoted in the 483266b0663SKrzysztof Zdziarski * enumerate type CpaCyKptKeyManagementStatus 484266b0663SKrzysztof Zdziarski * CPA_CY_KPT_SUCCESS Issuing key retrieved successfully 485266b0663SKrzysztof Zdziarski * CPA_CY_KPT_FAILED Operation failed 486266b0663SKrzysztof Zdziarski * 487266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_SUCCESS Function executed successfully. 488266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 489266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_FAIL Function failed. Suggested course of action 490266b0663SKrzysztof Zdziarski * is to shutdown and restart. 491266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_UNSUPPORTED Function is not supported. 492266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RESTARTING API implementation is restarting. 493266b0663SKrzysztof Zdziarski * Resubmit the request. 494266b0663SKrzysztof Zdziarski * 495266b0663SKrzysztof Zdziarski * @pre 496266b0663SKrzysztof Zdziarski * The component has been initialized via cpaCyStartInstance function. 497266b0663SKrzysztof Zdziarski * @post 498266b0663SKrzysztof Zdziarski * None 499266b0663SKrzysztof Zdziarski * @note 500266b0663SKrzysztof Zdziarski * Note that this is a synchronous function and has no completion callback 501266b0663SKrzysztof Zdziarski * associated with it. 502266b0663SKrzysztof Zdziarski * @see 503266b0663SKrzysztof Zdziarski * 504266b0663SKrzysztof Zdziarski *****************************************************************************/ 505266b0663SKrzysztof Zdziarski CpaStatus 506266b0663SKrzysztof Zdziarski cpaCyKptQueryIssuingKeys(const CpaInstanceHandle instanceHandle, 507266b0663SKrzysztof Zdziarski CpaFlatBuffer *pPublicX509IssueCert, 508266b0663SKrzysztof Zdziarski CpaCyKptKeyManagementStatus *pKptStatus); 509266b0663SKrzysztof Zdziarski 510266b0663SKrzysztof Zdziarski /** 511266b0663SKrzysztof Zdziarski ***************************************************************************** 512266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 513266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 514266b0663SKrzysztof Zdziarski * Query KPT's Per-Part public key(I_pu) and signature from QAT 515266b0663SKrzysztof Zdziarski * device 516266b0663SKrzysztof Zdziarski * @description 517266b0663SKrzysztof Zdziarski * This function is to query RSA3K Per-Part public key and its 518266b0663SKrzysztof Zdziarski * PKCS#1 v2.2 SHA-384 signature from the QAT device. 519266b0663SKrzysztof Zdziarski * @context 520266b0663SKrzysztof Zdziarski * This function may sleep, and MUST NOT be called in interrupt context. 521266b0663SKrzysztof Zdziarski * @assumptions 522266b0663SKrzysztof Zdziarski * None 523266b0663SKrzysztof Zdziarski * @sideEffects 524266b0663SKrzysztof Zdziarski * None 525266b0663SKrzysztof Zdziarski * @blocking 526266b0663SKrzysztof Zdziarski * This function is synchronous and blocking. 527266b0663SKrzysztof Zdziarski * @param[in] instanceHandle Instance handle. 528266b0663SKrzysztof Zdziarski * @param[out] pDevCredential Device Per-Part public key 529266b0663SKrzysztof Zdziarski * @param[out] pKptStatus One of the status codes denoted in the 530266b0663SKrzysztof Zdziarski * enumerate type CpaCyKptKeyManagementStatus 531266b0663SKrzysztof Zdziarski * CPA_CY_KPT_SUCCESS Device credentials retrieved successfully 532266b0663SKrzysztof Zdziarski * CPA_CY_KPT_FAILED Operation failed 533266b0663SKrzysztof Zdziarski * 534266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_SUCCESS Function executed successfully. 535266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 536266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_FAIL Function failed. Suggested course of action 537266b0663SKrzysztof Zdziarski * is to shutdown and restart. 538266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_UNSUPPORTED Function is not supported. 539266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RESTARTING API implementation is restarting. 540266b0663SKrzysztof Zdziarski * Resubmit the request. 541266b0663SKrzysztof Zdziarski * 542266b0663SKrzysztof Zdziarski * @pre 543266b0663SKrzysztof Zdziarski * The component has been initialized via cpaCyStartInstance function. 544266b0663SKrzysztof Zdziarski * @post 545266b0663SKrzysztof Zdziarski * None 546266b0663SKrzysztof Zdziarski * @note 547266b0663SKrzysztof Zdziarski * Note that this is a synchronous function and has no completion callback 548266b0663SKrzysztof Zdziarski * associated with it. 549266b0663SKrzysztof Zdziarski * @see 550266b0663SKrzysztof Zdziarski * 551266b0663SKrzysztof Zdziarski *****************************************************************************/ 552266b0663SKrzysztof Zdziarski CpaStatus 553266b0663SKrzysztof Zdziarski cpaCyKptQueryDeviceCredentials(const CpaInstanceHandle instanceHandle, 554266b0663SKrzysztof Zdziarski CpaCyKptValidationKey *pDevCredential, 555266b0663SKrzysztof Zdziarski CpaCyKptKeyManagementStatus *pKptStatus); 556266b0663SKrzysztof Zdziarski 557266b0663SKrzysztof Zdziarski /** 558266b0663SKrzysztof Zdziarski ***************************************************************************** 559266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 560266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 561266b0663SKrzysztof Zdziarski * Perform KPT key loading function. 562266b0663SKrzysztof Zdziarski * 563266b0663SKrzysztof Zdziarski * @description 564266b0663SKrzysztof Zdziarski * This function is invoked by a QAT application to load an encrypted 565266b0663SKrzysztof Zdziarski * symmetric wrapping key. 566266b0663SKrzysztof Zdziarski * @context 567266b0663SKrzysztof Zdziarski * This is a synchronous function and it can sleep. It MUST NOT be 568266b0663SKrzysztof Zdziarski * executed in a context that DOES NOT permit sleeping. 569266b0663SKrzysztof Zdziarski * @assumptions 570266b0663SKrzysztof Zdziarski * None 571266b0663SKrzysztof Zdziarski * @sideEffects 572266b0663SKrzysztof Zdziarski * None 573266b0663SKrzysztof Zdziarski * @blocking 574266b0663SKrzysztof Zdziarski * This function is synchronous and blocking. 575266b0663SKrzysztof Zdziarski * @reentrant 576266b0663SKrzysztof Zdziarski * No 577266b0663SKrzysztof Zdziarski * @threadSafe 578266b0663SKrzysztof Zdziarski * Yes 579266b0663SKrzysztof Zdziarski * 580266b0663SKrzysztof Zdziarski * @param[in] instanceHandle QAT service instance handle. 581266b0663SKrzysztof Zdziarski * @param[in] pSWK Encrypted SWK 582266b0663SKrzysztof Zdziarski * @param[out] keyHandle A 64-bit handle value created by KPT 583266b0663SKrzysztof Zdziarski * @param[out] pKptStatus One of the status codes denoted in the 584266b0663SKrzysztof Zdziarski * enumerate type CpaCyKptKeyManagementStatus 585266b0663SKrzysztof Zdziarski * CPA_CY_KPT_SUCCESS Key Loaded successfully 586266b0663SKrzysztof Zdziarski * CPA_CY_KPT_LOADKEY_FAIL_QUOTA_EXCEEDED_PER_VFID 587266b0663SKrzysztof Zdziarski * SWK count exceeds the configured maxmium value per VFID 588266b0663SKrzysztof Zdziarski * CPA_CY_KPT_LOADKEY_FAIL_QUOTA_EXCEEDED_PER_PASID 589266b0663SKrzysztof Zdziarski * SWK count exceeds the configured maxmium value per PASID 590266b0663SKrzysztof Zdziarski * CPA_CY_KPT_LOADKEY_FAIL_QUOTA_EXCEEDED 591266b0663SKrzysztof Zdziarski * SWK count exceeds the configured maxmium value when not scoped to 592266b0663SKrzysztof Zdziarski * VFID or PASID 593266b0663SKrzysztof Zdziarski * CPA_CY_KPT_FAILED Operation failed due to unspecified reason 594266b0663SKrzysztof Zdziarski * 595266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_SUCCESS Function executed successfully. 596266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_FAIL Function failed. 597266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 598266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RESOURCE Error related to system resources. 599266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RESTARTING API implementation is restarting. 600266b0663SKrzysztof Zdziarski * Resubmit the request. 601266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_UNSUPPORTED KPT-2.0 is not supported. 602266b0663SKrzysztof Zdziarski * 603266b0663SKrzysztof Zdziarski * @pre 604266b0663SKrzysztof Zdziarski * Component has been initialized. 605266b0663SKrzysztof Zdziarski * @post 606266b0663SKrzysztof Zdziarski * None 607266b0663SKrzysztof Zdziarski * @note 608266b0663SKrzysztof Zdziarski * None 609266b0663SKrzysztof Zdziarski * @see 610266b0663SKrzysztof Zdziarski * None 611266b0663SKrzysztof Zdziarski *****************************************************************************/ 612266b0663SKrzysztof Zdziarski CpaStatus 613266b0663SKrzysztof Zdziarski cpaCyKptLoadKey(CpaInstanceHandle instanceHandle, 614266b0663SKrzysztof Zdziarski CpaCyKptLoadKey *pSWK, 615266b0663SKrzysztof Zdziarski CpaCyKptHandle *keyHandle, 616266b0663SKrzysztof Zdziarski CpaCyKptKeyManagementStatus *pKptStatus); 617266b0663SKrzysztof Zdziarski 618266b0663SKrzysztof Zdziarski /** 619266b0663SKrzysztof Zdziarski ***************************************************************************** 620266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 621266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 622266b0663SKrzysztof Zdziarski * Perform KPT delete keys function according to key handle 623266b0663SKrzysztof Zdziarski * 624266b0663SKrzysztof Zdziarski * @description 625266b0663SKrzysztof Zdziarski * Before closing a QAT session(instance), an application that has 626266b0663SKrzysztof Zdziarski * previously stored its wrapping key in a QAT device using the KPT 627266b0663SKrzysztof Zdziarski * framework executes this call to delete its wrapping key in the QAT 628266b0663SKrzysztof Zdziarski * device. 629266b0663SKrzysztof Zdziarski * @context 630266b0663SKrzysztof Zdziarski * This is a synchronous function and it can sleep. It MUST NOT be 631266b0663SKrzysztof Zdziarski * executed in a context that DOES NOT permit sleeping. 632266b0663SKrzysztof Zdziarski * @assumptions 633266b0663SKrzysztof Zdziarski * None 634266b0663SKrzysztof Zdziarski * @sideEffects 635266b0663SKrzysztof Zdziarski * None 636266b0663SKrzysztof Zdziarski * @blocking 637266b0663SKrzysztof Zdziarski * This function is synchronous and blocking. 638266b0663SKrzysztof Zdziarski * @reentrant 639266b0663SKrzysztof Zdziarski * No 640266b0663SKrzysztof Zdziarski * @threadSafe 641266b0663SKrzysztof Zdziarski * Yes 642266b0663SKrzysztof Zdziarski * 643266b0663SKrzysztof Zdziarski * @param[in] instanceHandle QAT service instance handle. 644266b0663SKrzysztof Zdziarski * @param[in] keyHandle A 64-bit handle value 645266b0663SKrzysztof Zdziarski * @param[out] pkptstatus One of the status codes denoted in the 646266b0663SKrzysztof Zdziarski * enumerate type CpaCyKptKeyManagementStatus 647266b0663SKrzysztof Zdziarski * CPA_CY_KPT_SUCCESS Key Deleted successfully 648266b0663SKrzysztof Zdziarski * CPA_CY_KPT_SWK_FAIL_NOT_FOUND For any reason the input handle cannot be 649266b0663SKrzysztof Zdziarski * found. 650266b0663SKrzysztof Zdziarski * CPA_CY_KPT_FAILED Operation failed due to unspecified reason 651266b0663SKrzysztof Zdziarski * 652266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_SUCCESS Function executed successfully. 653266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_FAIL Function failed. 654266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 655266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RESOURCE Error related to system resources. 656266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RESTARTING API implementation is restarting. 657266b0663SKrzysztof Zdziarski * Resubmit the request. 658266b0663SKrzysztof Zdziarski * @pre 659266b0663SKrzysztof Zdziarski * Component has been initialized. 660266b0663SKrzysztof Zdziarski * @post 661266b0663SKrzysztof Zdziarski * None 662266b0663SKrzysztof Zdziarski * @note 663266b0663SKrzysztof Zdziarski * None 664266b0663SKrzysztof Zdziarski * @see 665266b0663SKrzysztof Zdziarski * None 666266b0663SKrzysztof Zdziarski *****************************************************************************/ 667266b0663SKrzysztof Zdziarski CpaStatus 668266b0663SKrzysztof Zdziarski cpaCyKptDeleteKey(CpaInstanceHandle instanceHandle, 669266b0663SKrzysztof Zdziarski CpaCyKptHandle keyHandle, 670266b0663SKrzysztof Zdziarski CpaCyKptKeyManagementStatus *pKptStatus); 671266b0663SKrzysztof Zdziarski 672266b0663SKrzysztof Zdziarski /** 673266b0663SKrzysztof Zdziarski ***************************************************************************** 674266b0663SKrzysztof Zdziarski * Usage APIs for KPT 675266b0663SKrzysztof Zdziarski * 676266b0663SKrzysztof Zdziarski *****************************************************************************/ 677266b0663SKrzysztof Zdziarski 678266b0663SKrzysztof Zdziarski /** 679266b0663SKrzysztof Zdziarski ***************************************************************************** 680266b0663SKrzysztof Zdziarski * @file cpa_cy_kpt.h 681266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 682266b0663SKrzysztof Zdziarski * Perform KPT-2.0 mode RSA decrypt primitive operation on the input data. 683266b0663SKrzysztof Zdziarski * 684266b0663SKrzysztof Zdziarski * @description 685266b0663SKrzysztof Zdziarski * This function is a variant of cpaCyRsaDecrypt, which will perform 686266b0663SKrzysztof Zdziarski * an RSA decryption primitive operation on the input data using the 687266b0663SKrzysztof Zdziarski * specified RSA private key which are encrypted. As the RSA decryption 688266b0663SKrzysztof Zdziarski * primitive and signing primitive operations are mathematically 689266b0663SKrzysztof Zdziarski * identical this function may also be used to perform an RSA signing 690266b0663SKrzysztof Zdziarski * primitive operation. 691266b0663SKrzysztof Zdziarski * 692266b0663SKrzysztof Zdziarski * @context 693266b0663SKrzysztof Zdziarski * When called as an asynchronous function it cannot sleep. It can be 694266b0663SKrzysztof Zdziarski * executed in a context that does not permit sleeping. 695266b0663SKrzysztof Zdziarski * When called as a synchronous function it may sleep. It MUST NOT be 696266b0663SKrzysztof Zdziarski * executed in a context that DOES NOT permit sleeping. 697266b0663SKrzysztof Zdziarski * @assumptions 698266b0663SKrzysztof Zdziarski * None 699266b0663SKrzysztof Zdziarski * @sideEffects 700266b0663SKrzysztof Zdziarski * None 701266b0663SKrzysztof Zdziarski * @blocking 702266b0663SKrzysztof Zdziarski * Yes when configured to operate in synchronous mode. 703266b0663SKrzysztof Zdziarski * @reentrant 704266b0663SKrzysztof Zdziarski * No 705266b0663SKrzysztof Zdziarski * @threadSafe 706266b0663SKrzysztof Zdziarski * Yes 707266b0663SKrzysztof Zdziarski * 708266b0663SKrzysztof Zdziarski * @param[in] instanceHandle Instance handle. 709266b0663SKrzysztof Zdziarski * @param[in] pRsaDecryptCb Pointer to callback function to be invoked 710266b0663SKrzysztof Zdziarski * when the operation is complete. If this is 711266b0663SKrzysztof Zdziarski * set to a NULL value the function will operate 712266b0663SKrzysztof Zdziarski * synchronously. 713266b0663SKrzysztof Zdziarski * @param[in] pCallbackTag Opaque User Data for this specific call. 714266b0663SKrzysztof Zdziarski * Will be returned unchanged in the callback. 715266b0663SKrzysztof Zdziarski * @param[in] pDecryptOpData Structure containing all the data needed to 716266b0663SKrzysztof Zdziarski * perform the RSA decrypt operation. The 717266b0663SKrzysztof Zdziarski * client code allocates the memory for this 718266b0663SKrzysztof Zdziarski * structure. This component takes ownership 719266b0663SKrzysztof Zdziarski * of the memory until it is returned in the 720266b0663SKrzysztof Zdziarski * callback. 721266b0663SKrzysztof Zdziarski * @param[out] pOutputData Pointer to structure into which the result of 722266b0663SKrzysztof Zdziarski * the RSA decryption primitive is written. The 723266b0663SKrzysztof Zdziarski * client MUST allocate this memory. The data 724266b0663SKrzysztof Zdziarski * pointed to is an integer in big-endian order. 725266b0663SKrzysztof Zdziarski * The value will be between 0 and the modulus 726266b0663SKrzysztof Zdziarski * n - 1. 727266b0663SKrzysztof Zdziarski * On invocation the callback function will 728266b0663SKrzysztof Zdziarski * contain this parameter in the pOut parameter. 729266b0663SKrzysztof Zdziarski * @param[in] pKptUnwrapContext Pointer of structure into which the content 730266b0663SKrzysztof Zdziarski * of KptUnwrapContext is kept. The client MUST 731266b0663SKrzysztof Zdziarski * allocate this memory and copy structure 732266b0663SKrzysztof Zdziarski * KptUnwrapContext into this flat buffer. 733266b0663SKrzysztof Zdziarski * 734266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_SUCCESS Function executed successfully. 735266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_FAIL Function failed. 736266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RETRY Resubmit the request. 737266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 738266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RESOURCE Error related to system resources. 739266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RESTARTING API implementation is restarting.Resubmit 740266b0663SKrzysztof Zdziarski * the request. 741266b0663SKrzysztof Zdziarski * @pre 742266b0663SKrzysztof Zdziarski * The component has been initialized via cpaCyStartInstance function. 743266b0663SKrzysztof Zdziarski * @post 744266b0663SKrzysztof Zdziarski * None 745266b0663SKrzysztof Zdziarski * @note 746266b0663SKrzysztof Zdziarski * By virtue of invoking cpaSyKptRsaDecrypt, the implementation understands 747266b0663SKrzysztof Zdziarski * that pDecryptOpData contains an encrypted private key that requires 748266b0663SKrzysztof Zdziarski * unwrapping. KptUnwrapContext contains a 'KptHandle' field that points 749266b0663SKrzysztof Zdziarski * to the unwrapping key in the WKT. 750266b0663SKrzysztof Zdziarski * When pRsaDecryptCb is non-NULL an asynchronous callback is generated in 751266b0663SKrzysztof Zdziarski * response to this function call. 752266b0663SKrzysztof Zdziarski * Any errors generated during processing are reported as part of the 753266b0663SKrzysztof Zdziarski * callback status code. For optimal performance, data pointers SHOULD be 754266b0663SKrzysztof Zdziarski * 8-byte aligned. 755266b0663SKrzysztof Zdziarski * In KPT release, private key field in CpaCyKptRsaDecryptOpData is a 756266b0663SKrzysztof Zdziarski * concatenation of cipher text and hash tag. 757266b0663SKrzysztof Zdziarski * For optimal performance, data pointers SHOULD be 8-byte aligned. 758266b0663SKrzysztof Zdziarski * @see 759266b0663SKrzysztof Zdziarski * CpaCyKptRsaDecryptOpData, 760266b0663SKrzysztof Zdziarski * CpaCyGenFlatBufCbFunc, 761266b0663SKrzysztof Zdziarski * 762266b0663SKrzysztof Zdziarski *****************************************************************************/ 763266b0663SKrzysztof Zdziarski CpaStatus 764266b0663SKrzysztof Zdziarski cpaCyKptRsaDecrypt(const CpaInstanceHandle instanceHandle, 765266b0663SKrzysztof Zdziarski const CpaCyGenFlatBufCbFunc pRsaDecryptCb, 766266b0663SKrzysztof Zdziarski void *pCallbackTag, 767266b0663SKrzysztof Zdziarski const CpaCyKptRsaDecryptOpData *pDecryptOpData, 768266b0663SKrzysztof Zdziarski CpaFlatBuffer *pOutputData, 769266b0663SKrzysztof Zdziarski CpaCyKptUnwrapContext *pKptUnwrapContext); 770266b0663SKrzysztof Zdziarski 771266b0663SKrzysztof Zdziarski /** 772266b0663SKrzysztof Zdziarski ***************************************************************************** 773266b0663SKrzysztof Zdziarski * @ingroup cpaCyKpt 774266b0663SKrzysztof Zdziarski * Generate ECDSA Signature R & S. 775266b0663SKrzysztof Zdziarski * @description 776266b0663SKrzysztof Zdziarski * This function is a variant of cpaCyEcdsaSignRS, it generates ECDSA 777266b0663SKrzysztof Zdziarski * signature R & S as per ANSI X9.62 2005 section 7.3. 778266b0663SKrzysztof Zdziarski * @context 779266b0663SKrzysztof Zdziarski * When called as an asynchronous function it cannot sleep. It can be 780266b0663SKrzysztof Zdziarski * executed in a context that does not permit sleeping. 781266b0663SKrzysztof Zdziarski * When called as a synchronous function it may sleep. It MUST NOT be 782266b0663SKrzysztof Zdziarski * executed in a context that DOES NOT permit sleeping. 783266b0663SKrzysztof Zdziarski * @assumptions 784266b0663SKrzysztof Zdziarski * None 785266b0663SKrzysztof Zdziarski * @sideEffects 786266b0663SKrzysztof Zdziarski * None 787266b0663SKrzysztof Zdziarski * @blocking 788266b0663SKrzysztof Zdziarski * Yes when configured to operate in synchronous mode. 789266b0663SKrzysztof Zdziarski * @reentrant 790266b0663SKrzysztof Zdziarski * No 791266b0663SKrzysztof Zdziarski * @threadSafe 792266b0663SKrzysztof Zdziarski * Yes 793266b0663SKrzysztof Zdziarski * 794266b0663SKrzysztof Zdziarski * @param[in] instanceHandle Instance handle. 795266b0663SKrzysztof Zdziarski * @param[in] pCb Callback function pointer. If this is set to 796266b0663SKrzysztof Zdziarski * a NULL value the function will operate 797266b0663SKrzysztof Zdziarski * synchronously. 798266b0663SKrzysztof Zdziarski * @param[in] pCallbackTag User-supplied value to help identify request. 799266b0663SKrzysztof Zdziarski * @param[in] pOpData Structure containing all the data needed to 800266b0663SKrzysztof Zdziarski * perform the operation. The client code 801266b0663SKrzysztof Zdziarski * allocates the memory for this structure. This 802266b0663SKrzysztof Zdziarski * component takes ownership of the memory until 803266b0663SKrzysztof Zdziarski * it is returned in the callback. 804266b0663SKrzysztof Zdziarski * @param[out] pSignStatus In synchronous mode, the multiply output is 805266b0663SKrzysztof Zdziarski * valid (CPA_TRUE) or the output is invalid 806266b0663SKrzysztof Zdziarski * (CPA_FALSE). 807266b0663SKrzysztof Zdziarski * @param[out] pR ECDSA message signature r. 808266b0663SKrzysztof Zdziarski * @param[out] pS ECDSA message signature s. 809266b0663SKrzysztof Zdziarski * @param[in] pKptUnwrapContext Pointer of structure into which the content 810266b0663SKrzysztof Zdziarski * of KptUnwrapContext is kept,The client MUST 811266b0663SKrzysztof Zdziarski * allocate this memory and copy structure 812266b0663SKrzysztof Zdziarski * KptUnwrapContext into this flat buffer. 813266b0663SKrzysztof Zdziarski * 814266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_SUCCESS Function executed successfully. 815266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_FAIL Function failed. 816266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RETRY Resubmit the request. 817266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_INVALID_PARAM Invalid parameter passed in. 818266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RESOURCE Error related to system resources. 819266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_RESTARTING API implementation is restarting. Resubmit 820266b0663SKrzysztof Zdziarski * the request. 821266b0663SKrzysztof Zdziarski * @retval CPA_STATUS_UNSUPPORTED Function is not supported. 822266b0663SKrzysztof Zdziarski * 823266b0663SKrzysztof Zdziarski * @pre 824266b0663SKrzysztof Zdziarski * The component has been initialized via cpaCyStartInstance function. 825266b0663SKrzysztof Zdziarski * @post 826266b0663SKrzysztof Zdziarski * None 827266b0663SKrzysztof Zdziarski * @note 828266b0663SKrzysztof Zdziarski * By virtue of invoking the cpaCyKptEcdsaSignRS, the implementation 829266b0663SKrzysztof Zdziarski * understands CpaCyEcdsaSignRSOpData contains an encrypted private key that 830266b0663SKrzysztof Zdziarski * requires unwrapping. KptUnwrapContext contains a 'KptHandle' field 831266b0663SKrzysztof Zdziarski * that points to the unwrapping key in the WKT. 832266b0663SKrzysztof Zdziarski * When pCb is non-NULL an asynchronous callback of type 833266b0663SKrzysztof Zdziarski * CpaCyEcdsaSignRSCbFunc generated in response to this function 834266b0663SKrzysztof Zdziarski * call. 835266b0663SKrzysztof Zdziarski * In KPT release, private key field in CpaCyEcdsaSignRSOpData is a 836266b0663SKrzysztof Zdziarski * concatenation of cipher text and hash tag. 837266b0663SKrzysztof Zdziarski * @see 838266b0663SKrzysztof Zdziarski * None 839266b0663SKrzysztof Zdziarski *****************************************************************************/ 840266b0663SKrzysztof Zdziarski CpaStatus 841266b0663SKrzysztof Zdziarski cpaCyKptEcdsaSignRS(const CpaInstanceHandle instanceHandle, 842266b0663SKrzysztof Zdziarski const CpaCyEcdsaSignRSCbFunc pCb, 843266b0663SKrzysztof Zdziarski void *pCallbackTag, 844266b0663SKrzysztof Zdziarski const CpaCyKptEcdsaSignRSOpData *pOpData, 845266b0663SKrzysztof Zdziarski CpaBoolean *pSignStatus, 846266b0663SKrzysztof Zdziarski CpaFlatBuffer *pR, 847266b0663SKrzysztof Zdziarski CpaFlatBuffer *pS, 848266b0663SKrzysztof Zdziarski CpaCyKptUnwrapContext *pKptUnwrapContext); 849266b0663SKrzysztof Zdziarski 850266b0663SKrzysztof Zdziarski #ifdef __cplusplus 851266b0663SKrzysztof Zdziarski } /* close the extern "C" { */ 852266b0663SKrzysztof Zdziarski #endif 853266b0663SKrzysztof Zdziarski #endif 854