mirror of https://github.com/voidlizard/hbs2
56 lines
1.5 KiB
Haskell
56 lines
1.5 KiB
Haskell
module HBS2Git.Encryption
|
|
( module HBS2Git.Encryption
|
|
, module HBS2Git.Encryption.KeyInfo
|
|
, module HBS2.Net.Auth.GroupKeySymm
|
|
) where
|
|
|
|
import HBS2Git.Prelude
|
|
|
|
import HBS2.Net.Auth.Credentials
|
|
import HBS2.Net.Proto.Types hiding (Cookie)
|
|
import HBS2.Net.Auth.GroupKeySymm hiding (Cookie)
|
|
|
|
|
|
import HBS2Git.Encryption.KeyInfo
|
|
|
|
import Data.Config.Suckless.Syntax
|
|
import Data.Config.Suckless.KeyValue
|
|
|
|
import Data.HashSet qualified as HashSet
|
|
import Data.Maybe
|
|
import Data.Text qualified as Text
|
|
import Data.Time.Clock.POSIX
|
|
|
|
-- type ForEncryption ?
|
|
|
|
isRefEncrypted :: (MonadIO m, HasConf m) => PubKey 'Sign HBS2Basic -> m Bool
|
|
isRefEncrypted ref = do
|
|
conf <- getConf
|
|
|
|
let ee = [ True
|
|
| (ListVal (SymbolVal "encrypted" : (LitStrVal r) : _)) <- conf
|
|
, fromStringMay (Text.unpack r) == Just ref
|
|
]
|
|
|
|
-- liftIO $ hPutDoc stderr $ "isRefEncrypted" <+> pretty (AsBase58 ref) <+> pretty ee <+> pretty (not (null ee)) <> line
|
|
|
|
pure $ not $ null ee
|
|
|
|
getKeyInfo :: (MonadIO m, HasConf m) => PubKey 'Sign HBS2Basic -> m (Maybe KeyInfo)
|
|
getKeyInfo ref = do
|
|
conf <- getConf
|
|
|
|
now <- liftIO getPOSIXTime
|
|
let every = [ keyInfoFrom now syn | syn <- conf
|
|
, isJust (keyInfoFrom now syn)
|
|
] & catMaybes
|
|
|
|
pure (lastMay [ x | x <- every, keyInfoRef x == ref ])
|
|
|
|
|
|
genGK0 :: (MonadIO m) => KeyInfo -> m (GroupKey 'Symm HBS2Basic)
|
|
genGK0 ki = generateGroupKey @HBS2Basic Nothing members
|
|
where
|
|
members = HashSet.toList ( keyInfoOwner ki `HashSet.insert` keyInfoMembers ki )
|
|
|