wip, encrypted metadata

This commit is contained in:
Dmitry Zuikov 2024-07-26 12:55:17 +03:00
parent 87cc11138e
commit 794ea341a9
3 changed files with 27 additions and 12 deletions

View File

@ -26,22 +26,22 @@ groupKeyFromKeyList ks = do
Symm.generateGroupKey @'HBS2Basic Nothing members
encryptBlock :: MonadUnliftIO m
encryptBlock :: (MonadUnliftIO m, Serialise t)
=> AnyStorage
-> GroupKey 'Symm 'HBS2Basic
-> ByteString
-> m (SmallEncryptedBlock ByteString)
-> t
-> m (SmallEncryptedBlock t)
encryptBlock sto gk bs = do
encryptBlock sto gk x = do
gks <- runKeymanClient (extractGroupKeySecret gk)
>>= orThrowUser "can't extract group key secret"
Symm.encryptBlock sto gks (Right gk) Nothing bs
Symm.encryptBlock sto gks (Right gk) Nothing x
decryptBlock :: MonadUnliftIO m
decryptBlock :: (MonadUnliftIO m, Serialise t)
=> AnyStorage
-> SmallEncryptedBlock ByteString
-> m ByteString
-> SmallEncryptedBlock t
-> m t
decryptBlock sto seb = do
let find gk = runKeymanClient (extractGroupKeySecret gk)

View File

@ -3,7 +3,7 @@ module HBS2.CLI.Run.Internal.Merkle where
import HBS2.CLI.Prelude
import HBS2.Defaults
import HBS2.CLI.Run.Internal
import HBS2.CLI.Run.Internal.GroupKey
import HBS2.CLI.Run.Internal.GroupKey as G
import HBS2.Hash
import HBS2.Net.Auth.GroupKeySymm as Symm
@ -80,7 +80,12 @@ createTreeWithMetadata sto mgk meta lbs = do -- flip runContT pure do
--
let segments = readChunkedBS lbs defBlockSize
let source = ToEncryptSymmBS gks (Right gk) nonce segments (ShortMetadata mt) Nothing
seb <- G.encryptBlock sto gk (ShortMetadata mt)
hmeta <- putBlock sto (serialise seb)
>>= orThrowUser "can't put block"
let source = ToEncryptSymmBS gks (Right gk) nonce segments (AnnHashRef hmeta) Nothing
runExceptT $ writeAsMerkle sto source <&> HashRef

View File

@ -4,7 +4,7 @@ module HBS2.CLI.Run.MetaData (metaDataEntries) where
import HBS2.CLI.Prelude
import HBS2.CLI.Run.Internal
import HBS2.CLI.Run.Internal.GroupKey
import HBS2.CLI.Run.Internal.GroupKey as G
import HBS2.CLI.Run.Internal.Merkle
import HBS2.Data.Types.Refs
@ -79,13 +79,23 @@ metaDataEntries = do
MTreeAnn { _mtaMeta = ShortMetadata s } -> do
pure $ mkStr s
MTreeAnn { _mtaMeta = AnnHashRef h } -> do
MTreeAnn { _mtaMeta = AnnHashRef h, _mtaCrypt = NullEncryption } -> do
getBlock sto h
>>= toMPlus
<&> LBS.toStrict
<&> TE.decodeUtf8
<&> mkStr
MTreeAnn { _mtaMeta = AnnHashRef h } -> do
getBlock sto h
>>= toMPlus
<&> deserialiseOrFail @(SmallEncryptedBlock AnnMetaData)
>>= toMPlus
>>= lift . G.decryptBlock sto
<&> \case
ShortMetadata s -> mkStr s
_ -> nil
_ -> mzero
case (how, r) of