diff --git a/include/cryptErase.hpp b/include/cryptErase.hpp
new file mode 100644
index 0000000..474f0df
--- /dev/null
+++ b/include/cryptErase.hpp
@@ -0,0 +1,36 @@
+#pragma once
+
+#include "cryptsetupInterface.hpp"
+#include "erase.hpp"
+
+#include <libcryptsetup.h>
+
+#include <memory>
+#include <string_view>
+
+namespace estoraged
+{
+
+class CryptErase : public Erase
+{
+  public:
+    /** @brief Creates a CryptErase erase object.
+     *
+     *  @param[in] inDevPath - the linux device path for the block device.
+     *  @param[in](optional) cryptIface - a unique pointer to an cryptsetup
+     *  Interface object.
+     */
+    CryptErase(std::string_view devPath,
+               std::unique_ptr<estoraged::CryptsetupInterface> inCryptIface =
+                   std::make_unique<Cryptsetup>());
+
+    /** @brief searches and deletes all cryptographic keyslot
+     * and throws errors accordingly.
+     */
+    void doErase();
+
+  private:
+    std::unique_ptr<estoraged::CryptsetupInterface> cryptIface;
+};
+
+} // namespace estoraged
diff --git a/include/cryptsetupInterface.hpp b/include/cryptsetupInterface.hpp
index 25c69d0..8cc0469 100644
--- a/include/cryptsetupInterface.hpp
+++ b/include/cryptsetupInterface.hpp
@@ -96,6 +96,40 @@
      *  @returns 0 on success or negative errno value otherwise.
      */
     virtual int cryptDeactivate(struct crypt_device* cd, const char* name) = 0;
+
+    /** @brief Wrapper around crypt_keyslot_destory.
+     *  @details Used for mocking purposes.
+     *
+     *  @param[in] cd - crypt device handle, can not be NULL.
+     *  @param[in] keyslot requested key slot to destroy
+     *
+     *  @returns 0 on success or negative errno value otherwise.
+     */
+    virtual int cryptKeyslotDestroy(struct crypt_device* cd,
+                                    const int keyslot) = 0;
+
+    /** @breif Wapper around crypt_keyslot_max
+     *  @details Used for mocking purposes.
+     *
+     * @param type crypt device type
+     *
+     * @return slot count or negative errno otherwise if device
+     * does not support keyslots.
+     */
+    virtual int cryptKeySlotMax(const char* type) = 0;
+
+    /** @breif Wapper around crypt_keyslot_status
+     *  @details Used for mocking purposes.
+     *  Get information about particular key slot.
+     *
+     * @param cd crypt device handle
+     * @param keyslot requested keyslot to check or CRYPT_ANY_SLOT
+     *
+     * @return value defined by crypt_keyslot_info
+     *
+     */
+    virtual crypt_keyslot_info cryptKeySlotStatus(struct crypt_device* cd,
+                                                  int keyslot) = 0;
 };
 
 /** @class Cryptsetup
@@ -143,6 +177,22 @@
     {
         return crypt_deactivate(cd, name);
     }
+
+    int cryptKeyslotDestroy(struct crypt_device* cd, const int keyslot) override
+    {
+        return crypt_keyslot_destroy(cd, keyslot);
+    }
+
+    int cryptKeySlotMax(const char* type) override
+    {
+        return crypt_keyslot_max(type);
+    }
+
+    crypt_keyslot_info cryptKeySlotStatus(struct crypt_device* cd,
+                                          int keyslot) override
+    {
+        return crypt_keyslot_status(cd, keyslot);
+    }
 };
 
 /** @class CryptHandle
