diff --git a/secp256k1.cabal b/secp256k1.cabal
--- a/secp256k1.cabal
+++ b/secp256k1.cabal
@@ -1,5 +1,5 @@
 name:                secp256k1
-version:             0.1.5
+version:             0.1.6
 synopsis:            secp256k1 bindings for Haskell
 description:         Please see README.md
 homepage:            http://github.com/haskoin/secp256k1#readme
diff --git a/src/Crypto/Secp256k1.hs b/src/Crypto/Secp256k1.hs
--- a/src/Crypto/Secp256k1.hs
+++ b/src/Crypto/Secp256k1.hs
@@ -14,13 +14,19 @@
 module Crypto.Secp256k1
 ( -- * Messages
   Msg, msg, getMsg
-  -- * Secret Keys
-, SecKey, secKey, getSecKey, importSecKey, exportSecKey, pubKey
-  -- * Public Keys
+  -- * Secret Key
+, SecKey, importSecKey, exportSecKey, pubKey
+  -- ** Raw Secret Key
+, secKey, getSecKey
+  -- * Public Key
 , PubKey, importPubKey, exportPubKey
-  -- * Signatures
+  -- ** Raw Public Key
+, unsafePubKey, getPubKey
+  -- * Signature
 , Sig, importSig, exportSig
 , signMsg, verifySig
+  -- ** Raw Signature
+, unsafeSig, getSig
   -- * Addition & Multiplication
 , Tweak, tweak, getTweak
 , tweakAddSecKey, tweakMulSecKey
@@ -168,6 +174,24 @@
         if isSuccess ret
             then return $ Just $ SecKey fp
             else return $ Nothing
+    | otherwise = Nothing
+
+-- | Create internal public key from raw 64-byte 'ByteString'. Unsafe!
+unsafePubKey :: ByteString -> Maybe PubKey
+unsafePubKey bs
+    | BS.length bs == 64 = unsafePerformIO $ do
+        fp <- mallocForeignPtr
+        withForeignPtr fp $ \p -> poke p (PubKey64 bs)
+        return $ Just $ PubKey fp
+    | otherwise = Nothing
+
+-- | Create internal signature from raw 64-byte 'ByteString'. Unsafe!
+unsafeSig :: ByteString -> Maybe Sig
+unsafeSig bs
+    | BS.length bs == 64 = unsafePerformIO $ do
+        fp <- mallocForeignPtr
+        withForeignPtr fp $ \p -> poke p (Sig64 bs)
+        return $ Just $ Sig fp
     | otherwise = Nothing
 
 -- | Create internal tweak data from 32-byte 'ByteString'.
