tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

integrity.sub.any.js (4558B)


      1 // META: global=window,dedicatedworker,sharedworker
      2 // META: script=../resources/utils.js
      3 
      4 function integrity(desc, url, integrity, initRequestMode, shouldPass) {
      5  var fetchRequestInit = {'integrity': integrity}
      6  if (!!initRequestMode && initRequestMode !== "") {
      7    fetchRequestInit.mode = initRequestMode;
      8  }
      9 
     10  if (shouldPass) {
     11    promise_test(function(test) {
     12      return fetch(url, fetchRequestInit).then(function(resp) {
     13        if (initRequestMode !== "no-cors") {
     14          assert_equals(resp.status, 200, "Response's status is 200");
     15        } else {
     16          assert_equals(resp.status, 0, "Opaque response's status is 0");
     17          assert_equals(resp.type, "opaque");
     18        }
     19      });
     20    }, desc);
     21  } else {
     22    promise_test(function(test) {
     23      return promise_rejects_js(test, TypeError, fetch(url, fetchRequestInit));
     24    }, desc);
     25  }
     26 }
     27 
     28 const topSha256 = "sha256-KHIDZcXnR2oBHk9DrAA+5fFiR6JjudYjqoXtMR1zvzk=";
     29 const topSha384 = "sha384-MgZYnnAzPM/MjhqfOIMfQK5qcFvGZsGLzx4Phd7/A8fHTqqLqXqKo8cNzY3xEPTL";
     30 const topSha512 = "sha512-D6yns0qxG0E7+TwkevZ4Jt5t7Iy3ugmAajG/dlf6Pado1JqTyneKXICDiqFIkLMRExgtvg8PlxbKTkYfRejSOg==";
     31 const topSha512wrongpadding = "sha512-D6yns0qxG0E7+TwkevZ4Jt5t7Iy3ugmAajG/dlf6Pado1JqTyneKXICDiqFIkLMRExgtvg8PlxbKTkYfRejSOg";
     32 const topSha512base64url = "sha512-D6yns0qxG0E7-TwkevZ4Jt5t7Iy3ugmAajG_dlf6Pado1JqTyneKXICDiqFIkLMRExgtvg8PlxbKTkYfRejSOg==";
     33 const topSha512base64url_nopadding = "sha512-D6yns0qxG0E7-TwkevZ4Jt5t7Iy3ugmAajG_dlf6Pado1JqTyneKXICDiqFIkLMRExgtvg8PlxbKTkYfRejSOg";
     34 const invalidSha256 = "sha256-dKUcPOn/AlUjWIwcHeHNqYXPlvyGiq+2dWOdFcE+24I=";
     35 const invalidSha512 = "sha512-oUceBRNxPxnY60g/VtPCj2syT4wo4EZh2CgYdWy9veW8+OsReTXoh7dizMGZafvx9+QhMS39L/gIkxnPIn41Zg==";
     36 
     37 const path = dirname(location.pathname) + RESOURCES_DIR + "top.txt";
     38 const url = path;
     39 const corsUrl =
     40  `http://{{host}}:{{ports[http][1]}}${path}?pipe=header(Access-Control-Allow-Origin,*)`;
     41 const corsUrl2 = `https://{{host}}:{{ports[https][0]}}${path}`
     42 
     43 integrity("Empty string integrity", url, "", /* initRequestMode */ undefined,
     44         /* shouldPass */ true);
     45 integrity("SHA-256 integrity", url, topSha256, /* initRequestMode */ undefined,
     46          /* shouldPass */ true);
     47 integrity("SHA-384 integrity", url, topSha384, /* initRequestMode */ undefined,
     48          /* shouldPass */ true);
     49 integrity("SHA-512 integrity", url, topSha512, /* initRequestMode */ undefined,
     50          /* shouldPass */ true);
     51 integrity("SHA-512 integrity with missing padding", url, topSha512wrongpadding,
     52          /* initRequestMode */ undefined, /* shouldPass */ true);
     53 integrity("SHA-512 integrity base64url encoded", url, topSha512base64url,
     54           /* initRequestMode */ undefined, /* shouldPass */ true);
     55 integrity("SHA-512 integrity base64url encoded with missing padding", url,
     56            topSha512base64url_nopadding, /* initRequestMode */ undefined,
     57            /* shouldPass */ true);
     58 integrity("Invalid integrity", url, invalidSha256,
     59          /* initRequestMode */ undefined, /* shouldPass */  false);
     60 integrity("Multiple integrities: valid stronger than invalid", url,
     61          invalidSha256 + " " + topSha384, /* initRequestMode */ undefined,
     62          /* shouldPass */ true);
     63 integrity("Multiple integrities: invalid stronger than valid",
     64          url, invalidSha512 + " " + topSha384, /* initRequestMode */ undefined,
     65          /* shouldPass */ false);
     66 integrity("Multiple integrities: invalid as strong as valid", url,
     67          invalidSha512 + " " + topSha512, /* initRequestMode */ undefined,
     68          /* shouldPass */ true);
     69 integrity("Multiple integrities: both are valid", url,
     70          topSha384 + " " + topSha512, /* initRequestMode */ undefined,
     71          /* shouldPass */ true);
     72 integrity("Multiple integrities: both are invalid", url,
     73          invalidSha256 + " " + invalidSha512, /* initRequestMode */ undefined,
     74          /* shouldPass */ false);
     75 integrity("CORS empty integrity", corsUrl, "", /* initRequestMode */ undefined,
     76          /* shouldPass */ true);
     77 integrity("CORS SHA-512 integrity", corsUrl, topSha512,
     78          /* initRequestMode */ undefined, /* shouldPass */ true);
     79 integrity("CORS invalid integrity", corsUrl, invalidSha512,
     80          /* initRequestMode */ undefined, /* shouldPass */ false);
     81 
     82 integrity("Empty string integrity for opaque response", corsUrl2, "",
     83          /* initRequestMode */ "no-cors", /* shouldPass */ true);
     84 integrity("SHA-* integrity for opaque response", corsUrl2, topSha512,
     85          /* initRequestMode */ "no-cors", /* shouldPass */ false);
     86 
     87 done();