From aa097a787d8ad39d5fcee3b6b9ded6407b14af15 Mon Sep 17 00:00:00 2001 From: Jean-Paul Calderone <exarkun@twistedmatrix.com> Date: Thu, 1 Jun 2023 12:24:37 -0400 Subject: [PATCH] add a command-line tool for encoding data to SDMF shares --- encode-ssk/Main.hs | 29 +++++++++++++++++++++++++++++ tahoe-ssk.cabal | 16 ++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 encode-ssk/Main.hs diff --git a/encode-ssk/Main.hs b/encode-ssk/Main.hs new file mode 100644 index 0000000..cc50fb6 --- /dev/null +++ b/encode-ssk/Main.hs @@ -0,0 +1,29 @@ +module Main where + +import qualified Crypto.PubKey.RSA as RSA +import Data.Binary (encode) +import Data.ByteString.Base32 (encodeBase32Unpadded) +import qualified Data.ByteString.Lazy as LB +import qualified Data.Text as T +import qualified Data.Text.IO as T +import System.IO (stdin) +import qualified Tahoe.SDMF as SDMF +import qualified Tahoe.SDMF.Keys as SDMF.Keys + +main :: IO () +main = do + plaintext <- LB.hGetContents stdin + keypair <- SDMF.Keys.KeyPair . snd <$> RSA.generate (2048 `div` 8) e + Just iv <- SDMF.randomIV + + let ciphertext = SDMF.encrypt keypair iv plaintext + (shares, writeCap) <- SDMF.encode keypair iv 1 3 5 ciphertext + let shareBytes = encode <$> shares + + let si = SDMF.Keys.unStorageIndex . SDMF.verifierStorageIndex . SDMF.readerVerifier . SDMF.writerReader $ writeCap + + mapM_ (uncurry (writeShare si)) (zip [0 :: Int ..] shareBytes) + T.putStrLn (SDMF.dangerRealShow (SDMF.SDMFWriter writeCap)) + where + e = 0x10001 + writeShare si shnum = LB.writeFile $ (T.unpack . T.toLower . encodeBase32Unpadded $ si) <> "." <> show shnum diff --git a/tahoe-ssk.cabal b/tahoe-ssk.cabal index 68fbb5a..bd04c33 100644 --- a/tahoe-ssk.cabal +++ b/tahoe-ssk.cabal @@ -164,3 +164,19 @@ executable make-keypairs , cryptonite , tahoe-ssk , x509 + +executable encode-ssk + import: + warnings + , language + + main-is: Main.hs + hs-source-dirs: encode-ssk + build-depends: + , base + , base32 + , binary + , bytestring + , cryptonite + , tahoe-ssk + , text -- GitLab