On August 3, 2018 5:39 PM, Tacitus Aedifex wrote: > I'm looking at the existing commit signing and verification integration and it is > all GPG specific. I'm interested in refactoring the code to have a generic > signing/verifying interface so that "drivers" > for other signing tools can be created and other signing tools can be used > (e.g. OpenBSD signify). > > The existing interface defined in gpg-interface.h is already fairly generic. It > looks like the only things that would need to be fixed are the names of some > members in the signature_check struct and the GPG specific constants. > > I propose to rename the gpg-interface.h file to signature-interface.h. > There are several different ways to do the "polymorphism" needed to have a > base signature_check struct with a tool-specific part for storing the tool- > specific data (e.g. gpg_output, gpg_status, result). I'm looking for > suggestions on the way this has been done in other places in the Git code so I > can do it the same way. My initial impulse it to have a union of tool-specific > structs inside of the signature_check struct. > > The plan for changing the signing behavior is to change the code looking for > commit.gpgsign in sequencer.c to instead look for commit.signtool. > The string value will define which signing tool to use. The default will be null > which is the equivilent to gpgsign=false. To get GPG signing the user would > set it to "gpg". To maintain backwards compatibility, the code will continue to > check for commit.gpgsign and translate that to commit.signtool=gpg and > output a warning. > > I also think that it makes sense to move the user.signingkey to be > gpg.signingkey since that only makes sense in the context of GPG. > > The real trick here is how to handle signatures from different tools in a given > project. I think the answer is to store the value of commit.signtool along with > the signature blob associted with each signed commit. That way the > signature verification code can know which tool to use to verify the > signature. If a commit has a signture but no tool selector, the default will be > to assume GPG to preserve backwards compatibility. If I may suggest something a little off the wall... the abstraction needs to go beyond just the signing tool, but the whole signing infrastructure. I would like to see something along the lines of introducing a signing authority into the mix, so that not only the tool of signing is abstracted, but also the interface to who, if anyone, is responsible for signing. If I had my dream, it would be that one (or more) signing authorities would have potentially overlapping responsibilities for signing parts of the tree either on demand or by requirement. So when a commit occurs, at least on master, or other designated branches, it may be the repository requires a signature from a particular authority, regardless of whether the committer has requested one. And there may be more than one authority or notary involved. Or, the repository could accept the signature of the committer as abstracted. Where I'm going is that I would like to see a tighter integration with block-chain concepts in git. My customer base has very tight requirements for this type of software certification. Signatures, GPG or other, may only go so far. I am even considering whether particular parts of the tree are even visible (remember the Islands of Sparceness discussion?). I expect to be able to contribute more to this conversation in a few months (current $NDA prohibition), if this goes anywhere. My feature time machine window doesn't see this any time soon, if ever, but one never knows. I have my delusional hopes. 😉 Please take this as simply a suggestion for the long-term. Cheers, Randall -- Brief whoami: NonStop developer since approximately 211288444200000000 UNIX developer since approximately 421664400 -- In my real life, I talk too much.