Store: API for deletion - tests
[openssl.git] / test / fake_rsaprov.c
index a4f81be0232ea2f6ab1da23ccdafdf36e456ac0e..9bc463b2c8554026e7cf46387a08d6ad06b75d5f 100644 (file)
@@ -30,12 +30,18 @@ static int has_selection;
 static int imptypes_selection;
 static int exptypes_selection;
 static int query_id;
+static int key_deleted;
 
 struct fake_rsa_keydata {
     int selection;
     int status;
 };
 
+void fake_rsa_restore_store_state(void)
+{
+    key_deleted = 0;
+}
+
 static void *fake_rsa_keymgmt_new(void *provctx)
 {
     struct fake_rsa_keydata *key;
@@ -524,6 +530,7 @@ static OSSL_FUNC_store_set_ctx_params_fn fake_rsa_st_set_ctx_params;
 static OSSL_FUNC_store_load_fn fake_rsa_st_load;
 static OSSL_FUNC_store_eof_fn fake_rsa_st_eof;
 static OSSL_FUNC_store_close_fn fake_rsa_st_close;
+static OSSL_FUNC_store_delete_fn fake_rsa_st_delete;
 
 static const char fake_rsa_scheme[] = "fake_rsa:";
 
@@ -570,6 +577,11 @@ static int fake_rsa_st_load(void *loaderctx,
 
     switch (*storectx) {
     case 0:
+        if (key_deleted == 1) {
+            *storectx = 1;
+            break;
+       }
+
         /* Construct a new key using our keymgmt functions */
         if (!TEST_ptr(key = fake_rsa_keymgmt_new(NULL)))
             break;
@@ -600,13 +612,21 @@ static int fake_rsa_st_load(void *loaderctx,
 
     TEST_info("fake_rsa_load called - rv: %d", rv);
 
-    if (rv == 0) {
+    if (rv == 0 && key_deleted == 0) {
         fake_rsa_keymgmt_free(key);
         *storectx = 2;
     }
     return rv;
 }
 
+static int fake_rsa_st_delete(void *loaderctx, const char *uri,
+                              const OSSL_PARAM params[],
+                              OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)
+{
+    key_deleted = 1;
+    return 1;
+}
+
 static int fake_rsa_st_eof(void *loaderctx)
 {
     unsigned char *storectx = loaderctx;
@@ -629,6 +649,7 @@ static const OSSL_DISPATCH fake_rsa_store_funcs[] = {
     { OSSL_FUNC_STORE_LOAD, (void (*)(void))fake_rsa_st_load },
     { OSSL_FUNC_STORE_EOF, (void (*)(void))fake_rsa_st_eof },
     { OSSL_FUNC_STORE_CLOSE, (void (*)(void))fake_rsa_st_close },
+    { OSSL_FUNC_STORE_DELETE, (void (*)(void))fake_rsa_st_delete },
     OSSL_DISPATCH_END,
 };