git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 18/18] signed push: final protocol update

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 26, 2014, 19:38 UTC
Message-ID
<xmqqiolfhwhi.fsf@gitster.dls.corp.google.com>
In-Reply-To
<CAJo=hJs3m-0u7NkPHJqvk4qZBGtPguck-xn=in3m-+30UxDQoA@mail.gmail.com>
Shawn Pearce <spearce@spearce.org> writes:
Show 22 quoted lines
> On Mon, Aug 25, 2014 at 10:59 AM, Junio C Hamano <gitster@pobox.com> wrote:
>> Shawn Pearce <spearce@spearce.org> writes:
>>
>>> A stateless nonce could look like:
>>>
>>>   nonce = HMAC_SHA1( SHA1(site+path) + '.' + now, site_key )
>>>
>>> where site_key is a private key known to the server. It doesn't have
>>> to be per-repo.
>>>
>>> receive-pack would then be willing to accept any nonce whose timestamp
>>> is within a window, e.g. 10 minutes of the current time, and whose
>>> signature verifies in the HMAC. The 10 minute window is important to
>>> allow clients time to generate the object list, perform delta
>>> compression, and begin transmitting to the server.
>>
>> Hmph, don't you send the "finally tell the other end" the sequence
>> of "update this ref from old to new" and the packdata separately?
>
> No. The command list (triples of old, new, ref) is sent in the same
> HTTP request as the pack data, ahead of the pack data. So its one
> request.

That is unfortunate. Would it be a major surgery to update the protocol not to do that, perhaps by moving the command list from 3 to 2 (the latter of which is not currently doing anything useful payload-wise, other than flushing a HTTP request early)?

Show 22 quoted lines
> Push on smart HTTP is 3 HTTP requests:
>
>   1)  get advertisement
>   2)  POST empty flush packet to tickle auth (literally just "0000").
>   3)  POST command list + pack
>
> The nonce can be sent server->client in 1, and client->server in 3.
>
>>  I
>> think we have a FLUSH in between, and the push certificate is given
>> before the FLUSH, which you do not have to wait for 10 minutes.
>
> Nope I think you need to wait for the pack to generate enough to start
> sending the pack data stream. Nothing forces the smart HTTP client to
> push its pending buffer out. We wait for the pack data to either
> finish, or overflow the in-memory buffer, and then start transmitting.
> If your client needs a lot of time for counting and delta compression,
> we aren't likely to overflow and transmit for a while.
>
> If you send a _lot_ of refs you can overflow, which will cause us to
> transmit early. But we are talking about megabytes worth of (old, new,
> ref) triplets to reach that overflow point.
Previous: Shawn PearceNext: Junio C Hamano
Message 38 of 59 in “Signed push”
  1. 00/18 Signed pushJunio C Hamano, Aug 19, 2014
  2. 01/18 receive-pack: do not overallocate command structureJunio C Hamano, Aug 19, 2014
  3. 02/18 receive-pack: parse feature request a bit earlierJunio C Hamano, Aug 19, 2014
  4. Junio C HamanoAug 19, 2014
  5. 03/18 receive-pack: do not reuse old_sha1[] to other thingsJunio C Hamano, Aug 19, 2014
  6. Junio C HamanoAug 19, 2014
  7. 04/18 receive-pack: factor out queueing of commandJunio C Hamano, Aug 19, 2014
  8. 05/18 send-pack: move REF_STATUS_REJECT_NODELETE logic a bit higherJunio C Hamano, Aug 19, 2014
  9. 06/18 send-pack: refactor decision to send update per refJunio C Hamano, Aug 19, 2014
  10. 07/18 send-pack: always send capabilitiesJunio C Hamano, Aug 19, 2014
  11. 08/18 send-pack: factor out capability string generationJunio C Hamano, Aug 19, 2014
  12. 09/18 send-pack: rename "new_refs" to "need_pack_data"Junio C Hamano, Aug 19, 2014
  13. 10/18 send-pack: refactor inspecting and resetting status and sending commandsJunio C Hamano, Aug 19, 2014
  14. 11/18 send-pack: clarify that cmds_sent is a booleanJunio C Hamano, Aug 19, 2014
  15. 12/18 gpg-interface: move parse_gpg_output() to where it should beJunio C Hamano, Aug 19, 2014
  16. 13/18 gpg-interface: move parse_signature() to where it should beJunio C Hamano, Aug 19, 2014
  17. 14/18 pack-protocol doc: typofix for PKT-LINEJunio C Hamano, Aug 19, 2014
  18. 15/18 the beginning of the signed pushJunio C Hamano, Aug 19, 2014
  19. brian m. carlsonAug 20, 2014
  20. Bert WesargAug 20, 2014
  21. Junio C HamanoAug 20, 2014
  22. 16/18 receive-pack: GPG-validate push certificatesJunio C Hamano, Aug 19, 2014
  23. David TurnerAug 20, 2014
  24. Junio C HamanoAug 20, 2014
  25. David TurnerAug 20, 2014
  26. Junio C HamanoAug 20, 2014
  27. David TurnerAug 21, 2014
  28. Junio C HamanoAug 22, 2014
  29. 17/18 send-pack: send feature request on push-cert packetJunio C Hamano, Aug 19, 2014
  30. 18/18 signed push: final protocol updateJunio C Hamano, Aug 19, 2014
  31. Shawn PearceAug 21, 2014
  32. Junio C HamanoAug 21, 2014
  33. Kyle J. McKayAug 22, 2014
  34. Junio C HamanoAug 22, 2014
  35. Shawn PearceAug 22, 2014
  36. Junio C HamanoAug 25, 2014
  37. Shawn PearceAug 26, 2014
  38. Junio C HamanoAug 26, 2014
  39. Junio C HamanoAug 26, 2014
  40. Junio C HamanoSep 4, 2014
  41. Shawn PearceSep 5, 2014
  42. Junio C HamanoAug 22, 2014
  43. David TurnerAug 22, 2014
  44. Duy NguyenAug 19, 2014
  45. Junio C HamanoAug 19, 2014
  46. Nico WilliamsAug 20, 2014
  47. Junio C HamanoAug 20, 2014
  48. Junio C HamanoAug 20, 2014
  49. Junio C HamanoAug 20, 2014
  50. Nico WilliamsAug 20, 2014
  51. Stefan BellerAug 22, 2014
  52. Junio C HamanoAug 22, 2014
  53. Stefan BellerAug 22, 2014
  54. Junio C HamanoAug 22, 2014
  55. Stefan BellerAug 22, 2014
  56. Junio C HamanoAug 22, 2014
  57. Stefan BellerAug 22, 2014
  58. Junio C HamanoAug 25, 2014
  59. Jason PyeronAug 25, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.