git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* GPG Commit Signing Project
@ 2020-08-18 18:43 Jimit Bhalavat
  2020-08-18 20:32 ` Junio C Hamano
  2020-08-19 10:19 ` brian m. carlson
  0 siblings, 2 replies; 12+ messages in thread
From: Jimit Bhalavat @ 2020-08-18 18:43 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: David Huseby, git

Hello Junio,

I am Jimit Bhalavat, and as you know I have been selected by The Linux Foundation to work on the GPG Commit Signing Project. My mentor is David Huseby. I have spent the last few weeks working on a Technical Design Document which specifies how the commit signing works in git and what functions are called. I have done the same for verifying signatures, commit tags, and verifying tags. The aim of this project is that we want to focus entirely on refactoring the signing infrastructure to make it easy for users to support their choice of signing tool while preserving full backwards compatibility with the way things work today. We are NOT at all trying to inject any "emerging technology" into Git, just merely loosening the binding between Git and GPG enough so that users have more choice with signing tools.

The detailed technical design proposal is below: 

What changes did patches make last summer?: The project’s goal was to abstract the current GPG interface into a more ‘generic’ API that supports the existing OpenPGP and X.509 functionality while creating the ability to write additional signature drivers. Currently git supports signing/verifying commits and tags using GPG only. The goal of the project was to make the git signing interface compatible with external signing tools. The main sections of the project were updating the user configuration and the command handling when a signing or verifying operation occurs. The prototype of Ibrahim’s patches has already implemented configuration aliases to ensure that the new approach is backwards compatible with previous configuration. The patches also worked towards improving the documentation for clear transition, along with maintaining backward compatibility. 

Why were the patches from last summer rejected?: The patches from last summer opted for a config based approach and a tool-agnostic signing interface. The main goal of the project was to abstract the current GPG interface into a more ‘generic’ API that supports the existing OpenPGP and X.509 functionality while creating the ability to write additional signature drivers. The project proposal had already implemented configuration aliases to ensure that the new approach is backwards compatible with previous configuration. The other reasons include: the drivers for external signing tools were still written in C and the patches were not more for a configuration based interface. The patches implement updated user configuration to define signing tools and implement a tool-agnostic signing interface in C code. It also added the possibility to use bash helper scripts to drive additional tools in case the default interface doesn't work as intended.

Where are we going next?/What we are trying to achieve?: The main goal of this year’s project is instead of having C code for each new signing tool, we will try define a new  standardized pipe forking interface that takes the values from the config file. The config file will contain the following values: which executable to run, what parameters to pass, what regular expressions to use for detecting signature type and pulling the signature out of commits and tags. Part of the patches from last summer update the config format to support any number of different signing tools. If the config file does not have any values using the new signing section format, it defaults to the GPG executable, GPG regular expressions, and the GPG parameters. This ensures that we maintain backward compatibility and preserve existing behaviour for users who have not adopted the new config values. We are going to deprecate things, but old options will not stop working.

The proposal:

	1. We aim to achieve that instead of having C code that calls all the signing tools, we will try to achieve that only one piece of code will do the standardized pipe forking and take the values from the config file. The config file will contain the following values: which executable to run, what parameters to pass, what regular expressions to use for detecting signature type and pulling the signature out of commits and tags.
	2. The current patch uses a set of function pointers, but this project aims to use a struct with the configuration data for the detected signature type such as PGP, x509, minisig, etc.
		a. When signing, the signature type either comes from the command-line switch or from the signing default as specified in the config file. The config file has different parameters: which executable to run, what parameters to pass, what regular expressions to use for detecting signature type and pulling the signature out of commits and tags. The goal is to try and call the signing tools from one piece of code instead multiple C code. If the config file does not have any values, it defaults to the GPG executable, GPG regular expressions, and the GPG parameters.
		b. During the verification process, the signature type is detected by using regular expressions from the config file. The regular expression searches for metadata for a matching signature, and the first one that matches, that format is returned and used for the verification. This design also opens up the possibility of having multiple signatures on a commit/tag.
		c. Once format is determined, a signing_tool struct is initialized for the given format. The struct contains all of the config data for the given tool (e.g. program to run, regex’s, command line switches, etc).
	3. The project also aims to improve the signing-interface.c file to work from the signing_tool struct which we created above which contains all of the configuration data for the given tool such as what program to run, regular expressions, and command line switches. The flow of the code should look like this:
		a. Pass in a signing tool struct to sign commit
		b. Instead of calling function pointers to the signing-tool-specific “drivers”, it will instead do what the existing code does; however the executable and command line switches all come from the config/defaults instead of being hard coded..
	4. Create a struct for signer_identity:
		a. This struct will be helpful to load signer_identity from config (e.g. the existing signingkey config item) or command line.
		b. It stores the signing-tool-specific signer identity string/identifier, so that it can be passed to the signing tool.
	5. All of these changes will make sure that we maintain backwards compatibility. We are aiming to deprecate things a little but old options will not stop working. We will preserve existing behavior. The goal is to try and call the signing tools from one piece of code instead multiple C code. 

Thank you for your time and we appreciate you looking into it. We are open to having conversations and work with you to make a final proposal which we can use to move forward. 

Thank you once again.

Best,
Jimit Bhalavat.

^ permalink raw reply	[flat|nested] 12+ messages in thread
* GPG Commit Signing Project
@ 2020-07-07 18:01 Jimit Bhalavat
  2020-07-07 19:10 ` Junio C Hamano
  0 siblings, 1 reply; 12+ messages in thread
From: Jimit Bhalavat @ 2020-07-07 18:01 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, David Huseby

Hello Junio,

When we last spoke, David Huseby, my mentor for Hyperledger Git Commit Signing Project, proposed an outline of what we are trying to achieve. We have come to the conclusion that me and him are going to spend the rest of the summer analyzing the format signing infrastructure and will have proposals and questions as we go. I am also going to write a technical design document which will help us analyze the problem. I realize this is a larger long-term project that I think deserves a topic and how would I set a topic up? 

I am also going to be thoroughly reading and understanding the patches from last summer which will help me guide through the format. If you are not the right person to be in contact with, please put me in touch with the right person, or if you don’t mind, please forward this email to them so that we can be in touch. 

I really appreciate all your help, thank you once again, and I will have proposals and questions as we move forward. 

Thank you.

Be well and stay safe,
Jimit Bhalavat

^ permalink raw reply	[flat|nested] 12+ messages in thread
* GPG Commit Signing Project
@ 2020-06-10 23:11 Jimit Bhalavat
  0 siblings, 0 replies; 12+ messages in thread
From: Jimit Bhalavat @ 2020-06-10 23:11 UTC (permalink / raw)
  To: brian m. carlson; +Cc: git

Good Afternoon, 

Hope you are doing well. As you know, I have been selected by The Linux Foundation to work on the Commit Signing Project. We are trying again to make the signing subsystem generic so that we can use other signing tools while preserving backward compatibility with existing .gitconfigs and setups. The code changes are pretty significant. 

Do you think we should create a topic under the pu branch? 

The below link shows some of the topics currently in pu:

https://github.com/git/git/commits/pu

Thank you once again. I really appreciate all your help and guidelines. 

Be well and Stay safe,
Jimit Bhalavat.

^ permalink raw reply	[flat|nested] 12+ messages in thread
* GPG Commit Signing Project
@ 2020-06-10 18:06 Jimit Bhalavat
  2020-06-10 19:35 ` Junio C Hamano
  0 siblings, 1 reply; 12+ messages in thread
From: Jimit Bhalavat @ 2020-06-10 18:06 UTC (permalink / raw)
  To: gitster; +Cc: git

Good Afternoon, 

I am Jimit Bhalavat, and I am a Junior at Colorado State University and my major is Computer Science. Recently, I accepted to work on Hyperledger Git Commit Signing Project through The Linux Foundation and my mentor is David Huseby. I am writing to you in order to ask you if you are the maintainer for the GPG Signing Project? 

Which branches are for refactoring/new features in the GPG Commit Signing Project?

Thank you so much. Have a great rest of your day.

Best,
Jimit Bhalavat.

^ permalink raw reply	[flat|nested] 12+ messages in thread
* GPG Commit Signing Project
@ 2020-06-10 17:57 Jimit Bhalavat
  0 siblings, 0 replies; 12+ messages in thread
From: Jimit Bhalavat @ 2020-06-10 17:57 UTC (permalink / raw)
  To: git

Hello, 

Hope you are doing good. Which branches are for refactoring/new features in the GPG Commit Signing Project?

Thank you so much. 

Best,
Jimit Bhalavat.

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2020-08-19 10:20 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-18 18:43 GPG Commit Signing Project Jimit Bhalavat
2020-08-18 20:32 ` Junio C Hamano
2020-08-19 10:19 ` brian m. carlson
  -- strict thread matches above, loose matches on Subject: below --
2020-07-07 18:01 Jimit Bhalavat
2020-07-07 19:10 ` Junio C Hamano
2020-06-10 23:11 Jimit Bhalavat
2020-06-10 18:06 Jimit Bhalavat
2020-06-10 19:35 ` Junio C Hamano
2020-06-12  1:55   ` dwh
2020-06-12  2:24     ` brian m. carlson
2020-06-12 17:03       ` Junio C Hamano
2020-06-10 17:57 Jimit Bhalavat

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).