diff --git a/ChangeLog.md b/ChangeLog.md
new file mode 100644
--- /dev/null
+++ b/ChangeLog.md
@@ -0,0 +1,5 @@
+# Revision history for eccrypto-ed25519-bindings
+
+## 0.1.0.0 -- 2020-01-07
+
+* First version. Released on an unsuspecting world.
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 20[19..], Marcel Fourné
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Marcel Fourné nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/eccrypto-ed25519-bindings.cabal b/eccrypto-ed25519-bindings.cabal
new file mode 100644
--- /dev/null
+++ b/eccrypto-ed25519-bindings.cabal
@@ -0,0 +1,37 @@
+-- Initial eccrypto-ed25519-bindings.cabal generated by cabal init.  For
+-- further documentation, see http://haskell.org/cabal/users-guide/
+
+name:                eccrypto-ed25519-bindings
+version:             0.1.0.0
+synopsis:            provides "ed25519" API using "eccrypto"
+description:         These are bindings providing the functionality of the "ed25519" package using a pure Haskell implementation from the "eccrypto" package.
+license:             BSD3
+license-file:        LICENSE
+author:              Marcel Fourné
+maintainer:          haskell@marcelfourne.de
+copyright:           Marcel Fourné
+category:            Cryptography
+build-type:          Simple
+extra-source-files:  ChangeLog.md
+cabal-version:       >=1.10
+
+library
+  exposed-modules:
+        Crypto.Sign.Ed25519
+  -- other-modules:
+  -- other-extensions:
+  build-depends:
+                base >=4.11 && <4.13
+              , bytestring >= 0.10 && < 0.11
+              , eccrypto >=0.2.0 && <0.3
+
+  hs-source-dirs:      src
+  default-language:    Haskell2010
+  ghc-options:
+              -Wall
+              -Wincomplete-uni-patterns
+              -O2
+
+source-repository head
+  type:     git
+  location: https://github.com/mfourne/eccrypto-ed25519-bindings.git
diff --git a/src/Crypto/Sign/Ed25519.hs b/src/Crypto/Sign/Ed25519.hs
new file mode 100644
--- /dev/null
+++ b/src/Crypto/Sign/Ed25519.hs
@@ -0,0 +1,119 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Crypto.Sign.Ed25519
+-- Copyright   :  (c) Marcel Fourné 20[19..]
+-- License     :  BSD3
+-- Maintainer  :  Marcel Fourné (haskell@marcelfourne.de)
+-- Stability   :  stable
+-- Portability :  Good
+--
+-- original implementation of this API is by Austin Seipp and can be found under: https://hackage.haskell.org/package/ed25519
+--
+-----------------------------------------------------------------------------
+
+{-# LANGUAGE Safe #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module Crypto.Sign.Ed25519
+       (
+         PublicKey(..)
+       , SecretKey(..)
+       , createKeypair
+       , createKeypairFromSeed_
+       , createKeypairFromSeed
+       , toPublicKey
+
+       , sign
+       , verify
+
+       , Signature(..)
+       , dsign
+       , dverify
+
+       , sign'
+       , verify'
+
+       ) where
+
+import safe Prelude (Eq,Show, Ord, IO, Either(Right,Left), Maybe, Bool, return, undefined, error, (==))
+import safe GHC.Generics (Generic)
+import safe qualified Crypto.ECC.Ed25519.Sign as S
+import safe qualified Crypto.ECC.Ed25519.Internal.Ed25519 as I
+import safe qualified Data.ByteString as BS
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+newtype PublicKey = PublicKey { unPublicKey :: BS.ByteString
+                              }
+        deriving (Eq, Show, Ord, Generic)
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+newtype SecretKey = SecretKey { unSecretKey :: BS.ByteString
+                              }
+        deriving (Eq, Show, Ord, Generic)
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+createKeypair :: IO (PublicKey, SecretKey)
+createKeypair = do
+  a <- S.genkeys
+  case a of
+    Right (I.SecKeyBytes sk, pk) -> return (PublicKey pk, SecretKey sk)
+    Left e -> error e
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+createKeypairFromSeed_ :: BS.ByteString -> Maybe (PublicKey, SecretKey)
+createKeypairFromSeed_ = undefined
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+createKeypairFromSeed :: BS.ByteString -> (PublicKey, SecretKey)
+createKeypairFromSeed = undefined
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+toPublicKey  :: SecretKey -> PublicKey
+toPublicKey sk = let (SecretKey sk') = sk
+                     sk'' = I.SecKeyBytes sk'
+                     a = S.publickey sk''
+  in case a of
+       Right pk -> PublicKey pk
+       Left e -> error e
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+sign :: SecretKey -> BS.ByteString -> BS.ByteString
+sign sk m = let SecretKey sk' = sk
+                a = S.sign (I.SecKeyBytes sk') m
+            in case a of
+                 Right sigm -> sigm
+                 Left e -> error e
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+verify :: PublicKey -> BS.ByteString -> Bool
+verify pk m = let PublicKey pk' = pk
+              in S.verify pk' m == Right I.SigOK
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+newtype Signature = Signature { unSignature :: BS.ByteString
+                              }
+        deriving (Eq, Show, Ord)
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+dsign :: SecretKey -> BS.ByteString -> Signature
+dsign sk m = let SecretKey sk' = sk
+                 a = S.dsign (I.SecKeyBytes sk') m
+             in case a of
+                  Right sig -> Signature sig
+                  Left e -> error e
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+dverify :: PublicKey -> BS.ByteString -> Signature -> Bool
+dverify pk m sig = let PublicKey pk' = pk
+                       Signature sig' = sig
+                   in S.dverify pk' sig' m == Right I.SigOK
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+sign' :: SecretKey -> BS.ByteString -> Signature
+sign' sk m = dsign sk m
+
+-- | http://hackage.haskell.org/package/ed25519-0.0.5.0/docs/Crypto-Sign-Ed25519.html
+verify' :: PublicKey -> BS.ByteString -> Signature -> Bool
+verify' pk m sig = dverify pk m sig
