)]}'
{
  "commit": "b5f2c0f50297fa5cd14af668ddd7fd923626cf8c",
  "tree": "58af599ee0724097371cb06a1e5d9ba8214cc2c5",
  "parents": [
    "f9c5ef8d8f94b364c758930f64b9305c52200b5b"
  ],
  "author": {
    "name": "Filippo Valsorda",
    "email": "filippo@golang.org",
    "time": "Tue Mar 17 20:34:51 2020 -0400"
  },
  "committer": {
    "name": "Filippo Valsorda",
    "email": "filippo@golang.org",
    "time": "Thu Mar 26 15:00:36 2020 +0000"
  },
  "message": "crypto/rsa,crypto/ecdsa,crypto/ed25519: implement PublicKey.Equal\n\nThis makes all modern public keys in the standard library implement a\ncommon interface (below) that can be used by applications for better\ntype safety and allows for checking that public (and private keys via\nPublic()) are equivalent.\n\ninterface {\n    Equal(crypto.PublicKey) bool\n}\n\nEquality for ECDSA keys is complicated, we take a strict interpretation\nthat works for all secure applications (the ones not using the\nunfortunate non-constant time CurveParams implementation) and fails\nclosed otherwise.\n\nTests in separate files to make them x_tests and avoid an import loop\nwith crypto/x509.\n\nRe-landing of CL 223754. Dropped the test that was assuming named curves\nare not implemented by CurveParams, because it\u0027s not true for all\ncurves, and anyway is not a property we need to test. There is still a\ntest to check that different curves make keys not Equal.\n\nFixes #21704\nFixes #38035\n\nReviewed-on: https://go-review.googlesource.com/c/go/+/223754\nReviewed-by: Katie Hockman \u003ckatie@golang.org\u003e\nChange-Id: I736759b145bfb4f7f8eecd78c324315d5a05385c\nReviewed-on: https://go-review.googlesource.com/c/go/+/225460\nRun-TryBot: Filippo Valsorda \u003cfilippo@golang.org\u003e\nRun-TryBot: Bryan C. Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "744182aac2822aa4a6c4aa7a37a799c02fe3de41",
      "old_mode": 33188,
      "old_path": "src/crypto/ecdsa/ecdsa.go",
      "new_id": "189399d12646d350517de6d293a9148021842259",
      "new_mode": 33188,
      "new_path": "src/crypto/ecdsa/ecdsa.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9b507dd4c23b67d75a2669502cf0d7665600d1d0",
      "new_mode": 33188,
      "new_path": "src/crypto/ecdsa/equal_test.go"
    },
    {
      "type": "modify",
      "old_id": "dcb4f9544f918320e110b8cc690862c9dba79728",
      "old_mode": 33188,
      "old_path": "src/crypto/ed25519/ed25519.go",
      "new_id": "b4f69564203f369e6dee23bd52aaf5b5eb77d21d",
      "new_mode": 33188,
      "new_path": "src/crypto/ed25519/ed25519.go"
    },
    {
      "type": "modify",
      "old_id": "cacd281f1cc62b9568ed3cd7f508274b8126833b",
      "old_mode": 33188,
      "old_path": "src/crypto/ed25519/ed25519_test.go",
      "new_id": "98e22a719ea04d33e6f96f08f50751ddfdcd2d00",
      "new_mode": 33188,
      "new_path": "src/crypto/ed25519/ed25519_test.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b00d0ea8a9b2ca9249caedb253fb71595e4b9ad1",
      "new_mode": 33188,
      "new_path": "src/crypto/rsa/equal_test.go"
    },
    {
      "type": "modify",
      "old_id": "d058949242d034fb89db0ed833ec479eb8c5c1a8",
      "old_mode": 33188,
      "old_path": "src/crypto/rsa/rsa.go",
      "new_id": "5a4299064016420edb2c21cec4dad3fca22cbc5d",
      "new_mode": 33188,
      "new_path": "src/crypto/rsa/rsa.go"
    }
  ]
}
