mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
26f4796cbe
commit
887ff91b80
|
@ -1,3 +1,45 @@
|
||||||
|
|
||||||
|
## 2023-02-09
|
||||||
|
|
||||||
|
TODO: encryption-keys-into-credentials-file
|
||||||
|
|
||||||
|
дизайн данных:
|
||||||
|
```
|
||||||
|
data Credentials = Credentials SignKey [(KeyId, KeyMetadata, KeyPair)]
|
||||||
|
```
|
||||||
|
|
||||||
|
он же "keyring", это буквально связка ключей.
|
||||||
|
|
||||||
|
операции:
|
||||||
|
|
||||||
|
```
|
||||||
|
hbs2 keyring list <keyring-file>
|
||||||
|
```
|
||||||
|
|
||||||
|
показывает публичные ключи в связке и их типы и прочее
|
||||||
|
|
||||||
|
```
|
||||||
|
hbs2 keyring add-new [-n key-id] <keyring-file>
|
||||||
|
```
|
||||||
|
|
||||||
|
добавляет ключ
|
||||||
|
|
||||||
|
```
|
||||||
|
hbs2 keyring del -n key-id <keyring-file>
|
||||||
|
```
|
||||||
|
|
||||||
|
удаляет ключ
|
||||||
|
|
||||||
|
Этот же формат ключ можно использовать и самому пиру,
|
||||||
|
т.к. ему тоже нужны будут потом ключи шифрования.
|
||||||
|
|
||||||
|
Единственное, пир должен знать какой ключ из связки
|
||||||
|
использовать, но это может быть либо по умолчанию
|
||||||
|
первый ключ, либо передавать как-то в конфиге
|
||||||
|
или же аргументах.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## 2023-02-07
|
## 2023-02-07
|
||||||
|
|
||||||
FIXME: suckless-conf
|
FIXME: suckless-conf
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
|
{-# Language TemplateHaskell #-}
|
||||||
{-# Language UndecidableInstances #-}
|
{-# Language UndecidableInstances #-}
|
||||||
module HBS2.Net.Auth.Credentials where
|
module HBS2.Net.Auth.Credentials where
|
||||||
|
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
import HBS2.Net.Proto.Types
|
import HBS2.Net.Proto.Types
|
||||||
import HBS2.Base58
|
import HBS2.Base58
|
||||||
import HBS2.Net.Messaging.UDP (UDP)
|
|
||||||
|
|
||||||
import Codec.Serialise
|
import Codec.Serialise
|
||||||
import Crypto.Saltine.Core.Sign (Keypair(..))
|
import Crypto.Saltine.Core.Sign (Keypair(..))
|
||||||
|
@ -16,8 +16,30 @@ import Data.ByteString.Char8 qualified as B8
|
||||||
import Data.ByteString.Char8 (ByteString)
|
import Data.ByteString.Char8 (ByteString)
|
||||||
import Data.Function
|
import Data.Function
|
||||||
import Data.List.Split (chunksOf)
|
import Data.List.Split (chunksOf)
|
||||||
|
import Data.Text (Text)
|
||||||
|
import Lens.Micro.Platform
|
||||||
import Prettyprinter
|
import Prettyprinter
|
||||||
|
|
||||||
|
class HasCredentials e m where
|
||||||
|
getCredentials :: m (PeerCredentials e)
|
||||||
|
|
||||||
|
data KeyringEntry e =
|
||||||
|
KeyringEntry
|
||||||
|
{ _krPk :: PubKey 'Encrypt e
|
||||||
|
, _krSk :: PrivKey 'Encrypt e
|
||||||
|
, _krDesc :: Text
|
||||||
|
}
|
||||||
|
|
||||||
|
data PeerCredentials e =
|
||||||
|
PeerCredentials
|
||||||
|
{ _peerSignSk :: PrivKey 'Sign e
|
||||||
|
, _peerSignPk :: PubKey 'Sign e
|
||||||
|
, _peerKeyring :: [KeyringEntry e]
|
||||||
|
}
|
||||||
|
|
||||||
|
makeLenses 'KeyringEntry
|
||||||
|
makeLenses 'PeerCredentials
|
||||||
|
|
||||||
|
|
||||||
newtype AsCredFile a = AsCredFile a
|
newtype AsCredFile a = AsCredFile a
|
||||||
|
|
||||||
|
@ -28,7 +50,7 @@ newCredentials :: forall e m . ( MonadIO m
|
||||||
) => m (PeerCredentials e)
|
) => m (PeerCredentials e)
|
||||||
newCredentials = do
|
newCredentials = do
|
||||||
pair <- liftIO Sign.newKeypair
|
pair <- liftIO Sign.newKeypair
|
||||||
pure $ PeerCredentials @e (secretKey pair) (publicKey pair)
|
pure $ PeerCredentials @e (secretKey pair) (publicKey pair) mempty
|
||||||
|
|
||||||
|
|
||||||
parseCredentials :: forall e . ( Signatures e
|
parseCredentials :: forall e . ( Signatures e
|
||||||
|
@ -45,6 +67,7 @@ parseCredentials (AsCredFile bs) = maybe1 b58_1 Nothing fromCbor
|
||||||
|
|
||||||
fromPair (s1,s2) = PeerCredentials <$> Crypto.decode s1
|
fromPair (s1,s2) = PeerCredentials <$> Crypto.decode s1
|
||||||
<*> Crypto.decode s2
|
<*> Crypto.decode s2
|
||||||
|
<*> pure mempty
|
||||||
|
|
||||||
b58_1 = B8.lines bs & dropWhile hdr
|
b58_1 = B8.lines bs & dropWhile hdr
|
||||||
& filter ( not . B8.null )
|
& filter ( not . B8.null )
|
||||||
|
@ -59,7 +82,7 @@ instance ( IsEncoding (PrivKey 'Sign e)
|
||||||
)
|
)
|
||||||
|
|
||||||
=> Pretty (AsBase58 (PeerCredentials e)) where
|
=> Pretty (AsBase58 (PeerCredentials e)) where
|
||||||
pretty (AsBase58 (PeerCredentials s p)) = pretty $ B8.unpack (toBase58 bs)
|
pretty (AsBase58 (PeerCredentials s p _)) = pretty $ B8.unpack (toBase58 bs)
|
||||||
where
|
where
|
||||||
sk = Crypto.encode s
|
sk = Crypto.encode s
|
||||||
pk = Crypto.encode p
|
pk = Crypto.encode p
|
||||||
|
|
|
@ -2,15 +2,16 @@
|
||||||
{-# Language UndecidableInstances #-}
|
{-# Language UndecidableInstances #-}
|
||||||
module HBS2.Net.Proto.Peer where
|
module HBS2.Net.Proto.Peer where
|
||||||
|
|
||||||
import HBS2.Base58
|
-- import HBS2.Base58
|
||||||
import HBS2.Data.Types
|
import HBS2.Data.Types
|
||||||
import HBS2.Events
|
import HBS2.Events
|
||||||
import HBS2.Net.Proto
|
import HBS2.Net.Proto
|
||||||
import HBS2.Clock
|
import HBS2.Clock
|
||||||
import HBS2.Net.Proto.Sessions
|
import HBS2.Net.Proto.Sessions
|
||||||
import HBS2.Prelude.Plated
|
import HBS2.Prelude.Plated
|
||||||
|
import HBS2.Net.Auth.Credentials
|
||||||
|
|
||||||
import HBS2.System.Logger.Simple
|
-- import HBS2.System.Logger.Simple
|
||||||
|
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Codec.Serialise()
|
import Codec.Serialise()
|
||||||
|
|
|
@ -18,6 +18,7 @@ import System.Random qualified as Random
|
||||||
import Data.Digest.Murmur32
|
import Data.Digest.Murmur32
|
||||||
import Data.ByteString (ByteString)
|
import Data.ByteString (ByteString)
|
||||||
import Lens.Micro.Platform
|
import Lens.Micro.Platform
|
||||||
|
import Data.Text (Text)
|
||||||
|
|
||||||
-- e -> Transport (like, UDP or TChan)
|
-- e -> Transport (like, UDP or TChan)
|
||||||
-- p -> L4 Protocol (like Ping/Pong)
|
-- p -> L4 Protocol (like Ping/Pong)
|
||||||
|
@ -41,8 +42,6 @@ class Signatures e where
|
||||||
makeSign :: PrivKey 'Sign e -> ByteString -> Signature e
|
makeSign :: PrivKey 'Sign e -> ByteString -> Signature e
|
||||||
verifySign :: PubKey 'Sign e -> Signature e -> ByteString -> Bool
|
verifySign :: PubKey 'Sign e -> Signature e -> ByteString -> Bool
|
||||||
|
|
||||||
class HasCredentials e m where
|
|
||||||
getCredentials :: m (PeerCredentials e)
|
|
||||||
|
|
||||||
class HasCookie e p | p -> e where
|
class HasCookie e p | p -> e where
|
||||||
type family Cookie e :: Type
|
type family Cookie e :: Type
|
||||||
|
@ -54,13 +53,6 @@ type PeerNonce = Nonce ()
|
||||||
class HasPeerNonce e m where
|
class HasPeerNonce e m where
|
||||||
peerNonce :: m PeerNonce
|
peerNonce :: m PeerNonce
|
||||||
|
|
||||||
data PeerCredentials e =
|
|
||||||
PeerCredentials
|
|
||||||
{ _peerSignSk :: PrivKey 'Sign e
|
|
||||||
, _peerSignPk :: PubKey 'Sign e
|
|
||||||
}
|
|
||||||
|
|
||||||
makeLenses 'PeerCredentials
|
|
||||||
|
|
||||||
|
|
||||||
data WithCookie e p = WithCookie (Cookie e) p
|
data WithCookie e p = WithCookie (Cookie e) p
|
||||||
|
|
|
@ -204,3 +204,4 @@ removeFromWip h = do
|
||||||
liftIO $ Cache.delete wip h
|
liftIO $ Cache.delete wip h
|
||||||
liftIO $ Cache.delete po h
|
liftIO $ Cache.delete po h
|
||||||
liftIO $ atomically $ modifyTVar' st (HashMap.delete h)
|
liftIO $ atomically $ modifyTVar' st (HashMap.delete h)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue