packages feed

apache-md5 0.6.0.0 → 0.6.1.0

raw patch · 9 files changed

+80/−21 lines, 9 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

ChangeLog.md view
@@ -1,5 +1,16 @@ # ChangeLog / ReleaseNotes ++## Version 0.6.1.0++* Function `mkSalt` rejects empty `ByteString` and returns `Nothing` for it.+* Using `NoImplicitPrelude` language extension.+* Example program is once again compilable.+* Minor documentation updates including `README.md`.+* Uploaded to [Hackage][]:+  <http://hackage.haskell.org/package/apache-md5-0.6.1.0>++ ## Version 0.6.0.0  * Introducing Salt newtype wrapper to guarantee that it consists of only
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2009, 2010, 2012, 2013, Peter Trsko+Copyright (c) 2009, 2010, 2012 - 2014, Peter Trsko  All rights reserved. 
README.md view
@@ -51,7 +51,8 @@ import qualified Data.ByteString as BS (index, pack) import qualified Data.ByteString.Char8 as C8 (concat, pack, putStrLn, singleton)     -- bytestring package http://hackage.haskell.org/package/bytestring-import Data.Digest.ApacheMD5 (Salt, alpha64, apacheMD5, mkSalt, unSalt)+import Data.Digest.ApacheMD5 (Salt, apacheMD5, mkSalt, unSalt)+import Data.Digest.ApacheMD5.Internal (alpha64)   htpasswdEntry :: String -> String -> Salt -> ByteString
apache-md5.cabal view
@@ -1,5 +1,5 @@ name:                 apache-md5-version:              0.6.0.0+version:              0.6.1.0 synopsis:             Apache specific MD5 digest algorighm. description:   Haskell implementation of Apache HTTP server specific MD5 digest algorithm@@ -140,4 +140,4 @@ source-repository this   type:                 git   location:             git://github.com/trskop/apache-md5.git-  tag:                  v0.6.0.0+  tag:                  v0.6.1.0
example.hs view
@@ -23,7 +23,8 @@ import qualified Data.ByteString as BS (index, pack) import qualified Data.ByteString.Char8 as C8 (concat, pack, putStrLn, singleton)     -- bytestring package http://hackage.haskell.org/package/bytestring-import Data.Digest.ApacheMD5 (Salt, alpha64, apacheMD5, mkSalt, unSalt)+import Data.Digest.ApacheMD5 (Salt, apacheMD5, mkSalt, unSalt)+import Data.Digest.ApacheMD5.Internal (alpha64)   htpasswdEntry :: String -> String -> Salt -> ByteString
src/Data/Digest/ApacheMD5.hs view
@@ -1,10 +1,12 @@+{-# LANGUAGE NoImplicitPrelude #-} -- | -- Module:      Data.Digest.ApacheMD5 -- Copyright:   (c) 2009, 2010, 2012 - 2014 Peter Trško -- License:     BSD3 -- Maintainer:  Peter Trško <peter.trsko@gmail.com> -- Stability:   Provisional--- Portability: non-portable (depends on non-portable internal module)+-- Portability: non-portable (NoImplicitPrelude, depends on non-portable+--              internal module) -- -- ApacheMD5 is one of the hash algorithms used by Apache HTTP server for basic -- authentication. It is Apache specific, but e.g. nginx supports this@@ -27,10 +29,10 @@     -- usage.  See also @htpasswd@ documentation on     -- <http://httpd.apache.org/docs/current/programs/htpasswd.html>. -    -- ** Example: Creating htpasswd-like entry+    -- * Example: Creating htpasswd-like entry     ---    -- | Output of this function is not identical to what @htpasswd@ does.  To-    -- create @htpasswd@-like entry do:+    -- | Output of 'apacheMD5' function is not identical to what @htpasswd@+    -- does.  To create @htpasswd@-like entry one needs to do:     --     -- > import Data.ByteString (ByteString)     -- > import qualified Data.ByteString.Char8 as C8 (concat, pack, singleton)@@ -54,8 +56,12 @@     )   where +import Data.Bool ((&&), not, otherwise)+import Data.Function ((.), ($))+import Data.Maybe (Maybe(Nothing, Just))+ import Data.ByteString (ByteString)-import qualified Data.ByteString as BS (all)+import qualified Data.ByteString as BS (all, null)  import Data.Digest.ApacheMD5.Internal (Password, Salt(Salt)) import qualified Data.Digest.ApacheMD5.Internal as Internal@@ -66,13 +72,16 @@     )  --- | Smart constructor for 'Salt'. It tests all octets to be members of--- 'Data.Digest.ApacheMD5.Internal.alpha64' by using 'Internal.isAlpha64'--- predicate.+-- | Smart constructor for 'Salt'. It tests that provided 'ByteString' is not+-- empty and that all its octets are members of alphabet used for base 64+-- encoding 'Data.Digest.ApacheMD5.Internal.alpha64' and it uses+-- 'Internal.isAlpha64' predicate to do so. mkSalt :: ByteString -> Maybe Salt mkSalt str-  | BS.all Internal.isAlpha64 str = Just $ Salt str-  | otherwise                     = Nothing+  | isValidSalt = Just $ Salt str+  | otherwise   = Nothing+  where+    isValidSalt = not (BS.null str) && BS.all Internal.isAlpha64 str  -- | Unpack 'Salt' in to 'ByteString'. unSalt :: Salt -> ByteString
src/Data/Digest/ApacheMD5/Internal.hs view
@@ -12,6 +12,7 @@ #endif  {-# LANGUAGE ForeignFunctionInterface #-}+{-# LANGUAGE NoImplicitPrelude #-}  -- | -- Module:      Data.Digest.ApacheMD5.Internal@@ -20,7 +21,7 @@ -- Maintainer:  Peter Trško <peter.trsko@gmail.com> -- Stability:   Provisional -- Portability: non-portable (BangPatterns, CPP, DeriveDataTypeable,---              DeriveGeneric, ForeignFunctionInterface)+--              DeriveGeneric, ForeignFunctionInterface, NoImplicitPrelude) -- -- Internal and unsafe functions used for implementing Apache MD5 -- hash algorithm.@@ -47,12 +48,27 @@     )   where +import Prelude+    ( Integral(div, mod, rem, toInteger)+    , Num((+), fromInteger)+    , Read+    , Show+    , fromIntegral+    )+ import Control.Applicative (liftA2) import Control.Monad (void) import Data.Bits (Bits((.|.), (.&.), shiftL, shiftR))+import Data.Bool (Bool, (||), (&&), otherwise)+import Data.Eq (Eq((==)))+import Data.Function ((.), ($))+import Data.Int (Int)+import Data.List (concatMap, foldl1, iterate, map, replicate, take)+import Data.Ord (Ord((<), (<=), (>), (>=))) import Data.Word (Word8, Word16, Word32) import Foreign (Ptr) import Foreign.C.Types (CChar(..), CULong(..))+import System.IO (IO) import System.IO.Unsafe (unsafePerformIO)  #ifdef WITH_deepseq@@ -91,7 +107,7 @@  -- | Apache MD5 hash salt. When constructing @.htpasswd@ file it is necessary -- for the salt to be consisting of octets from 'alpha64' \"set\". This newtype--- along with 'mkSalt' smart constructor are here to ensure such invariant.+-- along with @mkSalt@ smart constructor are here to ensure such invariant. newtype Salt = Salt ByteString   deriving     ( Eq, Ord, Read, Show
test/benchmark-main.hs view
@@ -1,9 +1,16 @@ {-# LANGUAGE BangPatterns #-}+{-# LANGUAGE NoImplicitPrelude #-} module Main     where -import Control.Applicative  ((<$>))-import Control.Monad (replicateM)+import Control.Applicative ((<$>))+import Control.Monad (Monad((>>=), return), replicateM)+import Data.Bool (Bool(True))+import Data.Function ((.), ($))+import Data.Int (Int)+import Data.String (String)+import Data.Tuple (uncurry)+import System.IO (IO)  import Data.ByteString (ByteString) 
test/unit-tests-main.hs view
@@ -1,13 +1,27 @@+{-# LANGUAGE NoImplicitPrelude #-} module Main (main)     where +import Prelude (Show(show), error)+ import Control.Arrow (Arrow(second))-import Control.Monad (replicateM, replicateM_, void, when)+import Control.Monad+    ( Monad((>>=), return)+    , replicateM+    , replicateM_+    , void+    , when+    ) import Control.Monad.IO.Class (liftIO) import Control.Monad.Random import qualified Data.ByteString.Char8 as C8-import Data.Function (on)+import Data.Eq (Eq((==), (/=)))+import Data.Function ((.), ($), on)+import Data.Int (Int)+import Data.List ((++), break, concat, drop, dropWhile, takeWhile, unlines)+import Data.String (String) import System.Exit (ExitCode(..))+import System.IO (IO) import System.Process (readProcessWithExitCode) import Test.Framework import Test.Framework.Providers.HUnit (testCase)