Skip to content

Commit 0ad0243

Browse files
bjayanaxrvemulax
authored andcommitted
QAT Engine and Provider compatibility issues fix with OpenSSL 3.3 and 3.4
- Fixed Qatprovider RSA, ECDSA, ECDH, ECX, SM2, DSA & DH issues - Fixed Qatengine SHA3, SM2 issues - Fixed double free error with RSA 8k testapp Signed-off-by: Jaya Naga Venkata Sudhakar <bavirisettyx.jaya.naga.venkata.sudhakar@intel.com> Co-authored-by: Raveesh Vemula <raveeshx.vemula@intel.com>
1 parent 49bcbbb commit 0ad0243

File tree

10 files changed

+75
-7
lines changed

10 files changed

+75
-7
lines changed

qat_hw_sha3.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,15 @@ int qat_sha3_copy(QAT_KECCAK1600_CTX *to, const QAT_KECCAK1600_CTX *from);
148148
# endif
149149
typedef struct {
150150
uint64_t A[5][5];
151+
#if OPENSSL_VERSION_NUMBER >= 0x30300000
152+
unsigned char buf[KECCAK1600_WIDTH / 8 - 32];
153+
#endif
151154
size_t block_size; /* SW cached ctx->digest->block_size */
152155
size_t md_size; /* SW output length, variable in XOF */
153156
size_t num; /* SW used bytes in below buffer */
157+
#if OPENSSL_VERSION_NUMBER < 0x30300000
154158
unsigned char buf[KECCAK1600_WIDTH / 8 - 32];
159+
#endif
155160
unsigned char pad;
156161
} KECCAK1600_CTX;
157162

qat_prov_ecx.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,17 @@
5858
typedef struct{
5959
int id; /* libcrypto internal */
6060
int name_id;
61+
# if OPENSSL_VERSION_NUMBER >= 0x30300000
62+
/* NID for the legacy alg if there is one */
63+
int legacy_alg;
64+
# endif
6165
char *type_name;
6266
const char *description;
6367
OSSL_PROVIDER *prov;
6468
CRYPTO_REF_COUNT references;
65-
#if OPENSSL_VERSION_NUMBER < 0x30200000
69+
# if OPENSSL_VERSION_NUMBER < 0x30200000
6670
CRYPTO_RWLOCK *lock;
67-
#endif
71+
# endif
6872
OSSL_FUNC_keymgmt_new_fn *new;
6973
OSSL_FUNC_keymgmt_free_fn *free;
7074
OSSL_FUNC_keymgmt_get_params_fn *get_params;
@@ -73,6 +77,10 @@ typedef struct{
7377
OSSL_FUNC_keymgmt_settable_params_fn *settable_params;
7478
OSSL_FUNC_keymgmt_gen_init_fn *gen_init;
7579
OSSL_FUNC_keymgmt_gen_set_template_fn *gen_set_template;
80+
# if OPENSSL_VERSION_NUMBER >= 0x30400000
81+
OSSL_FUNC_keymgmt_gen_get_params_fn *gen_get_params;
82+
OSSL_FUNC_keymgmt_gen_gettable_params_fn *gen_gettable_params;
83+
# endif
7684
OSSL_FUNC_keymgmt_gen_set_params_fn *gen_set_params;
7785
OSSL_FUNC_keymgmt_gen_settable_params_fn *gen_settable_params;
7886
OSSL_FUNC_keymgmt_gen_fn *gen;

qat_prov_kmgmt_dh.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ typedef struct
6565
{
6666
int id; /* libcrypto internal */
6767
int name_id;
68+
# if OPENSSL_VERSION_NUMBER >= 0x30300000
69+
/* NID for the legacy alg if there is one */
70+
int legacy_alg;
71+
# endif
6872
char *type_name;
6973
const char *description;
7074
OSSL_PROVIDER *prov;
@@ -84,6 +88,10 @@ typedef struct
8488
/* Generation, a complex constructor */
8589
OSSL_FUNC_keymgmt_gen_init_fn *gen_init;
8690
OSSL_FUNC_keymgmt_gen_set_template_fn *gen_set_template;
91+
# if OPENSSL_VERSION_NUMBER >= 0x30400000
92+
OSSL_FUNC_keymgmt_gen_get_params_fn *gen_get_params;
93+
OSSL_FUNC_keymgmt_gen_gettable_params_fn *gen_gettable_params;
94+
# endif
8795
OSSL_FUNC_keymgmt_gen_set_params_fn *gen_set_params;
8896
OSSL_FUNC_keymgmt_gen_settable_params_fn *gen_settable_params;
8997
OSSL_FUNC_keymgmt_gen_fn *gen;
@@ -349,7 +357,12 @@ static void *qat_dh_dup(const void *keydata_from, int selection)
349357
return NULL;
350358
return fun(keydata_from, selection);
351359
}
352-
360+
# if OPENSSL_VERSION_NUMBER >= 0x30400000
361+
static const char *qat_dh_query_operation_name(int operation_id)
362+
{
363+
return "DH";
364+
}
365+
# endif
353366
const OSSL_DISPATCH qat_dh_keymgmt_functions[] = {
354367
{OSSL_FUNC_KEYMGMT_NEW, (void (*)(void))qat_dh_newdata},
355368
{OSSL_FUNC_KEYMGMT_GEN_INIT, (void (*)(void))qat_dh_gen_init},
@@ -372,6 +385,10 @@ const OSSL_DISPATCH qat_dh_keymgmt_functions[] = {
372385
{OSSL_FUNC_KEYMGMT_IMPORT_TYPES, (void (*)(void))qat_dh_import_types},
373386
{OSSL_FUNC_KEYMGMT_EXPORT, (void (*)(void))qat_dh_export},
374387
{OSSL_FUNC_KEYMGMT_EXPORT_TYPES, (void (*)(void))qat_dh_export_types},
388+
# if OPENSSL_VERSION_NUMBER >= 0x30400000
389+
{ OSSL_FUNC_KEYMGMT_QUERY_OPERATION_NAME,
390+
(void (*)(void))qat_dh_query_operation_name },
391+
# endif
375392
{OSSL_FUNC_KEYMGMT_DUP, (void (*)(void))qat_dh_dup},
376393
{0, NULL}};
377394

qat_prov_kmgmt_dsa.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ typedef struct
6969
{
7070
int id; /* libcrypto internal */
7171
int name_id;
72+
# if OPENSSL_VERSION_NUMBER >= 0x30300000
73+
/* NID for the legacy alg if there is one */
74+
int legacy_alg;
75+
# endif
7276
char *type_name;
7377
const char *description;
7478
OSSL_PROVIDER *prov;
@@ -88,6 +92,10 @@ typedef struct
8892
/* Generation, a complex constructor */
8993
OSSL_FUNC_keymgmt_gen_init_fn *gen_init;
9094
OSSL_FUNC_keymgmt_gen_set_template_fn *gen_set_template;
95+
# if OPENSSL_VERSION_NUMBER >= 0x30400000
96+
OSSL_FUNC_keymgmt_gen_get_params_fn *gen_get_params;
97+
OSSL_FUNC_keymgmt_gen_gettable_params_fn *gen_gettable_params;
98+
# endif
9199
OSSL_FUNC_keymgmt_gen_set_params_fn *gen_set_params;
92100
OSSL_FUNC_keymgmt_gen_settable_params_fn *gen_settable_params;
93101
OSSL_FUNC_keymgmt_gen_fn *gen;

qat_prov_kmgmt_ec.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ if (p != NULL) { \
113113
typedef struct{
114114
int id; /* libcrypto internal */
115115
int name_id;
116+
# if OPENSSL_VERSION_NUMBER >= 0x30300000
117+
/* NID for the legacy alg if there is one */
118+
int legacy_alg;
119+
# endif
116120
char *type_name;
117121
const char *description;
118122
OSSL_PROVIDER *prov;
@@ -132,6 +136,10 @@ typedef struct{
132136
/* Generation, a complex constructor */
133137
OSSL_FUNC_keymgmt_gen_init_fn *gen_init;
134138
OSSL_FUNC_keymgmt_gen_set_template_fn *gen_set_template;
139+
# if OPENSSL_VERSION_NUMBER >= 0x30400000
140+
OSSL_FUNC_keymgmt_gen_get_params_fn *gen_get_params;
141+
OSSL_FUNC_keymgmt_gen_gettable_params_fn *gen_gettable_params;
142+
# endif
135143
OSSL_FUNC_keymgmt_gen_set_params_fn *gen_set_params;
136144
OSSL_FUNC_keymgmt_gen_settable_params_fn *gen_settable_params;
137145
OSSL_FUNC_keymgmt_gen_fn *gen;

qat_prov_kmgmt_rsa.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@
5858
typedef struct{
5959
int id; /* libcrypto internal */
6060
int name_id;
61+
# if OPENSSL_VERSION_NUMBER >= 0x30300000
62+
/* NID for the legacy alg if there is one */
63+
int legacy_alg;
64+
# endif
6165
char *type_name;
6266
const char *description;
6367
OSSL_PROVIDER *prov;
@@ -77,6 +81,10 @@ typedef struct{
7781
/* Generation, a complex constructor */
7882
OSSL_FUNC_keymgmt_gen_init_fn *gen_init;
7983
OSSL_FUNC_keymgmt_gen_set_template_fn *gen_set_template;
84+
# if OPENSSL_VERSION_NUMBER >= 0x30400000
85+
OSSL_FUNC_keymgmt_gen_get_params_fn *gen_get_params;
86+
OSSL_FUNC_keymgmt_gen_gettable_params_fn *gen_gettable_params;
87+
# endif
8088
OSSL_FUNC_keymgmt_gen_set_params_fn *gen_set_params;
8189
OSSL_FUNC_keymgmt_gen_settable_params_fn *gen_settable_params;
8290
OSSL_FUNC_keymgmt_gen_fn *gen;

qat_prov_sign_sm2.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,9 @@ static int qat_sm2sig_digest_signverify_init(void *vpsm2ctx, const char *mdname,
358358
&& qat_DER_w_algorithmIdentifier_SM2_with_MD(&pkt, -1, ctx->ec, md_nid)
359359
&& QAT_WPACKET_finish(&pkt)) {
360360
QAT_WPACKET_get_total_written(&pkt, &ctx->aid_len);
361+
#if OPENSSL_VERSION_NUMBER < 0x30400000
361362
ctx->aid = QAT_WPACKET_get_curr(&pkt);
363+
#endif
362364
}
363365
QAT_WPACKET_cleanup(&pkt);
364366

@@ -498,12 +500,12 @@ static int qat_sm2sig_get_ctx_params(void *vpsm2ctx, OSSL_PARAM *params)
498500

499501
if (psm2ctx == NULL)
500502
return 0;
501-
503+
#if OPENSSL_VERSION_NUMBER < 0x30400000
502504
p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_ALGORITHM_ID);
503505
if (p != NULL
504506
&& !OSSL_PARAM_set_octet_string(p, psm2ctx->aid, psm2ctx->aid_len))
505507
return 0;
506-
508+
#endif
507509
p = OSSL_PARAM_locate(params, OSSL_SIGNATURE_PARAM_DIGEST_SIZE);
508510
if (p != NULL && !OSSL_PARAM_set_size_t(p, psm2ctx->mdsize))
509511
return 0;

qat_prov_sign_sm2.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ typedef struct {
7373

7474
/* The Algorithm Identifier of the combined signature algorithm */
7575
unsigned char aid_buf[OSSL_MAX_ALGORITHM_ID_SIZE];
76+
#if OPENSSL_VERSION_NUMBER < 0x30400000
7677
unsigned char *aid;
78+
#endif
7779
size_t aid_len;
7880

7981
/* main digest */
@@ -84,7 +86,6 @@ typedef struct {
8486
/* SM2 ID used for calculating the Z value */
8587
unsigned char *id;
8688
size_t id_len;
87-
8889
const unsigned char *tbs;
8990
size_t tbs_len;
9091
} QAT_PROV_SM2_CTX;

qat_sw_sm2.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,18 @@ typedef struct evp_signature_st {
7676
OSSL_FUNC_signature_newctx_fn *newctx;
7777
OSSL_FUNC_signature_sign_init_fn *sign_init;
7878
OSSL_FUNC_signature_sign_fn *sign;
79+
#if OPENSSL_VERSION_NUMBER >= 0x30400000
80+
OSSL_FUNC_signature_sign_message_init_fn *sign_message_init;
81+
OSSL_FUNC_signature_sign_message_update_fn *sign_message_update;
82+
OSSL_FUNC_signature_sign_message_final_fn *sign_message_final;
83+
#endif
7984
OSSL_FUNC_signature_verify_init_fn *verify_init;
8085
OSSL_FUNC_signature_verify_fn *verify;
86+
#if OPENSSL_VERSION_NUMBER >= 0x30400000
87+
OSSL_FUNC_signature_verify_message_init_fn *verify_message_init;
88+
OSSL_FUNC_signature_verify_message_update_fn *verify_message_update;
89+
OSSL_FUNC_signature_verify_message_final_fn *verify_message_final;
90+
#endif
8191
OSSL_FUNC_signature_verify_recover_init_fn *verify_recover_init;
8292
OSSL_FUNC_signature_verify_recover_fn *verify_recover;
8393
OSSL_FUNC_signature_digest_sign_init_fn *digest_sign_init;

test/tests_rsa.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3282,7 +3282,8 @@ static int run_rsa(void *args)
32823282
if (ptext)
32833283
OPENSSL_free(ptext);
32843284
#endif
3285-
RSA_free(key);
3285+
if(size < 8192)
3286+
RSA_free(key);
32863287
if (sig)
32873288
OPENSSL_free(sig);
32883289
if (verMsg)

0 commit comments

Comments
 (0)