Packages

Ethereum EIP-4844 KZG trusted setup verification NIF bindings.

Current section

Files

Jump to
kzg_elixir c_src c-kzg-4844 blst bindings emscripten runnable.html
Raw

c_src/c-kzg-4844/blst/bindings/emscripten/runnable.html

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>runnable.html</title></head>
<body>
<script type="text/javascript" src="blst.js"></script>
<div id="output"></div>
<script type="text/javascript">
var output = {
div: document.getElementById("output"),
log: function(str) {
this.div.appendChild(document.createTextNode(str));
this.div.appendChild(document.createElement("br"));
}
}
output.log("testing...");
blst['onRuntimeInitialized'] = function() {
var msg = "assertion"; // this what we're signing
var DST = "MY-DST"; // domain separation tag
var SK = new blst.SecretKey();
SK.keygen("*".repeat(32));
////////////////////////////////////////////////////////////////////////
// generate public key and signature
var pk = new blst.P1(SK);
var pk_for_wire = pk.serialize();
var sig = new blst.P2();
var sig_for_wire = sig.hash_to(msg, DST, pk_for_wire)
.sign_with(SK)
.serialize();
////////////////////////////////////////////////////////////////////////
// at this point 'pk_for_wire', 'sig_for_wire' and 'msg' are
// "sent over network," so now on "receiver" side
sig = new blst.P2_Affine(sig_for_wire);
pk = new blst.P1_Affine(pk_for_wire);
if (!pk.in_group()) throw "disaster"; // vet the public key
var ctx = new blst.Pairing(true, DST);
ctx.aggregate(pk, sig, msg, pk_for_wire);
ctx.commit();
if (!ctx.finalverify()) throw "disaster";
output.log("OK");
}
</script>
</body>
</html>