return NULL;
if (pk->ameth->dirty_cnt(pk) != pk->dirty_cnt_copy)
- for (i = 0;
- i < OSSL_NELEM(pk->pkeys) && pk->pkeys[i].keymgmt != NULL;
- i++) {
- pk->pkeys[i].keymgmt->freekey(pk->pkeys[i].provkey);
- pk->pkeys[i].keymgmt = NULL;
- pk->pkeys[i].provkey = NULL;
- }
+ evp_keymgmt_clear_pkey_cache(pk);
}
/*
}
return provkey;
}
+
+void evp_keymgmt_clear_pkey_cache(EVP_PKEY *pk)
+{
+ size_t i;
+
+ if (pk != NULL) {
+ for (i = 0;
+ i < OSSL_NELEM(pk->pkeys) && pk->pkeys[i].keymgmt != NULL;
+ i++) {
+ EVP_KEYMGMT *keymgmt = pk->pkeys[i].keymgmt;
+ void *provkey = pk->pkeys[i].provkey;
+
+ pk->pkeys[i].keymgmt = NULL;
+ pk->pkeys[i].provkey = NULL;
+ keymgmt->freekey(provkey);
+ EVP_KEYMGMT_free(keymgmt);
+ }
+ }
+}