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

View File

@ -57,11 +57,7 @@ createTreeWithMetadata sto mgk meta lbs = do -- flip runContT pure do
createEncryptedTree gk mt = do createEncryptedTree gk mt = do
-- 1. find key -- 1. find key
mgks <- runKeymanClient do mgks <- runKeymanClient do
runMaybeT do extractGroupKeySecret gk
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
gks <- orThrowUser "can't get groupkey's secret" mgks 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.Prelude.Plated
import HBS2.Net.Auth.Credentials import HBS2.Net.Auth.Credentials
import HBS2.Net.Auth.GroupKeySymm as Symm
import HBS2.Net.Proto.Types import HBS2.Net.Proto.Types
@ -17,6 +18,7 @@ import UnliftIO
import DBPipe.SQLite import DBPipe.SQLite
import Text.InterpolatedString.Perl6 (qc) import Text.InterpolatedString.Perl6 (qc)
import Data.Maybe import Data.Maybe
import Data.HashMap.Strict qualified as HM
import Control.Monad.Trans.Maybe import Control.Monad.Trans.Maybe
import Data.List qualified as List import Data.List qualified as List
import Data.ByteString qualified as BS import Data.ByteString qualified as BS
@ -106,3 +108,14 @@ loadKeyRingEntries pks = KeyManClient do
] ]
pure $ catMaybes r & List.sortOn (Down . fst) 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