diff options
Diffstat (limited to 'SecretKey.hs')
-rw-r--r-- | SecretKey.hs | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/SecretKey.hs b/SecretKey.hs index 45d9680..8dc2ada 100644 --- a/SecretKey.hs +++ b/SecretKey.hs @@ -6,19 +6,24 @@ module SecretKey where import Types +import Share import qualified Gpg import qualified Data.ByteString as B import System.IO import System.Posix.IO -getSecretKey :: SecretKeySource -> IO SecretKey -getSecretKey (GpgKey kid) = Gpg.getSecretKey kid -getSecretKey (KeyFile f) = SecretKey <$> B.readFile f +getSecretKey :: SecretKeySource -> IO (SecretKeySource, SecretKey) +getSecretKey sks = do + sk <- case sks of + GpgKey kid -> Gpg.getSecretKey kid + KeyFile f -> SecretKey <$> B.readFile f + return (sks, sk) -- | Can throw exception if the secret key already exists. -writeSecretKey :: SecretKeySource -> SecretKey -> IO () -writeSecretKey (GpgKey _) secretkey = Gpg.writeSecretKey secretkey -writeSecretKey (KeyFile f) (SecretKey b) = do +writeSecretKey :: Distinguisher -> SecretKey -> IO () +writeSecretKey (Distinguisher (GpgKey _)) secretkey = Gpg.writeSecretKey secretkey +writeSecretKey AnyGpgKey secretkey = Gpg.writeSecretKey secretkey +writeSecretKey (Distinguisher (KeyFile f)) (SecretKey b) = do fd <- openFd f WriteOnly (Just 0o666) (defaultFileFlags { exclusive = True } ) h <- fdToHandle fd |