)]}'
{
  "commit": "4298d773794dcfef675aeeacd970bcc8f2fe406d",
  "tree": "fd5f4ff6a373fe3453f27f940c9adbd5f9c94cf7",
  "parents": [
    "c18ef750ee7f6c5a6abdca8b7848286250784a06"
  ],
  "author": {
    "name": "David Benjamin",
    "email": "davidben@chromium.org",
    "time": "Sat Dec 19 00:18:25 2015 -0500"
  },
  "committer": {
    "name": "Adam Langley",
    "email": "agl@google.com",
    "time": "Tue Dec 22 21:51:30 2015 +0000"
  },
  "message": "Implement draft-ietf-tls-curve25519-01 in C.\n\nThe new curve is not enabled by default.\n\nAs EC_GROUP/EC_POINT is a bit too complex for X25519, this introduces an\nSSL_ECDH_METHOD abstraction which wraps just the raw ECDH operation. It\nalso tidies up some of the curve code which kept converting back and\nforce between NIDs and curve IDs. Now everything transits as curve IDs\nexcept for API entry points (SSL_set1_curves) which take NIDs. Those\nconvert immediately and act on curve IDs from then on.\n\nNote that, like the Go implementation, this slightly tweaks the order of\noperations. The client sees the server public key before sending its\nown. To keep the abstraction simple, SSL_ECDH_METHOD expects to\ngenerate a keypair before consuming the peer\u0027s public key. Instead, the\nclient handshake stashes the serialized peer public value and defers\nparsing it until it comes time to send ClientKeyExchange. (This is\nanalogous to what it was doing before where it stashed the parsed peer\npublic value instead.)\n\nIt still uses TLS 1.2 terminology everywhere, but this abstraction should also\nbe compatible with TLS 1.3 which unifies (EC)DH-style key exchanges.\n(Accordingly, this abstraction intentionally does not handle parsing the\nClientKeyExchange/ServerKeyExchange framing or attempt to handle asynchronous\nplain RSA or the authentication bits.)\n\nBUG\u003d571231\n\nChange-Id: Iba09dddee5bcdfeb2b70185308e8ab0632717932\nReviewed-on: https://boringssl-review.googlesource.com/6780\nReviewed-by: Adam Langley \u003cagl@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bce981c3135cdd3e017498f4df5f683e2855b8f3",
      "old_mode": 33188,
      "old_path": "include/openssl/ssl.h",
      "new_id": "589f4c4d578d7229f242582909bfd8821600bd36",
      "new_mode": 33188,
      "new_path": "include/openssl/ssl.h"
    },
    {
      "type": "modify",
      "old_id": "a5ad1260eea5c0ca4a2e193b83218760d0f2667f",
      "old_mode": 33188,
      "old_path": "ssl/CMakeLists.txt",
      "new_id": "c82cb9bc257e4952e252cf1bc1dd9d20640612cc",
      "new_mode": 33188,
      "new_path": "ssl/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "5e3dd09967c1fabf1b3ebd3d07f1bd46f1a34a42",
      "old_mode": 33188,
      "old_path": "ssl/internal.h",
      "new_id": "77415272a7763ce21558d4b09e0ce4663966a161",
      "new_mode": 33188,
      "new_path": "ssl/internal.h"
    },
    {
      "type": "modify",
      "old_id": "85c04089feae7b222fd0b1c21985f25e803637ea",
      "old_mode": 33188,
      "old_path": "ssl/s3_clnt.c",
      "new_id": "6d5e3b1c6c124ffff5b03008ae619c56a6c70812",
      "new_mode": 33188,
      "new_path": "ssl/s3_clnt.c"
    },
    {
      "type": "modify",
      "old_id": "3f8cea06620d3469fe657c0e3bab3013c373dab1",
      "old_mode": 33188,
      "old_path": "ssl/s3_lib.c",
      "new_id": "e8f7cc24039890538cec53683d32d591d95d7281",
      "new_mode": 33188,
      "new_path": "ssl/s3_lib.c"
    },
    {
      "type": "modify",
      "old_id": "bcd662abbb0d32b27f6fbdeef2e5445d3b95f8b0",
      "old_mode": 33188,
      "old_path": "ssl/s3_srvr.c",
      "new_id": "ef2c396c2b03a01b46d9dd5ab3d5b12cb43a1734",
      "new_mode": 33188,
      "new_path": "ssl/s3_srvr.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3328f5abf023441a28c5923b66d9871955b432dd",
      "new_mode": 33188,
      "new_path": "ssl/ssl_ecdh.c"
    },
    {
      "type": "modify",
      "old_id": "beb57ad574b9a8baeda16649ee2d72e7365be02a",
      "old_mode": 33188,
      "old_path": "ssl/ssl_lib.c",
      "new_id": "a4fcad5115fcaed1095f7c8111b931d179f1002d",
      "new_mode": 33188,
      "new_path": "ssl/ssl_lib.c"
    },
    {
      "type": "modify",
      "old_id": "3e5d9d9f86ebb30fc0f4ffc5de6b062c13f08d95",
      "old_mode": 33188,
      "old_path": "ssl/t1_lib.c",
      "new_id": "eb1e569156ffd2716970da463b3310d6124c005c",
      "new_mode": 33188,
      "new_path": "ssl/t1_lib.c"
    },
    {
      "type": "modify",
      "old_id": "73ca87d8024b8e73775bf8d4ef523dbc67df8890",
      "old_mode": 33188,
      "old_path": "ssl/test/bssl_shim.cc",
      "new_id": "562e6c58c5dbc0874ca4cceada786993264c46f5",
      "new_mode": 33188,
      "new_path": "ssl/test/bssl_shim.cc"
    },
    {
      "type": "modify",
      "old_id": "2a32cd3cee3a69080f7fbc5e930f2c283270289d",
      "old_mode": 33188,
      "old_path": "ssl/test/runner/runner.go",
      "new_id": "5600ec6d8933088c71fb22b07e321ec3fc411501",
      "new_mode": 33188,
      "new_path": "ssl/test/runner/runner.go"
    }
  ]
}
