diff --git a/Makefile.am b/Makefile.am
index 7455b4d..bd7e932 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -8,7 +8,7 @@
 	static_handler.cpp \
 	lpc_handler.cpp \
 	pci_handler.cpp \
-	hash_handler.cpp
+	file_handler.cpp
 libfirmwareblob_la_LDFLAGS = \
 	$(PHOSPHOR_LOGGING_LIBS) \
 	-version-info 0:0:0 -shared
diff --git a/configure.ac b/configure.ac
index 85ee568..12cf922 100644
--- a/configure.ac
+++ b/configure.ac
@@ -111,6 +111,10 @@
 AS_IF([test "x$STATIC_HANDLER_STAGED_NAME" == "x"], [STATIC_HANDLER_STAGED_NAME="/run/initramfs/bmc-image"])
 AC_DEFINE_UNQUOTED([STATIC_HANDLER_STAGED_NAME], ["$STATIC_HANDLER_STAGED_NAME"], [The file to use for staging the firmware update.])
 
+AC_ARG_VAR(HASH_FILENAME, [The file to use for the hash provided.])
+AS_IF([test "x$HASH_FILENAME" == "x"], [HASH_FILENAME="/tmp/bmc.sig"])
+AC_DEFINE_UNQUOTED([HASH_FILENAME], ["$HASH_FILENAME"], [The file to use for the hash provided.])
+
 # Create configured output
 AC_CONFIG_FILES([Makefile test/Makefile])
 AC_OUTPUT
diff --git a/file_handler.cpp b/file_handler.cpp
new file mode 100644
index 0000000..7aa0e65
--- /dev/null
+++ b/file_handler.cpp
@@ -0,0 +1,75 @@
+#include "file_handler.hpp"
+
+#include <cstdint>
+#include <memory>
+#include <string>
+#include <vector>
+
+namespace blobs
+{
+
+bool FileHandler::open(const std::string& path)
+{
+    this->path = path;
+
+    if (file.is_open())
+    {
+        /* This wasn't properly closed somehow.
+         * TODO: Throw an error or just reset the state?
+         */
+        return false;
+    }
+
+    /* using ofstream no need to set out */
+    file.open(filename, std::ios::binary);
+    if (file.bad())
+    {
+        /* TODO: Oh no! Care about this. */
+        return false;
+    }
+
+    /* We were able to open the file for staging.
+     * TODO: We'll need to do other stuff to eventually.
+     */
+    return true;
+}
+
+void FileHandler::close()
+{
+    if (file.is_open())
+    {
+        file.close();
+    }
+    return;
+}
+
+bool FileHandler::write(std::uint32_t offset,
+                        const std::vector<std::uint8_t>& data)
+{
+    if (!file.is_open())
+    {
+        return false;
+    }
+
+    /* We could track this, but if they write in a scattered method, this is
+     * easier.
+     */
+    file.seekp(offset, std::ios_base::beg);
+    if (!file.good())
+    {
+        /* the documentation wasn't super clear on fail vs bad in these cases,
+         * so let's only be happy with goodness.
+         */
+        return false;
+    }
+
+    file.write(reinterpret_cast<const char*>(data.data()), data.size());
+    if (!file.good())
+    {
+        return false;
+    }
+
+    return true;
+}
+
+} // namespace blobs
diff --git a/file_handler.hpp b/file_handler.hpp
new file mode 100644
index 0000000..c419949
--- /dev/null
+++ b/file_handler.hpp
@@ -0,0 +1,43 @@
+#pragma once
+
+#include "image_handler.hpp"
+
+#include <cstdint>
+#include <fstream>
+#include <memory>
+#include <string>
+#include <vector>
+
+namespace blobs
+{
+
+class FileHandler : public ImageHandlerInterface
+{
+  public:
+    /**
+     * Create a FileHandler.  This object is basically a filewriter.
+     *
+     * @param[in] filename - file to use for the contents, fully
+     * qualified file system path.
+     */
+    explicit FileHandler(const std::string& filename) : filename(filename)
+    {
+    }
+
+    bool open(const std::string& path) override;
+    void close() override;
+    bool write(std::uint32_t offset,
+               const std::vector<std::uint8_t>& data) override;
+
+  private:
+    /** the active hash path, ignore. */
+    std::string path;
+
+    /** The file handle. */
+    std::ofstream file;
+
+    /** The filename (including path) to use to write bytes. */
+    std::string filename;
+};
+
+} // namespace blobs
diff --git a/hash_handler.cpp b/hash_handler.cpp
deleted file mode 100644
index 820ffbf..0000000
--- a/hash_handler.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "hash_handler.hpp"
-
-#include <cstdint>
-#include <memory>
-#include <string>
-#include <vector>
-
-namespace blobs
-{
-
-bool HashFileHandler::open(const std::string& path)
-{
-    this->path = path;
-    return false;
-}
-
-void HashFileHandler::close()
-{
-    return;
-}
-
-bool HashFileHandler::write(std::uint32_t offset,
-                            const std::vector<std::uint8_t>& data)
-{
-    return false;
-}
-
-} // namespace blobs
diff --git a/hash_handler.hpp b/hash_handler.hpp
deleted file mode 100644
index 66f68a4..0000000
--- a/hash_handler.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#pragma once
-
-#include "image_handler.hpp"
-
-#include <cstdint>
-#include <memory>
-#include <string>
-#include <vector>
-
-namespace blobs
-{
-
-class HashFileHandler : public ImageHandlerInterface
-{
-  public:
-    /**
-     * Create a HashFileHandler.
-     */
-    HashFileHandler() = default;
-
-    bool open(const std::string& path) override;
-    void close() override;
-    bool write(std::uint32_t offset,
-               const std::vector<std::uint8_t>& data) override;
-
-  private:
-    std::string path;
-};
-
-} // namespace blobs
diff --git a/main.cpp b/main.cpp
index 7d87f27..9540890 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,7 +1,7 @@
 #include "config.h"
 
+#include "file_handler.hpp"
 #include "firmware_handler.hpp"
-#include "hash_handler.hpp"
 #include "image_handler.hpp"
 #include "lpc_handler.hpp"
 #include "pci_handler.hpp"
@@ -16,7 +16,7 @@
 {
 namespace
 {
-HashFileHandler hashHandler;
+FileHandler hashHandler(HASH_FILENAME);
 StaticLayoutHandler staticLayoutHandler(STATIC_HANDLER_STAGED_NAME);
 
 #ifdef ENABLE_LPC_BRIDGE
@@ -54,15 +54,9 @@
 
 } // namespace blobs
 
-#ifdef __cplusplus
 extern "C" {
-#endif
-
 std::unique_ptr<blobs::GenericBlobInterface> createHandler();
-
-#ifdef __cplusplus
 }
-#endif
 
 std::unique_ptr<blobs::GenericBlobInterface> createHandler()
 {
