This commit is contained in:
Dmitry Zuikov 2024-07-26 10:56:37 +03:00
parent 9d605e3794
commit 4c30609815
3 changed files with 23 additions and 5 deletions

View File

@ -3,6 +3,7 @@ module HBS2.CLI.Run.Internal.GroupKey where
import HBS2.CLI.Prelude hiding (mapMaybe)
import HBS2.Data.Types.Refs
import HBS2.Data.Types.SmallEncryptedBlock
import HBS2.Storage.Operations.Class
import HBS2.Storage.Operations.ByteString
import Data.Maybe
@ -12,6 +13,7 @@ import HBS2.Net.Auth.GroupKeySymm as Symm
import Control.Monad.Trans.Cont
import Control.Monad.Except
import Codec.Serialise
import Data.ByteString (ByteString)
groupKeyFromKeyList :: MonadUnliftIO m => [String] -> m (GroupKey 'Symm HBS2Basic)
groupKeyFromKeyList ks = do
@ -19,6 +21,13 @@ groupKeyFromKeyList ks = do
Symm.generateGroupKey @'HBS2Basic Nothing members
encryptBlock :: MonadUnliftIO m
=> GroupKey 'Symm 'HBS2Basic
-> ByteString
-> m (SmallEncryptedBlock ByteString)
encryptBlock gk bs = undefined
loadGroupKey :: (IsContext c, MonadUnliftIO m) => HashRef -> RunM c m (Maybe (GroupKey 'Symm HBS2Basic))
loadGroupKey h = do

View File

@ -57,11 +57,7 @@ createTreeWithMetadata sto mgk meta lbs = do -- flip runContT pure do
createEncryptedTree gk mt = do
-- 1. find key
mgks <- runKeymanClient do
runMaybeT do
s <- forM (HM.toList $ recipients gk) $ \(pk,box) -> do
KeyringEntry pk sk _ <- MaybeT $ loadKeyRingEntry pk
MaybeT $ pure (Symm.lookupGroupKey sk pk gk)
MaybeT $ pure $ headMay s
extractGroupKeySecret gk
gks <- orThrowUser "can't get groupkey's secret" mgks

View File

@ -7,6 +7,7 @@ import HBS2.KeyMan.Config
import HBS2.Prelude.Plated
import HBS2.Net.Auth.Credentials
import HBS2.Net.Auth.GroupKeySymm as Symm
import HBS2.Net.Proto.Types
@ -17,6 +18,7 @@ import UnliftIO
import DBPipe.SQLite
import Text.InterpolatedString.Perl6 (qc)
import Data.Maybe
import Data.HashMap.Strict qualified as HM
import Control.Monad.Trans.Maybe
import Data.List qualified as List
import Data.ByteString qualified as BS
@ -106,3 +108,14 @@ loadKeyRingEntries pks = KeyManClient do
]
pure $ catMaybes r & List.sortOn (Down . fst)
extractGroupKeySecret :: MonadIO m
=> GroupKey 'Symm 'HBS2Basic
-> KeyManClient m (Maybe GroupSecret)
extractGroupKeySecret gk = do
runMaybeT do
s <- forM (HM.toList $ recipients gk) $ \(pk,box) -> do
KeyringEntry pk sk _ <- MaybeT $ loadKeyRingEntry pk
MaybeT $ pure (Symm.lookupGroupKey sk pk gk)
MaybeT $ pure $ headMay s