wip, removing obsolete code

This commit is contained in:
voidlizard 2025-05-19 08:25:20 +03:00
parent 5f08753132
commit 427115c42b
4 changed files with 19 additions and 138 deletions

View File

@ -25,6 +25,7 @@ import HBS2.Peer.RPC.API.Storage
import HBS2.Peer.RPC.Client import HBS2.Peer.RPC.Client
import HBS2.Peer.RPC.Client.Unix import HBS2.Peer.RPC.Client.Unix
import Data.ByteString.Lazy qualified as LBS
import Data.Coerce import Data.Coerce
import Data.Text qualified as Text import Data.Text qualified as Text
import Control.Monad.Except import Control.Monad.Except
@ -64,7 +65,22 @@ treeEntries = do
_ -> throwIO (BadFormException @c nil) _ -> throwIO (BadFormException @c nil)
brief "reads merkle tree data from storage" brief "reads merkle tree data from storage to stdout"
$ args [arg "string" "tree"]
$ desc "hbs2:tree:read:stdout HASH"
$ returns "nil" ""
$ entry $ bindMatch "hbs2:tree:read:stdout" $ nil_ \case
[ HashLike h ] -> lift do
sto <- getStorage
runExceptT (getTreeContents sto h)
>>= orThrowPassIO
>>= liftIO . LBS.putStr
_ -> throwIO (BadFormException @c nil)
brief "creates a 'grove' -- an annotated hashref list"
$ args [arg "list of hashes" "trees"] $ args [arg "list of hashes" "trees"]
$ desc [qc|hbs2:grove creates a 'grove' - merkle tree of list of hashes of merkle trees $ desc [qc|hbs2:grove creates a 'grove' - merkle tree of list of hashes of merkle trees
It's just an easy way to create a such thing, you may browse it by hbs2 cat -H It's just an easy way to create a such thing, you may browse it by hbs2 cat -H

View File

@ -99,7 +99,6 @@ library
, HBS2.Merkle.MetaData , HBS2.Merkle.MetaData
, HBS2.Merkle.Walk , HBS2.Merkle.Walk
, HBS2.Net.Auth.Schema , HBS2.Net.Auth.Schema
, HBS2.Net.Auth.GroupKeyAsymm
, HBS2.Net.Auth.GroupKeySymm , HBS2.Net.Auth.GroupKeySymm
, HBS2.Net.Auth.Credentials , HBS2.Net.Auth.Credentials
, HBS2.Net.Auth.Credentials.Sigil , HBS2.Net.Auth.Credentials.Sigil

View File

@ -1,107 +0,0 @@
{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# Language UndecidableInstances #-}
{-# Language AllowAmbiguousTypes #-}
{-# Language ConstraintKinds #-}
module HBS2.Net.Auth.GroupKeyAsymm where
import HBS2.Base58
import HBS2.Data.Types
import HBS2.Data.Types.EncryptedBox
import HBS2.Net.Auth.Credentials
import HBS2.Prelude.Plated
import Codec.Serialise
import Control.Monad ((<=<))
import Crypto.Saltine.Core.Box qualified as Encrypt
import Crypto.Saltine.Class qualified as Crypto
import Data.ByteString.Lazy.Char8 qualified as LBS
import Data.ByteString.Char8 qualified as B8
import Data.ByteString.Char8 (ByteString)
import Data.List.Split (chunksOf)
type ForAccessKey (s :: CryptoScheme) = ( Crypto.IsEncoding (PubKey 'Encrypt s)
, Serialise (PubKey 'Encrypt s)
, Serialise (PubKey 'Sign s)
, Serialise (PrivKey 'Sign s)
, Serialise (PrivKey 'Encrypt s)
)
data family AccessKey ( s :: CryptoScheme )
newtype instance AccessKey (s :: CryptoScheme) =
AccessKeyNaClAsymm
{ permitted :: [(PubKey 'Encrypt s, EncryptedBox (KeyringEntry s))]
}
deriving stock (Generic)
instance ForAccessKey s => Serialise (AccessKey s)
---
data instance GroupKey 'Asymm s =
GroupKeyNaClAsymm
{ recipientPk :: PubKey 'Encrypt s
, accessKey :: AccessKey s
}
deriving stock (Generic)
instance ForAccessKey s => Serialise (GroupKey 'Asymm s)
---
-- FIXME: integration-regression-test-for-groupkey
-- Добавить тест: сгенерировали groupkey/распарсили groupkey
parseGroupKey :: forall s . ForAccessKey s
=> AsGroupKeyFile ByteString -> Maybe (GroupKey 'Asymm s)
parseGroupKey (AsGroupKeyFile bs) = parseSerialisableFromBase58 bs
instance ( Serialise (GroupKey 'Asymm s)
)
=> Pretty (AsBase58 (GroupKey 'Asymm s)) where
pretty (AsBase58 c) =
pretty . B8.unpack . toBase58 . LBS.toStrict . serialise $ c
instance ForAccessKey s => Pretty (AsGroupKeyFile (AsBase58 (GroupKey 'Asymm s))) where
pretty (AsGroupKeyFile pc) = "# hbs2 groupkey file" <> line <> co
where
co = vcat $ fmap pretty
$ chunksOf 60
$ show
$ pretty pc
parsePubKeys :: forall s . ForAccessKey s
=> ByteString
-> Maybe [PubKey 'Encrypt s]
parsePubKeys = sequenceA . fmap (Crypto.decode <=< fromBase58) . B8.lines
-- FIXME: public-key-type-hardcode
-- Это нужно переместить в тайпкласс от s, аналогично Signatures
mkEncryptedKey :: forall s . (ForAccessKey s, PubKey 'Encrypt s ~ Encrypt.PublicKey)
=> KeyringEntry s
-> PubKey 'Encrypt s
-> IO (EncryptedBox (KeyringEntry s))
mkEncryptedKey kr pk = EncryptedBox <$> Encrypt.boxSeal pk ((LBS.toStrict . serialise) kr)
openEncryptedKey :: forall s . ( ForAccessKey s
, PrivKey 'Encrypt s ~ Encrypt.SecretKey
, PubKey 'Encrypt s ~ Encrypt.PublicKey
)
=> EncryptedBox (KeyringEntry s)
-> KeyringEntry s
-> Maybe (KeyringEntry s)
openEncryptedKey (EncryptedBox bs) kr =
either (const Nothing) Just . deserialiseOrFail . LBS.fromStrict =<< Encrypt.boxSealOpen (_krPk kr) (_krSk kr) bs

View File

@ -1,3 +1,4 @@
{-# Language TypeOperators #-}
module Main where module Main where
import HBS2.Base58 import HBS2.Base58
@ -12,7 +13,6 @@ import HBS2.Peer.CLI.Detect
import HBS2.Peer.RPC.Client.Unix import HBS2.Peer.RPC.Client.Unix
import HBS2.Peer.RPC.API.Storage import HBS2.Peer.RPC.API.Storage
import HBS2.Peer.RPC.Client.StorageClient import HBS2.Peer.RPC.Client.StorageClient
import HBS2.Net.Auth.GroupKeyAsymm as Asymm
import HBS2.Net.Auth.GroupKeySymm qualified as Symm import HBS2.Net.Auth.GroupKeySymm qualified as Symm
import HBS2.Net.Auth.GroupKeySymm import HBS2.Net.Auth.GroupKeySymm
import HBS2.Net.Auth.Credentials import HBS2.Net.Auth.Credentials
@ -374,34 +374,7 @@ runStore opts ss = runResourceT do
Left e -> die (show e) Left e -> die (show e)
Right h -> hPrint stdout (pretty h) Right h -> hPrint stdout (pretty h)
Just (EncAsymm gk) -> liftIO $ IO.withFile inputFile IO.ReadMode $ \ha -> do _ -> die "Unsupported (obsolete) encryption scheme"
accKeyh <- (putBlock ss . serialise . permitted . accessKey) gk
`orDie` "can not store access key"
let rawChunks = readChunked ha (fromIntegral defBlockSize) -- FIXME: to settings!
let encryptedChunks = rawChunks
& S.mapM (fmap LBS.fromStrict . Encrypt.boxSeal (recipientPk gk) . LBS.toStrict)
mhash <- putAsMerkle ss encryptedChunks
mtree <- ((either (const Nothing) Just . deserialiseOrFail =<<) <$> getBlock ss (fromMerkleHash mhash))
`orDie` "merkle tree was not stored properly with `putAsMerkle`"
mannh <- maybe (die "can not store MerkleAnn") pure
=<< (putBlock ss . serialise @(MTreeAnn [HashRef])) do
MTreeAnn NoMetaData (CryptAccessKeyNaClAsymm accKeyh) mtree
hPrint stdout $ "merkle-ann-root: " <+> pretty mannh
runNewGroupKeyAsymm :: forall s . (s ~ 'HBS2Basic) => FilePath -> IO ()
runNewGroupKeyAsymm pubkeysFile = do
s <- BS.readFile pubkeysFile
pubkeys <- pure (parsePubKeys @s s) `orDie` "bad pubkeys file"
keypair <- newKeypair @s Nothing
accesskey <- AccessKeyNaClAsymm @s <$> do
List.sort pubkeys `forM` \pk -> (pk, ) <$> mkEncryptedKey keypair pk
print $ pretty $ AsGroupKeyFile $ AsBase58 $ GroupKeyNaClAsymm (_krPk keypair) accesskey
runNewKey :: forall s . (s ~ 'HBS2Basic) => Int -> IO () runNewKey :: forall s . (s ~ 'HBS2Basic) => Int -> IO ()
runNewKey n = do runNewKey n = do