summaryrefslogtreecommitdiffhomepage
path: root/SecretKey.hs
diff options
context:
space:
mode:
Diffstat (limited to 'SecretKey.hs')
-rw-r--r--SecretKey.hs17
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