// Generate Credentials for Alice and Bob
let credential_alice = await mls.generateCredential("alice");
let credential_bob = await mls.generateCredential("bob");
// Generate a KeyPackage for Bob
let kp_bob = await mls.generateKeyPackage(bob, credential_bob);
// Creation of a Group by Alice
let group_alice = await mls.groupCreate(alice, credential_alice);
info("Group Alice:", JSON.stringify(group_alice));
// Get membership of the group
let members_alice_0 = await group_alice.details();
// Test that the returned group membership is not null
info("Membership @ Epoch 0:", JSON.stringify(members_alice_0));
is(members_alice_0.members.length, 1, "There should be exactly one member in the group");
info("Member Client ID:", byteArrayToHexString(members_alice_0.members[0].clientId));
info("Alice Client ID:", byteArrayToHexString(alice.content));
is(byteArrayToHexString(members_alice_0.members[0].clientId), byteArrayToHexString(alice.content), "The client ID of the member should match Alice's client ID");
// Alice adds Bob to a group
let commit_output = await group_alice.add(kp_bob);
// Test that the returned commit output is not null
info("Commit Output 1:", JSON.stringify(commit_output));
isnot(byteArrayToHexString(commit_output.commit), "", "Commit Output commit should not be an empty string");
// Alice receives the commit
let group_and_epoch_1_alice = await group_alice.receive(commit_output.commit);
// Test that the new group identifier and epoch are valid
info("Alice's Group Identifier and Epoch:", JSON.stringify(group_and_epoch_1_alice));
isnot(byteArrayToHexString(group_and_epoch_1_alice.groupId), "", "Group ID should not be an empty string");
isnot(byteArrayToHexString(group_and_epoch_1_alice.groupEpoch), "", "Group Epoch should not be an empty string");
// Get membership of the group
let members_alice_1 = await group_alice.details();
// Test that the returned group contain both Alice and Bob
info("Membership @ Epoch 1:", JSON.stringify(members_alice_1));
// Test: the group should have exactly two members at epoch 1
is(members_alice_1.members.length, 2, "There should be exactly two members in the group");
// Test: Bob should be in the group
is(members_alice_1.members.some(member => byteArrayToHexString(member.clientId) === byteArrayToHexString(bob.content)), true, "Bob should be in the group");
// Test: Alice should be in the group
is(members_alice_1.members.some(member => byteArrayToHexString(member.clientId) === byteArrayToHexString(alice.content)), true, "Alice should be in the group");
// Bob joins the group
let group_bob = await mls.groupJoin(bob, commit_output.welcome);
// Test: compare the group identifier after the join
is(byteArrayToHexString(group_alice.groupId), byteArrayToHexString(group_bob.groupId), "Alice GID == Bob GID");
// Create exporter labels and context
const context_bytes = new Uint8Array([99, 111, 110, 116, 101, 120, 116]); // "context" in ASCII
const exporter_len = 32;
// Alice generates an Exporter
let exporter_alice = await group_alice.exportSecret( "label", context_bytes, exporter_len);
// Bob generates an Exporter
let exporter_bob = await group_bob.exportSecret( "label", context_bytes, exporter_len);
// Test that exporters are identical on both side
is(byteArrayToHexString(exporter_alice.exporter), byteArrayToHexString(exporter_bob.exporter), "Exporter Alice == Exporter Bob");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.