/* Leaving optional fields out should work, although of course then we can't * assert much about the resulting hashes. The resulting header should look * roughly like: * Hawk id="123456", ts="1378764955", nonce="QkynqsrS44M=", mac="/C5NsoAs2fVn+d/I5wMfwe2Gr1MZyAJ6pFyDHG4Gf9U="
*/
result = await compute(uri_https, method, { credentials });
let fields = result.field.split(" "); Assert.equal(fields[0], "Hawk"); Assert.equal(fields[1], 'id="123456",'); // from creds.id Assert.ok(fields[2].startsWith('ts="')); /* The HAWK spec calls for seconds-since-epoch, not ms-since-epoch. * Warning: this test will fail in the year 33658, and for time travellers
* who journey earlier than 2001. Please plan accordingly. */ Assert.ok(result.artifacts.ts > 1000 * 1000 * 1000); Assert.ok(result.artifacts.ts < 1000 * 1000 * 1000 * 1000); Assert.ok(fields[3].startsWith('nonce="')); Assert.equal(fields[3].length, 'nonce="12345678901=",'.length); Assert.equal(result.artifacts.nonce.length, "12345678901=".length);
/* Using a lower-case method name shouldn't affect the hash. */
result = await compute(uri_https_upper, method.toLowerCase(), opts); Assert.equal(
result.field, 'Hawk id="123456", ts="1353809207", nonce="Ygvqdz", ' + 'hash="2QfCt3GuY9HQnHWyWD3wX68ZOKbynqlfYmuO2ZBRqtY=", ' + 'ext="Bazinga!", ' + 'mac="q1CwFoSHzPZSkbIvl0oYlD+91rBUEvFk763nMjMndj8="'
);
/* The localtimeOffsetMsec field should be honored. HAWK uses this to * compensate for clock skew between client and server: if the request is * rejected with a timestamp out-of-range error, the error includes the * server's time, and the client computes its clock offset and tries again. * Clients can remember this offset for a while.
*/
/* Search/query-args in URIs should be included in the hash. */
let makeURI = CommonUtils.makeURI;
result = await compute(makeURI("http://example.net/path"), method, opts); Assert.equal(result.artifacts.resource, "/path"); Assert.equal(
result.artifacts.mac, "WyKHJjWaeYt8aJD+H9UeCWc0Y9C+07ooTmrcrOW4MPI="
);
/* If "hash" is provided, "payload" is ignored. */
result = await compute(makeURI("http://example.net/path"), method, {
credentials,
ts: 1353809207,
nonce: "Ygvqdz",
hash: "66DiyapJ0oGgj09IXWdMv8VCg9xk0PL5RqX7bNnQW2k=",
payload: "something else",
}); Assert.equal(
result.artifacts.hash, "66DiyapJ0oGgj09IXWdMv8VCg9xk0PL5RqX7bNnQW2k="
); Assert.equal(
result.artifacts.mac, "2B++3x5xfHEZbPZGDiK3IwfPZctkV4DUr2ORg1vIHvk="
);
// the payload "hash" is also non-urlsafe base64 (+/)
result = await compute(makeURI("http://example.net/path"), method, {
credentials,
ts: 1353809207,
nonce: "Ygvqdz",
payload: "something else",
}); Assert.equal(
result.artifacts.hash, "lERFXr/IKOaAoYw+eBseDUSwmqZTX0uKZpcWLxsdzt8="
); Assert.equal(
result.artifacts.mac, "jiZuhsac35oD7IdcblhFncBr8tJFHcwWLr8NIYWr9PQ="
);
/* Test non-ascii hostname. HAWK (via the node.js "url" module) punycodes * "ëxample.net" into "xn--xample-ova.net" before hashing. I still think * punycode was a bad joke that got out of the lab and into a spec.
*/
/* HAWK (the node.js library) uses a URL parser which stores the "port" * field as a string, but makeURI() gives us an integer. So we'll diverge * on ports with a leading zero. This test vector would fail on the node.js * library (HAWK-1.1.1), where they get a MAC of * "T+GcAsDO8GRHIvZLeepSvXLwDlFJugcZroAy9+uAtcw=". I think HAWK should be * updated to do what we do here, so port="01234" should get the same hash * as port="1234".
*/
result = await compute(makeURI("http://example.net:01234/path"), method, {
credentials,
ts: 1353809207,
nonce: "Ygvqdz",
}); Assert.equal(
result.artifacts.mac, "6D3JSFDtozuq8QvJTNUc1JzeCfy6h5oRvlhmSTPv6LE="
); Assert.equal(
result.field, 'Hawk id="123456", ts="1353809207", nonce="Ygvqdz", mac="6D3JSFDtozuq8QvJTNUc1JzeCfy6h5oRvlhmSTPv6LE="'
);
});
add_test(function test_strip_header_attributes() {
let strip = CryptoUtils.stripHeaderAttributes;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.