)]}'
{
  "commit": "d68c3ecb62c850b645dc072a8d78006286bf81ca",
  "tree": "775dc6f6b97f1c121295d3bca221635866f838cb",
  "parents": [
    "3fbbcd23f1cb824e69491a5930cfeff09b12f4d2"
  ],
  "author": {
    "name": "Han-Wen Nienhuys",
    "email": "hanwen@google.com",
    "time": "Wed Apr 06 22:15:54 2016 +0200"
  },
  "committer": {
    "name": "Adam Langley",
    "email": "agl@golang.org",
    "time": "Tue Apr 12 17:14:56 2016 +0000"
  },
  "message": "x/crypto/ssh: make sure the initial key exchange happens once.\n\nThis is done by running the key exchange and setting the session ID\nunder mutex. If the first exchange encounters an already set session\nID, then do nothing.\n\nThis fixes a race condition:\n\nOn setting up the connection, both sides sent a kexInit to initiate\nthe first (mandatory) key exchange.  If one side was faster, the\nfaster side might have completed the key exchange, before the slow\nside had a chance to send a kexInit.  The slow side would send a\nkexInit which would trigger a second key exchange. The resulting\nconfirmation message (msgNewKeys) would confuse the authentication\nloop.\n\nThis fix removes sessionID from the transport struct.\n\nThis fix also deletes the unused interface rekeyingTransport.\n\nFixes #15066\n\nChange-Id: I7f303bce5d3214c9bdd58f52d21178a185871d90\nReviewed-on: https://go-review.googlesource.com/21606\nReviewed-by: Adam Langley \u003cagl@golang.org\u003e\nReviewed-by: Han-Wen Nienhuys \u003chanwen@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bc6f47a97418d20c97757e1b6b9fd3d38f29ee72",
      "old_mode": 33188,
      "old_path": "ssh/client.go",
      "new_id": "e0f1a4d584f381f639efa1788f117a716a465dec",
      "new_mode": 33188,
      "new_path": "ssh/client.go"
    },
    {
      "type": "modify",
      "old_id": "1c54f758781ee08c3e6a4179a0207b4b1e18c9d4",
      "old_mode": 33188,
      "old_path": "ssh/handshake.go",
      "new_id": "08abd66a92ab42e82b9f94e26fdea09121d4d263",
      "new_mode": 33188,
      "new_path": "ssh/handshake.go"
    },
    {
      "type": "modify",
      "old_id": "bd7fe7752aad7b9a0fdaeca780ef0f6d14d00ae4",
      "old_mode": 33188,
      "old_path": "ssh/handshake_test.go",
      "new_id": "ef97d572805761257e0b93d1eaa9b622e40bca22",
      "new_mode": 33188,
      "new_path": "ssh/handshake_test.go"
    },
    {
      "type": "modify",
      "old_id": "3ec603c0a1597e19a3e267790326275a46e48374",
      "old_mode": 33188,
      "old_path": "ssh/kex.go",
      "new_id": "9285ee31deec3a3efc8f96b3568fcc4f7d96a1d9",
      "new_mode": 33188,
      "new_path": "ssh/kex.go"
    },
    {
      "type": "modify",
      "old_id": "4781eb78050d42f159a36292cf115d7c02a25ac9",
      "old_mode": 33188,
      "old_path": "ssh/server.go",
      "new_id": "d53050197c3c275100c346e4fec2bd89e4ab3d98",
      "new_mode": 33188,
      "new_path": "ssh/server.go"
    },
    {
      "type": "modify",
      "old_id": "4de98a6a5ad47ddb306752cd3dc33a01b5f48575",
      "old_mode": 33188,
      "old_path": "ssh/transport.go",
      "new_id": "bf7dd61fc8263e5ac0530501263b37b2e2646106",
      "new_mode": 33188,
      "new_path": "ssh/transport.go"
    }
  ]
}
