105 lines
3.7 KiB
HTML
105 lines
3.7 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
|
|
<head>
|
|
<title>Test for Messaging Layer Security</title>
|
|
<!-- SimpleTest Helpers -->
|
|
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
<!-- Local Helpers -->
|
|
<script src="head_mls.js"></script>
|
|
</head>
|
|
|
|
<body>
|
|
<pre id="test">
|
|
<script class="testbody" type="text/javascript">
|
|
|
|
async function test_pending() {
|
|
|
|
const mls = new MLS();
|
|
|
|
// Alice: Create signature keypair and credential
|
|
const alice = await mls.generateIdentity();
|
|
const alice_credential = await mls.generateCredential("alice");
|
|
|
|
// Bob: Create signature keypair and credential
|
|
const bob = await mls.generateIdentity();
|
|
const bob_credential = await mls.generateCredential("bob");
|
|
|
|
// Bob: Generate a key package
|
|
const bob_key_package = await mls.generateKeyPackage(bob, bob_credential);
|
|
|
|
// Alice: Create a group
|
|
let group_alice = await mls.groupCreate(alice, alice_credential);
|
|
|
|
// Alice: Add Bob to the group
|
|
await group_alice.add(bob_key_package);
|
|
|
|
// Check that Alice has a pending commit
|
|
let has_pending_commit = await group_alice.hasPendingCommit();
|
|
info("Does Alice have pending commit? ", has_pending_commit);
|
|
is(has_pending_commit, true);
|
|
|
|
// Discard Alice's pending commit
|
|
await group_alice.clearPendingCommit();
|
|
|
|
// Check that Alice has a pending commit
|
|
let has_pending_commit2 = await group_alice.hasPendingCommit();
|
|
info("Does Alice have pending commit? ", has_pending_commit2);
|
|
is(has_pending_commit2, false);
|
|
isnot(has_pending_commit2, null);
|
|
|
|
// Alice: Add Bob to the group
|
|
let commit_output = await group_alice.add(bob_key_package);
|
|
|
|
// Check that Alice has a pending commit
|
|
let has_pending_commit3 = await group_alice.hasPendingCommit();
|
|
info("Does Alice have pending commit? ", has_pending_commit3);
|
|
is(has_pending_commit3, true);
|
|
|
|
// Alice: process her Add commit instead of receiving the commit
|
|
await group_alice.applyPendingCommit();
|
|
|
|
// Check that Alice has a pending commit
|
|
let has_pending_commit4 = await group_alice.hasPendingCommit();
|
|
info("Does Alice have pending commit? ", has_pending_commit4);
|
|
is(has_pending_commit4, false);
|
|
isnot(has_pending_commit4, null);
|
|
|
|
// Bob: Join the group
|
|
let group_bob = await mls.groupJoin(bob, commit_output.welcome);
|
|
|
|
// Test: compare group identifier from Alice and Bob
|
|
is(byteArrayToHexString(group_alice.groupId), byteArrayToHexString(group_bob.groupId), "Alice GID == Bob GID");
|
|
|
|
// Alice & Bob: Export a secret
|
|
const context_bytes = new Uint8Array([99, 111, 110, 116, 101, 120, 116]); // "context" in ASCII
|
|
|
|
const exportAlice = await group_alice.exportSecret("label", context_bytes, 15);
|
|
const exportBob = await group_bob.exportSecret("label", context_bytes, 15);
|
|
|
|
// Test: compare exporter from Alice and Bob
|
|
is(byteArrayToHexString(exportAlice.exporter), byteArrayToHexString(exportBob.exporter), "Exporter Alice == Exporter Bob");
|
|
|
|
// Bob: send a message to the group
|
|
const message = new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 32, 33]); // "Hello World !" in ASCII
|
|
const ctx = await group_bob.send(message);
|
|
|
|
// Alice: receive a message from the group
|
|
const pt = await group_alice.receive(ctx);
|
|
info("Alice received a message from Bob: " + JSON.stringify(pt));
|
|
|
|
// Test: compare the message and the decrypted message
|
|
is(byteArrayToHexString(message), byteArrayToHexString(pt.content), "Plaintext == Decrypted Message");
|
|
|
|
SimpleTest.finish();
|
|
}
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
test_pending();
|
|
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
|
|
</html>
|