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