8000 Test 4.5/1: finished · JayAyAre/PyScript-vs-JavaScript@59ec81e · GitHub
[go: up one dir, main page]

Skip to content

Commit 59ec81e

Browse files
committed
Test 4.5/1: finished
1 parent 197ce6f commit 59ec81e

File tree

22 files changed

+1056
-0
lines changed

22 files changed

+1056
-0
lines changed

4.5-criptografia/prueba-1/.rnd

1 KB
Binary file not shown.

4.5-criptografia/prueba-1/cert.pem

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDRzCCAi+gAwIBAgIJANMj6R5DLofFMA0GCSqGSIb3DQEBBQUAMDoxCzAJBgNV
3+
BAYTAkVTMRIwEAYDVQQIEwlCZXJrc2hpcmUxFzAVBgNVBAoTDk15IENvbXBhbnkg
4+
THRkMB4XDTI1MDQxODEzNDc1NVoXDTI2MDQxODEzNDc1NVowOjELMAkGA1UEBhMC
5+
RVMxEjAQBgNVBAgTCUJlcmtzaGlyZTEXMBUGA1UEChMOTXkgQ29tcGFueSBMdGQw
6+
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDB7w5U3dNVAZ9HgAbIvGUr
7+
O7NxfugrW3ZX03NyxJfqbA3GQBmLZv3Y139xXoVd39CpLu0REYl8St+b7nHEBA8g
8+
FdKZgCwyuI2PcN4Ewk+DZ9QUxjOVuj6bfsyOijNc7VJ35i4NH+Wj/t6079MJmn96
9+
DeRHhFFe+io6j8TfNXIblam8p2t03A2qAjsZRuXLkclZ5E7FJhVKEWnU6Wll7oI5
10+
9kqN8EmzWuV2RvGnFOvjR6QDaONAX8tMGC9cfvqE6HJ6zLX5FikLEUj3dSPDj8Wt
11+
QIelTuxBFK7CPoaNmconWIx2t3b7crvZ4Zxa+BHfwmuxorBpy+HIHgFZTddo1jL9
12+
AgMBAAGjUDBOMB0GA1UdDgQWBBSjaGpisyeSNA0aYM6eEVVzp2tsTTAfBgNVHSME
13+
GDAWgBSjaGpisyeSNA0aYM6eEVVzp2tsTTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3
14+
DQEBBQUAA4IBAQC5thww0G4R9wPampj/9CrtEku4EHgapuT7gMt3iQ0imUEUBh3g
15+
6PEkOAt4kukIc6V/8+p+kX2g+eXdTvOmNuWxjKofRXvt7C148rgvvTuah74AJtfU
16+
95untquyzGpVi/LAN3xMspqULM6ICXo27cKaFv38vYHLLDNKM7So+KCAQ/O8jtZn
17+
wJGN/t/MerPTRDFBhEkNzz4n2pUvvVOd9ccRbnTL2Ux89hbL9wgo7E372NAyJmRz
18+
ZqKIu+S63hSfck9HepM+dNvlf85edgvOzjB5hp1g1MJrFTDYYzZi2RE+tG+KRRVP
19+
pntJ1xn1GCZ2ShbpoXZPn54FtmtgAVIF/EDK
20+
-----END CERTIFICATE-----

4.5-criptografia/prueba-1/index.html

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Benchmarking: JavaScript vs PyScript</title>
7+
8+
9+
<script type="module" src="https://pyscript.net/releases/2024.8.1/core.js"></script>
10+
<link rel="stylesheet" href="https://pyscript.net/releases/2024.8.1/core.css">
11+
12+
<script src="javascript/main.js" defer></script>
13+
14+
<script>
15+
if (!crypto.randomUUID) {
16+
crypto.randomUUID = function() {
17+
// Genera un UUID v4
18+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
19+
const r = Math.random() * 16 | 0;
20+
const v = c === 'x' ? r : (r & 0x3 | 0x8);
21+
return v.toString(16);
22+
});
23+
}
24+
}
25+
document.addEventListener('py:ready', () => {
26+
document.getElementById("run-button-py").disabled = false;
27+
28+
document.getElementById("run-button-py").textContent = 'Run in PyScript';
29+
console.log('PyScript fully loaded');
30+
});
31+
let pyTimer = null;
32+
let pyStartTime = 0;
33+
34+
function startPyTimer() {
35+
pyStartTime = performance.now();
36+
const timerElement = document.getElementById("py-timer-display");
37+
38+
function updateTimer() {
39+
if (!pyTimer) return;
40+
41+
const elapsedMs = performance.now() - pyStartTime;
42+
const elapsed = (elapsedMs / 1000).toFixed(3);
43+
timerElement.textContent = `PyScript Timer: ${elapsed} s`;
44+
45+
pyTimer = requestAnimationFrame(updateTimer);
46+
}
47+
48+
cancelAnimationFrame(pyTimer);
49+
pyTimer = requestAnimationFrame(updateTimer);
50+
}
51+
52+
function stopPyTimer() {
53+
cancelAnimationFrame(pyTimer);
54+
pyTimer = null;
55+
56+
const elapsedMs = performance.now() - pyStartTime;
57+
const elapsed = (elapsedMs / 1000).toFixed(3);
58+
document.getElementById("py-timer-display").textContent = `PyScript Timer: ${elapsed} s`;
59+
}
60+
let startTime = performance.now();
61+
62+
document.addEventListener('py:ready', () => {
63+
let endTime = performance.now();
64+
let loadTime = endTime - startTime;
65+
document.getElementById("output").innerText += `PLT: ${loadTime.toFixed(2)} ms`;
66+
});
67+
68+
function clearCell(elementId) {
69+
const operations = ['output', 'exact'];
70+
operations.forEach(op => {
71+
const element = document.getElementById(`${elementId}-${op}`);
72+
if (element) {
73+
element.innerHTML = "";
74+
}
75+
});
76+
}
77+
</script>
78+
<body>
79+
<script type="py" src="python/main.py" config="json/pyscript-main.json"></script>
80+
81+
<h1>Benchmark: cryptographic proofs</h1>
82+
<h2 id="output"></h2>
83+
84+
<div>
85+
<div>
86+
<label>Número de repeticiones:</label>
87+
<input type="number" id="num-repetitions-js" value="5" min="1">
88+
</div>
89+
<div>
90+
<label>Tamaño del archivo (MB):</label>
91+
<input type="number" id="file-size-js" value="1" min="0.1" step="0.1">
92+
</div>
93+
<button id="run-button-js" onclick="javascriptBenchmark()">Run JavaScript</button>
94+
</div>
95+
96+
97+
<div>
98+
<div>
99+
<label>Número de repeticiones:</label>
100+
<input type="number" id="num-repetitions-py" value="5" min="1">
101+
</div>
102+
<div>
103+
<label>Tamaño del archivo (MB):</label>
104+
<input type="number" id="file-size-py" value="1" min="0.1" step="0.1">
105+
</div>
106+
<button id="run-button-py" py-click="launch_worker" disabled>Run PyScript (Loading...)</button>
107+
</div>
108+
109+
110+
<h2 id="js-timer-display">JS Timer: 0.00 s</h2>
111+
<h2 id="py-timer-display">PyScript Timer: 0.00 s</h2>
112+
<div id="debug-console"></div>
113+
114+
115+
<table id="metrics-container">
116+
<thead>
117+
<tr>
118+
<th>Metric</th>
119+
<th>JavaScript</th>
120+
<th>PyScript</th>
121+
</tr>
122+
</thead>
123+
<tbody>
124+
<tr>
125+
<td>Times</td>
126+
<td id="javascript-output"></td>
127+
<td id="pyscript-output"></td>
128+
</tr>
129+
<tr>
130+
<td>Total</td>
131+
<td id="javascript-exact"></td>
132+
<td id="pyscript-exact"></td>
133+
</tr>
134+
</tbody>
135+
</table>
136+
</body>
137+
</html>
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
// main.js
2+
let worker = null;
3+
let jsTimer = null;
4+
let jsStartTime = 0;
5+
6+
function startJsTimer() {
7+
jsStartTime = performance.now();
8+
const timerElement = document.getElementById("js-timer-display");
9+
function updateTimer() {
10+
if (!jsTimer) return;
11+
const elapsed = ((performance.now() - jsStartTime) / 1000).toFixed(3);
12+
timerElement.textContent = `JS Timer: ${elapsed} s`;
13+
jsTimer = requestAnimationFrame(updateTimer);
14+
}
15+
cancelAnimationFrame(jsTimer);
16+
jsTimer = requestAnimationFrame(updateTimer);
17+
}
18+
19+
function stopJsTimer() {
20+
cancelAnimationFrame(jsTimer);
21+
jsTimer = null;
22+
const elapsed = ((performance.now() - jsStartTime) / 1000).toFixed(3);
23+
document.getElementById(
24+
"js-timer-display"
25+
).textContent = `JS Timer: ${elapsed} s`;
26+
}
27+
28+
async function javascriptBenchmark() {
29+
try {
30+
startJsTimer();
31+
const startWorkerTime = performance.now();
32+
if (!worker) {
33+
worker = new Worker("./javascript/worker.js");
34+
}
35+
const workerTime = performance.now() - startWorkerTime;
36+
37+
clearCell("javascript");
38+
39+
const repetitions = parseInt(
40+
document.getElementById("num-repetitions-js").value,
41+
10
42+
);
43+
const fileSizeMb = parseFloat(
44+
document.getElementById("file-size-js").value
45+
);
46+
const id = `js-${Date.now()}`;
47+
48+
const resultJson = await new Promise((resolve, reject) => {
49+
// handler que sólo procesa nuestro mensaje
50+
function onMessage(e) {
51+
if (e.data.id !== id) return;
52+
worker.removeEventListener("message", onMessage);
53+
if (e.data.error) {
54+
reject(new Error(e.data.error));
55+
} else if (e.data.json !== undefined) {
56+
resolve(e.data.json);
57+
} else {
58+
reject(new Error("Worker dont return results"));
59+
}
60+
}
61+
worker.addEventListener("message", onMessage);
62+
worker.postMessage({
63+
id,
64+
type: "js_run_js_benchmark",
65+
workerTime,
66+
repetitions,
67+
fileSizeMb,
68+
});
69+
});
70+
71+
const result = JSON.parse(resultJson);
72+
displayResult(result, workerTime);
73+
} catch (err) {
74+
console.error("Benchmark error:", err);
75+
const out = document.getElementById("javascript-output");
76+
out.textContent = `Error: ${err.message}`;
77+
} finally {
78+
stopJsTimer();
79+
}
80+
}
81+
82+
function clearCell(prefix) {
83+
["output", "exact"].forEach((field) => {
84+
const el = document.getElementById(`${prefix}-${field}`);
85+
if (el) el.textContent = "";
86+
});
87+
}
88+
89+
function displayResult(result, workerTime) {
90+
const out = document.getElementById("javascript-output");
91+
const exact = document.getElementById("javascript-exact");
92+
93+
out.innerHTML = `
94+
<div>Worker time: ${workerTime.toFixed(2)} ms</div>
95+
<div>Simulated file: ${result.file_size_mb.toFixed(2)} MB</div>
96+
<div>Repetitions: ${result.repetitions}</div>
97+
<div>Avg hash time: ${result.hash_avg_time_ms.toFixed(2)} ms</div>
98+
<div>Avg verify time: ${result.verify_avg_time_ms.toFixed(2)} ms</div>
99+
<div>Last hash (shortened): ${result.last_digest.slice(0, 20)}...</div>
100+
`;
101+
exact.innerHTML = `
102+
<div>Total op time: ${result.total_time_ms.toFixed(2)} ms</div>
103+
<div>Total time: ${result.total_time.toFixed(2)} ms</div>
104+
`;
105+
}
106+
107+
// dejar expuesta
108+
window.javascriptBenchmark = javascriptBenchmark;
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
self.addEventListener("message", async (event) => {
2+
const data = event.data;
3+
4+
if (data.type === "js_run_js_benchmark") {
5+
try {
6+
const { id, repetitions, fileSizeMb, workerTime } = data;
7+
8+
await new Promise((r) => setTimeout(r, 100));
9+
10+
const fileSizeBytes = Math.floor(fileSizeMb * 1024 * 1024);
11+
const buffer = getRandomBuffer(fileSizeBytes);
12+
13+
let totalHashTime = 0;
14+
let totalVerifyTime = 0;
15+
let lastDigest = "";
16+
17+
const encoder = new TextEncoder();
18+
19+
const startBenchmark = performance.now();
20+
21+
for (let i = 0; i < repetitions; i++) {
22+
const hashStart = performance.now();
23+
const hashBuffer = await crypto.subtle.digest(
24+
"SHA-256",
25+
buffer
26+
);
27+
totalHashTime += performance.now() - hashStart;
28+
29+
const verifyStart = performance.now();
30+
const verifyBuffer = await crypto.subtle.digest(
31+
"SHA-256",
32+
buffer
33+
);
34+
totalVerifyTime += performance.now() - verifyStart;
35+
36+
lastDigest = [...new Uint8Array(hashBuffer)]
37+
.map((b) => b.toString(16).padStart(2, "0"))
38+
.join("");
39+
}
40+
41+
const totalTime = performance.now() - startBenchmark;
42+
43+
const result = {
44+
repetitions,
45+
file_size_mb: fileSizeMb,
46+
hash_avg_time_ms: totalHashTime / repetitions,
47+
verify_avg_time_ms: totalVerifyTime / repetitions,
48+
total_time_ms: totalHashTime + totalVerifyTime,
49+
last_digest: lastDigest,
50+
total_time: totalTime,
51+
};
52+
53+
self.postMessage({ id, json: JSON.stringify(result) });
54+
} catch (error) {
55+
self.postMessage({
56+
id: data.id,
57+
error: `Error in worker: ${error.message}`,
58+
});
59+
}
60+
}
61+
});
62+
63+
function getRandomBuffer(size) {
64+
const buffer = new Uint8Array(size);
65+
const chunkSize = 65536;
66+
for (let offset = 0; offset < size; offset += chunkSize) {
67+
const chunk = Math.min(chunkSize, size - offset);
68+
crypto.getRandomValues(buffer.subarray(offset, offset + chunk));
69+
}
70+
return buffer;
71+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"files": {
3+
"/python/worker.py": "worker.py"
4+
},
5+
"packages": ["pycryptodome"]
6+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"packages": ["pycryptodome"]
3+
}

4.5-criptografia/prueba-1/key.pem

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDB7w5U3dNVAZ9H
3+
gAbIvGUrO7NxfugrW3ZX03NyxJfqbA3GQBmLZv3Y139xXoVd39CpLu0REYl8St+b
4+
7nHEBA8gFdKZgCwyuI2PcN4Ewk+DZ9QUxjOVuj6bfsyOijNc7VJ35i4NH+Wj/t60
5+
79MJmn96DeRHhFFe+io6j8TfNXIblam8p2t03A2qAjsZRuXLkclZ5E7FJhVKEWnU
6+
6Wll7oI59kqN8EmzWuV2RvGnFOvjR6QDaONAX8tMGC9cfvqE6HJ6zLX5FikLEUj3
7+
dSPDj8WtQIelTuxBFK7CPoaNmconWIx2t3b7crvZ4Zxa+BHfwmuxorBpy+HIHgFZ
8+
Tddo1jL9AgMBAAECggEAAO9iJk6bgkFrvzCC19zwr/CtwNJX1D2wqGPAnsEL6nly
9+
543PkbiBaNZBKw7FndpCa05qnjZzb0H9KgdQTR2n5QO17D+N9wCkzhhBOcymDYAm
10+
qaL7BLHNM3q9CcLo1H3gc+uMNUv+E3hbIow1fEpeavw+KYodylNyeK3QyTK8xh1E
11+
eakN2ydfCTQBfi5KE4vnJRjs+YbhexfVr6ylVZKC1bb5bnsvc8AtwkQ/sus0JFxV
12+
lnI8y4Apglnu1NYz78lZS/atXQEUqGO5gCartZe1MxHfn30KaLy9FdQd+ITsyDHe
13+
P8GJ+c6ubH022LB+aztENcSimvXtctg42d8z+Ko/gQKBgQDop+/0OcV4np89A3iq
14+
FCjnZQ1cWucdf+/jea02ANinaBkymoZO3j3BliWXbwf5BewLhHU5d6knloiqqdJr
15+
pdqYXEpPQ+bS0Jiu/OpUIlw6Mhe3CEbJzrVKIppQTiUTmkVc0Ejfu0c46wonG/Mg
16+
8hAFNkcxNbbnYhw7WgN1alkKqQKBgQDVZH2HQ9DB8j0prkkqBtGjk5E3uCKbdM/h
17+
fP3QYfhcQdDSuJXH2KdCTK5Xpx3pfv9IeJzIx/AmiKU+Z0309LI9gvx3KxqMIDy9
18+
uZfi3ACs4F2405Ut9+x/tVnXwfiFCU7Go1z8PGWnQCXEt3PXOhqMh6J8SlV06YOj
19+
5VKcbhvONQKBgQDWTXLCxMA3pezJ17u69kzjL/rJmlYOnz0JjJfXCZqHQWUMbrfO
20+
R/ocqkBAKB7w69qMlVshLy7Z71g906WmUKR0+XXdY49nmos5jHAQRYIsfN3JU89Y
21+
rpXhDtSTqheO4eiIYLbvluM4849rjNw7+Zx2IJQdKPwsT/vvU6+h5O7V2QKBgQCz
22+
N4eZj+IG0Sx/EgoOitWMXQYsVrByAUQJ69C7L1zIFtqL70yUICgxLXeK1CbyEJ/U
23+
PL/ofMr7ge3OIDK/1LbRpG3mo8PTBcwdx36BoCXNC06LSN/UUJFGnIeNBjJzgOKx
24+
P0h76zmwotZVhYF7tCfR+KQFYOSuoOPXRWUBThR6NQKBgCqUgmN0Uy7gDj9AhU2o
25+
/sV/fdnHwvenDlspIa4t7IfUcMfiOKoC004jkSm/cJE8Rvl3jfjzNeiNN4A4ckiA
26+
JDwexeMzHDD6ipslT29VfniIzkoE/gWxBiMo/RWUjbl7vsXZcQJd2ylAQ7yfekjM
27+
DeZG2BE/MeYfGGgOpd2987o/
28+
-----END PRIVATE KEY-----

0 commit comments

Comments
 (0)
0