Как разобрать git gpgsig подписанный коммит - PullRequest
0 голосов
/ 11 марта 2020

Я пишу клиент Git, что немного сложно, потому что нет "Git спецификации", и хотя есть некоторая документация, она не является исчерпывающей. По сути, код git является спецификацией.

Моя последняя проблема заключается в том, как разобрать коммит git. Я думал, что формат был такой (EBNF):

commit = header* , "\n" , message ;
header = key , " " , value , "\n" ;

Это работало, пока я не нашел этот коммит в LLVM:

tree c02519f3f72b850fe67b54a2a04284b92b4947df
parent fed8c068922319cc6a84fd08e75eccf7376b21c4
author Roman Lebedev <lebedev.ri@gmail.com> 1574169814 +0300
committer Roman Lebedev <lebedev.ri@gmail.com> 1574169847 +0300
gpgsig -----BEGIN PGP SIGNATURE-----

 iQIzBAABCgAdFiEEjkF6151RK40WXe2HCDw+u0oWieAFAl3T7PcACgkQCDw+u0oW
 ieAxOw//UURm9vZPv5i2qgu6Y3AKlj/jflBE8ZPrqe4CwJwmufcrMXQSAqm9i+es
 tPn7ef0iNbkz7LZlkPbJ+CileFyMg3ErsPCnJVqi2FUwxlU/sCwwUV+U0AYP+vXY
 MIXd84jh5CNJT5S9XN2Ql1Ff0mZJOD6Bfz7LT8iP8RmX9ukL+nrxG+yTx15TzW63
 5OAoBw+f47IC3jCI1QPh+F3aL8O799vmfC7tZYAguxqtgALsbGQHaz4XDFGLqTHo
 0vTZZDMG1wnw+hFUGjeDHp7FgHdhpgTQElABiCV7CpgsgnivwbNaEI6AyPXy7wj+
 4u/rPdVb19w3stN36k5Z1QAjzOcV7c7/GhAe0AfLfcKeCJOa4hllXctre8046616
 5qgTHV337gdX7DJt46Vk+8N7HVHMoSLh+QuI7koQkf1/snvrnRPSQtpTxv46RviJ
 Q/IG9T/H1JeiSZZyhHTlo3nx/NcD86tdLH3O5qZ6H99zYD1phnR8rI66TIJO6SNb
 hQ6UlbdwwW4Gt1nFdLmEp5MuXRUqWmcMhQZWKEhfZWANcUWFf2zSnnDXQK6BWkhM
 /cUH7U6F6mPMyN1y0Osh3cT8EpJNCNCGP89WDrd9o0z0Vk4Mrlon5ormskcmsf4T
 VAndfHoeMjZXWxUuMoe9Y8Hi7im0b7qKwwpGUeuJ981e6Rx/rAI=
 =8e3l
 -----END PGP SIGNATURE-----

[NFC][X86] Fixup comment in CodeGen/X86/cmov.ll

As noted in post-commit review for
https://reviews.llvm.org/D59035#inline-631659

Как мне разобрать это? Кажется, что он использует пробел в качестве первого символа каждой строки, чтобы указать продолжение значения заголовка. Это правильно?

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Да, заголовок с продолжением строки имеет отступ в один пробел, который удаляется при определении тела заголовка. Это очень похоже на электронную почту.

Сигнатура вычисляется путем удаления любых заголовков, начинающихся с gpgsig (например, gpgsig и последующих gpgsig-sha256), а затем с помощью этого в качестве данных для проверки.

0 голосов
/ 11 марта 2020

Не было бы так просто, как анализировать строку за строкой, и просто предположить (жадно), что до тех пор, пока не будет найдено следующее ключевое слово (дерево, родитель, автор, зафиксированный и т. Д. c), вы все еще получаете данные для старого ключа?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...