File: test_pending.html

package info (click to toggle)
firefox 143.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,617,328 kB
  • sloc: cpp: 7,478,492; javascript: 6,417,157; ansic: 3,720,058; python: 1,396,372; xml: 627,523; asm: 438,677; java: 186,156; sh: 63,477; makefile: 19,171; objc: 13,059; perl: 12,983; yacc: 4,583; cs: 3,846; pascal: 3,405; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 53; csh: 10
file content (105 lines) | stat: -rw-r--r-- 3,741 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<!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>