commit 40426f09f37ff84f93f20f156ab638ce27ff977a Author: cypherpunks cypherpunks@torproject.org Date: Sat May 20 11:46:36 2017 +0000
Hash the fingerprints from summary documents
The summary documents are used for searches and form the basis for subsequent details document requests. The details documents requests use the lookup parameter which supports hashed and double hashed fingerprints to prevent users leaking bridge fingerprints.
If a relay and a bridge share the same fingerprint FP (for example when a bridge becomes a relay without changing its fingerprint) the summary document for fingerprint FP contains both the relay fingerprint RP (where RP == FP) and the hashed bridge fingerprint BP (where BP == H(FP)).
The details document request for RP returns only the relay because RP == FP and the details document request for BP returns the relay and the bridge because BP == H(FP) == H(RP). Relays take preference over bridges when both are returned and results in Atlas displaying the relay details twice on the search page.
Hashing the fingerprints in the summary document results in details document requests for BP and H(BP) where BP returns the relay and bridge as before but where H(BP) returns only the bridge.
Closes #21615. --- js/collections/results.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/js/collections/results.js b/js/collections/results.js index c341321..54cd36a 100644 --- a/js/collections/results.js +++ b/js/collections/results.js @@ -3,8 +3,9 @@ define([ 'jquery', 'underscore', 'backbone', - 'models/relay' -], function($, _, Backbone, relayModel){ + 'models/relay', + 'jssha' +], function($, _, Backbone, relayModel, jsSHA){ var resultsCollection = Backbone.Collection.extend({ model: relayModel, baseurl: 'https://onionoo.torproject.org/summary?search=', @@ -24,12 +25,12 @@ define([ } _.each(response.relays, function(relay, resultsC) { crelay = new relayModel; - crelay.fingerprint = relay.f; + crelay.fingerprint = new jsSHA(relay.f, "HEX").getHash("SHA-1", "HEX").toUpperCase(); relays.push(crelay); }); _.each(response.bridges, function(relay, resultsC) { crelay = new relayModel; - crelay.fingerprint = relay.h; + crelay.fingerprint = new jsSHA(relay.h, "HEX").getHash("SHA-1", "HEX").toUpperCase(); relays.push(crelay); }); if (relays.length == 0) {