packages feed

ginsu 0.8.2 → 0.8.2.1

raw patch · 3 files changed

+26/−26 lines, 3 files

Files

Gale/Gale.hs view
@@ -21,7 +21,6 @@ import Data.List import Data.Maybe import System.Time-import System.Timeout (timeout)  import Control.Concurrent import Control.Concurrent.Async (async, wait)@@ -189,27 +188,29 @@                 ct <- getClockTime                 let ef = \xs -> ((fromString "_ginsu.timestamp",FragmentTime ct):(fromString "_ginsu.spumbuster", FragmentText (packString (bsToHex hash))):xs)                 p' <- galeDecryptPuff gc Puff { signature = [], cats = cat, fragments = ef puff}-                np <- case [(kh, k, data_, sig)-                           | RequestingKey kh k data_ sig <- signature p'] of-                      [] -> return p'-                      (kh, k, data_, sig):_ -> do-                        res <- timeout 4000000 $ wait kh-                        let unver = p' { signature = [Unverifyable k] }-                        case res of-                          Just x -> case x of-                            DestEncrypted (k':_) -> do-                              mkey <- verifySignature k' data_ sig-                              return $ p' { signature = [mkey] }-                            _ -> return unver-                          Nothing -> return unver-                writeChan (channel gc) np-                case getFragmentData np f_answerKey' of-                    Just d -> putKey (keyCache gc) d-                    Nothing -> return ()-                case (cats np,getFragmentString np f_answerKeyError') of-                    ([Category (n,d)],Just _) | "_gale.key." `isPrefixOf` n -> noKey (keyCache gc) (catShowNew $ Category (drop 10 n,d))-                    (_,_) -> return ()-                maybeReplyToKeyQuery gc np+                case [(kh, k, data_, sig)+                     | RequestingKey kh k data_ sig <- signature p'] of+                  [] -> finishPuff p'+                  (kh, k, data_, sig):_ -> void $ forkIO $ do+                    let encs = [s | s@(Encrypted _) <- signature p']+                        unver = p' { signature = Unverifyable k:encs }+                    dest <- wait kh+                    np <- case dest of+                      DestEncrypted (k':_) -> do+                        mkey <- verifySignature k' data_ sig+                        return $ p' { signature = mkey:encs }+                      _ -> return unver+                    finishPuff np+              where+                finishPuff np = do+                  writeChan (channel gc) np+                  case getFragmentData np f_answerKey' of+                      Just d -> putKey (keyCache gc) d+                      Nothing -> return ()+                  case (cats np,getFragmentString np f_answerKeyError') of+                      ([Category (n,d)],Just _) | "_gale.key." `isPrefixOf` n -> noKey (keyCache gc) (catShowNew $ Category (drop 10 n,d))+                      (_,_) -> return ()+                  maybeReplyToKeyQuery gc np  maybeReplyToKeyQuery :: GaleContext -> Puff -> IO () maybeReplyToKeyQuery gc p | Just kn <- getFragmentString p f_questionKey = do
Gale/KeyCache.hs view
@@ -73,8 +73,7 @@ numberKeys kc = fmap Map.size $ readMVar (kkeyCache kc)  keyIsPubKey :: HasFragmentList a => a -> Bool-keyIsPubKey k = not (hasFragment k f_rsaPrivateExponent)-                && hasFragment k f_rsaExponent+keyIsPubKey k = hasFragment k f_rsaExponent keyIsPrivKey :: HasFragmentList a => a -> Bool keyIsPrivKey k =  (hasFragment k f_rsaPrivateExponent) keyIsPublic :: HasFragmentList a => a -> Bool@@ -88,7 +87,7 @@  keyToRSAElems :: Monad m => Key -> m (RSAElems BS.ByteString) keyToRSAElems fl = do-    if not (keyIsPrivKey fl) then fail "key does not have bits" else do+    if not (keyIsPubKey fl) then fail "key does not have bits" else do     n <- getFragmentData fl f_rsaModulus     e <- getFragmentData fl f_rsaExponent     if not (keyIsPrivKey fl) then
ginsu.cabal view
@@ -1,6 +1,6 @@ -- vim:et Name:		ginsu-Version:	0.8.2+Version:	0.8.2.1 Copyright:	2002-2009 John Meacham <john@repetae.net>                 2011-2012 Dylan Simon <dylan@dylex.net> Author:		John Meacham <john@foo.net>