Attempt to extract actual signature. Something is off with the decoder though...

This commit is contained in:
Robin Heggelund Hansen 2023-01-21 21:10:26 +01:00
parent 3fdd445667
commit 2e72055031
No known key found for this signature in database
2 changed files with 29 additions and 7 deletions

View File

@ -13,6 +13,11 @@ module Git
)
where
import Data.Binary.Get qualified as Get
import Data.ByteString.Base64 qualified as Base64
import Data.ByteString.Char8 qualified as BSBuilder
import Data.ByteString.Lazy (ByteString)
import Data.ByteString.Lazy.Char8 qualified as BSLazy
import Data.Either qualified as Either
import Data.List qualified as List
import Data.Maybe qualified as Maybe
@ -232,9 +237,25 @@ extractSignatureFromCommit git path hash = do
Exit.ExitFailure _ -> do
return ""
Exit.ExitSuccess ->
return $
concatMap (dropWhile (\c -> c == ' ')) $
takeWhile (\line -> not $ List.isInfixOf "-----END SSH SIGNATURE-----" line) $
drop 1 $
dropWhile (\line -> not $ List.isPrefixOf "gpgsig" line) $
lines stdout
let decodedSignatureChunk =
Base64.decode $
BSBuilder.pack $
concatMap (dropWhile (\c -> c == ' ')) $
takeWhile (\line -> not $ List.isInfixOf "-----END SSH SIGNATURE-----" line) $
drop 1 $
dropWhile (\line -> not $ List.isPrefixOf "gpgsig" line) $
lines stdout
in case decodedSignatureChunk of
Left err ->
return err
Right decoded ->
return $ BSLazy.unpack $ Get.runGet decodeSignatureFromChunk $ BSLazy.fromStrict decoded
decodeSignatureFromChunk :: Get.Get ByteString
decodeSignatureFromChunk = do
Get.skip 10
_publicKey <- Get.getLazyByteStringNul
_namespace <- Get.getLazyByteStringNul
_reserved <- Get.getLazyByteStringNul
_hash_algorithm <- Get.getLazyByteStringNul
Get.getLazyByteStringNul

View File

@ -222,7 +222,8 @@ Common gren-common
time >= 1.9.1,
utf8-string,
vector,
text >= 2 && < 3
text >= 2 && < 3,
base64-bytestring >= 1.2 && < 2
Executable gren
Import: