diff --git a/examples/hmac.rs b/examples/hmac.rs
new file mode 100644
index 0000000..97184f7
--- /dev/null
+++ b/examples/hmac.rs
@@ -0,0 +1,55 @@
+#![no_std]
+
+use core::fmt::Write;
+use libtock::hmac::{HmacDataBuffer, HmacDestBuffer, HmacKeyBuffer};
+use libtock::result::TockResult;
+use libtock::syscalls;
+
+#[libtock::main]
+async fn main() -> TockResult<()> {
+    let mut drivers = libtock::retrieve_drivers()?;
+    let mut console = drivers.console.create_console();
+    writeln!(console, "Starting HMAC example")?;
+    let hmac_driver = drivers.hmac.init_driver()?;
+
+    writeln!(console, "Loading in 0 key")?;
+    let mut key_buffer = HmacKeyBuffer::default();
+    let _key_buffer = hmac_driver.init_key_buffer(&mut key_buffer)?;
+    writeln!(console, "  done")?;
+
+    writeln!(console, "Creating data buffer")?;
+    let mut data_buffer = HmacDataBuffer::default();
+    let data: &[u8; 72] =
+        b"A language empowering everyone to build reliable and efficient software.";
+
+    for (i, d) in data.iter().enumerate() {
+        data_buffer.buffer[i] = *d;
+    }
+    let _data_buffer = hmac_driver.init_data_buffer(&mut data_buffer)?;
+    writeln!(console, "  done")?;
+
+    writeln!(console, "Creating dest buffer")?;
+    let mut dest_buffer = HmacDestBuffer::default();
+    let dest_buffer = hmac_driver.init_dest_buffer(&mut dest_buffer)?;
+    writeln!(console, "  done")?;
+
+    let mut temp_buffer = [0; libtock::hmac::DEST_BUFFER_SIZE];
+
+    writeln!(console, "Setting callback and running")?;
+    let mut callback = |_result, _digest| {
+        writeln!(console, "HMAC Complete, printing digest").unwrap();
+        dest_buffer.read_bytes(&mut temp_buffer[..]);
+
+        for buf in temp_buffer.iter().take(libtock::hmac::DEST_BUFFER_SIZE) {
+            write!(console, "{:x}", *buf).unwrap();
+        }
+    };
+
+    let _subscription = hmac_driver.subscribe(&mut callback)?;
+
+    hmac_driver.run()?;
+
+    loop {
+        unsafe { syscalls::raw::yieldk() };
+    }
+}
