diff --git a/benchmarks/bench.hs b/benchmarks/bench.hs
--- a/benchmarks/bench.hs
+++ b/benchmarks/bench.hs
@@ -133,7 +133,7 @@
                  , (NoiseK, 1)
                  , (NoiseX, 1)
                  ]
-      psks     = [Nothing, Just ""]
+      psks     = [Nothing, Just "This is my Austrian perspective!"]
       ciphers  = [WrapCipherType CTChaChaPoly1305, WrapCipherType CTAESGCM]
       dhs      = [WrapDHType DTCurve25519, WrapDHType DTCurve448]
       hashes   = [WrapHashType HTSHA256, WrapHashType HTSHA512, WrapHashType HTBLAKE2s, WrapHashType HTBLAKE2b]
diff --git a/cacophony.cabal b/cacophony.cabal
--- a/cacophony.cabal
+++ b/cacophony.cabal
@@ -1,5 +1,5 @@
 name:          cacophony
-version:       0.9.1
+version:       0.9.2
 synopsis:      A library implementing the Noise protocol.
 license:       PublicDomain
 license-file:  LICENSE
@@ -10,7 +10,7 @@
 category:      Cryptography
 build-type:    Simple
 cabal-version: >=1.10
-tested-with:   GHC == 7.10.3, GHC == 8.0.1
+tested-with:   GHC == 7.10.3, GHC == 8.0.2
 description:
   This library implements the <https://github.com/trevp/noise/blob/master/noise.md Noise>
   protocol.
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+# 0.9.2
+
+* Added ability to export raw symmetric keys
+
 # 0.9.1
 
 * Enabled llvm flag support on executables
diff --git a/src/Crypto/Noise/Cipher.hs b/src/Crypto/Noise/Cipher.hs
--- a/src/Crypto/Noise/Cipher.hs
+++ b/src/Crypto/Noise/Cipher.hs
@@ -56,6 +56,9 @@
   --   is truncated.
   cipherBytesToSym  :: ScrubbedBytes -> SymmetricKey c
 
+  -- | Exports a symmetric key. Use with care.
+  cipherSymToBytes  :: SymmetricKey c -> ScrubbedBytes
+
   -- | Exports a Ciphertext. The authentication tag follows the
   --   actual ciphertext.
   cipherTextToBytes :: Ciphertext c -> ScrubbedBytes
diff --git a/src/Crypto/Noise/Cipher/AESGCM.hs b/src/Crypto/Noise/Cipher/AESGCM.hs
--- a/src/Crypto/Noise/Cipher/AESGCM.hs
+++ b/src/Crypto/Noise/Cipher/AESGCM.hs
@@ -38,6 +38,7 @@
   cipherZeroNonce   = zeroNonce
   cipherIncNonce    = incNonce
   cipherBytesToSym  = bytesToSym
+  cipherSymToBytes  = symToBytes
   cipherTextToBytes = ctToBytes
   cipherBytesToText = bytesToCt
 
@@ -73,6 +74,10 @@
 bytesToSym :: ScrubbedBytes
            -> SymmetricKey AESGCM
 bytesToSym = SKAES . B.take 32
+
+symToBytes :: SymmetricKey AESGCM
+           -> ScrubbedBytes
+symToBytes (SKAES sk) = sk
 
 ctToBytes :: Ciphertext AESGCM
           -> ScrubbedBytes
diff --git a/src/Crypto/Noise/Cipher/ChaChaPoly1305.hs b/src/Crypto/Noise/Cipher/ChaChaPoly1305.hs
--- a/src/Crypto/Noise/Cipher/ChaChaPoly1305.hs
+++ b/src/Crypto/Noise/Cipher/ChaChaPoly1305.hs
@@ -34,6 +34,7 @@
   cipherZeroNonce   = zeroNonce
   cipherIncNonce    = incNonce
   cipherBytesToSym  = bytesToSym
+  cipherSymToBytes  = symToBytes
   cipherTextToBytes = ctToBytes
   cipherBytesToText = bytesToCt
 
@@ -76,6 +77,9 @@
 
 bytesToSym :: ScrubbedBytes -> SymmetricKey ChaChaPoly1305
 bytesToSym = SKCCP1305 . take 32
+
+symToBytes :: SymmetricKey ChaChaPoly1305 -> ScrubbedBytes
+symToBytes (SKCCP1305 sk) = sk
 
 ctToBytes :: Ciphertext ChaChaPoly1305 -> ScrubbedBytes
 ctToBytes (CTCCP1305 (ct, a)) = ct `mappend` convert a
diff --git a/src/Crypto/Noise/Hash/BLAKE2b.hs b/src/Crypto/Noise/Hash/BLAKE2b.hs
--- a/src/Crypto/Noise/Hash/BLAKE2b.hs
+++ b/src/Crypto/Noise/Hash/BLAKE2b.hs
@@ -46,11 +46,11 @@
     x02   = "\x02"
 
     hmac1 = M.hmac ck d :: M.HMAC H.Blake2b_512
-    temp  = convert . M.hmacGetDigest $ hmac1 :: ScrubbedBytes
+    temp  = convert hmac1 :: ScrubbedBytes
     hmac2 = M.hmac temp x01 :: M.HMAC H.Blake2b_512
     hmac3 = M.hmac temp (convert hmac2 `mappend` x02) :: M.HMAC H.Blake2b_512
-    ck'   = convert . M.hmacGetDigest $ hmac2
-    sk    = convert . M.hmacGetDigest $ hmac3
+    ck'   = convert hmac2
+    sk    = convert hmac3
 
 bytesToCKB :: ScrubbedBytes
             -> ChainingKey BLAKE2b
diff --git a/src/Crypto/Noise/Hash/BLAKE2s.hs b/src/Crypto/Noise/Hash/BLAKE2s.hs
--- a/src/Crypto/Noise/Hash/BLAKE2s.hs
+++ b/src/Crypto/Noise/Hash/BLAKE2s.hs
@@ -46,11 +46,11 @@
     x02   = "\x02"
 
     hmac1 = M.hmac ck d :: M.HMAC H.Blake2s_256
-    temp  = convert . M.hmacGetDigest $ hmac1 :: ScrubbedBytes
+    temp  = convert hmac1 :: ScrubbedBytes
     hmac2 = M.hmac temp x01 :: M.HMAC H.Blake2s_256
     hmac3 = M.hmac temp (convert hmac2 `mappend` x02) :: M.HMAC H.Blake2s_256
-    ck'   = convert . M.hmacGetDigest $ hmac2
-    sk    = convert . M.hmacGetDigest $ hmac3
+    ck'   = convert hmac2
+    sk    = convert hmac3
 
 bytesToCKS :: ScrubbedBytes
             -> ChainingKey BLAKE2s
diff --git a/src/Crypto/Noise/Hash/SHA256.hs b/src/Crypto/Noise/Hash/SHA256.hs
--- a/src/Crypto/Noise/Hash/SHA256.hs
+++ b/src/Crypto/Noise/Hash/SHA256.hs
@@ -43,11 +43,11 @@
     x02   = "\x02"
 
     hmac1 = M.hmac ck d :: M.HMAC H.SHA256
-    temp  = convert . M.hmacGetDigest $ hmac1 :: ScrubbedBytes
+    temp  = convert hmac1 :: ScrubbedBytes
     hmac2 = M.hmac temp x01 :: M.HMAC H.SHA256
     hmac3 = M.hmac temp (convert hmac2 `mappend` x02) :: M.HMAC H.SHA256
-    ck'   = convert . M.hmacGetDigest $ hmac2
-    sk    = convert . M.hmacGetDigest $ hmac3
+    ck'   = convert hmac2
+    sk    = convert hmac3
 
 bytesToCK :: ScrubbedBytes -> ChainingKey SHA256
 bytesToCK = HCKSHA256
diff --git a/src/Crypto/Noise/Hash/SHA512.hs b/src/Crypto/Noise/Hash/SHA512.hs
--- a/src/Crypto/Noise/Hash/SHA512.hs
+++ b/src/Crypto/Noise/Hash/SHA512.hs
@@ -43,11 +43,11 @@
     x02   = "\x02"
 
     hmac1 = M.hmac ck d :: M.HMAC H.SHA512
-    temp  = convert . M.hmacGetDigest $ hmac1 :: ScrubbedBytes
+    temp  = convert hmac1 :: ScrubbedBytes
     hmac2 = M.hmac temp x01 :: M.HMAC H.SHA512
     hmac3 = M.hmac temp (convert hmac2 `mappend` x02) :: M.HMAC H.SHA512
-    ck'   = convert . M.hmacGetDigest $ hmac2
-    sk    = convert . M.hmacGetDigest $ hmac3
+    ck'   = convert hmac2
+    sk    = convert hmac3
 
 bytesToCK :: ScrubbedBytes -> ChainingKey SHA512
 bytesToCK = HCKSHA512
