<!DOCTYPE html>
<!--
Copyright 2020 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<html lang="en">
<head>
<meta charset="utf-8">
<meta
name="viewport"
content="width=device-width, initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5">
<title>Secure Payment Confirmation Debug Tool</title>
<style>
#output {
font-family: monospace;
}
</style>
<script>
/**
* Computes the SHA-256 hash of the provided payload to print on screen.
*/
async function getHash() {
let raw_input = document.querySelector('#json').value;
let json_str = sanitizeInput(raw_input);
print('#json_str', json_str);
try {
let bytes = Uint8Array.from(json_str, c => c.charCodeAt(0));
print('#json_bytes', bytes.toString());
// Hash over binary form of b64 encoding.
let hash = await crypto.subtle.digest('SHA-256', bytes.buffer);
// hash is an ArrayBuffer, convert it to Uint8Array.
let array = new Uint8Array(hash);
print('#hash_bytes', array.toString());
} catch (e) {
console.log(e.message);
}
let json = JSON.parse(json_str);
console.log(json);
}
/**
* Creates a compat serialization of the provided raw JSON representation.
*/
function sanitizeInput(raw) {
let json = JSON.parse(raw);
let sanitized = JSON.stringify(json, null, 0);
return sanitized;
}
/**
* Helper function to print |value| to the DOMElement with |selector|.
*/
function print(selector, value) {
document.querySelector(selector).innerText = value;
}
</script>
</head>
<body>
<h1>Secure Payment Confirmation Unit Test Helper</h1>
<p>
This page is a helper utility to generate new test expectations for
//components/payments/content/secure_payment_confirmation_app_unittest.cc.
</p>
<p>Steps:</p>
<ol>
<li>Copy new payload into the text box.</li>
<li>Click on "Get SHA-256"</li>
<li>Copy the generated SHA-256 bytes into |expected_bytes| in secure_payment_confirmation_app_unittest.cc.</li>
</ol>
<hr>
<p>Payload:</p>
<textarea id="json" rows="20" cols="60">{
"merchantData": {
"merchantOrigin": "https://merchant.example",
"total": {
"currency": "USD",
"value":"1.25"
}
}
}</textarea>
<p><button id="getHash" onclick="getHash()">Get SHA-256</button></p>
<hr>
<div id="output">
<p>Input string: </p>
<div id="json_str"></div>
<p>Input bytes: </p>
<div id="json_bytes"></div>
<p>SHA-256 bytes: </p>
<div id="hash_bytes"></div>
</div>
</body>
</html>