olm/javascript
Hubert Chathi cabefb17dc rename npm package to @matrix-org/olm
to be published via our gitlab repository
2021-02-22 15:41:29 -05:00
..
demo Fix group demo to work with > 2 users 2020-07-04 16:59:26 -04:00
test SAS: add olm_sas_is_their_key_set 2020-09-23 15:27:55 -04:00
.gitignore also ignore the non-wasm JS file 2018-10-16 16:11:22 -04:00
externs.js Another day, another interface 2018-09-25 17:13:29 +01:00
index.d.ts Update index.d.ts; specify PRIVATE_KEY_LENGTH const export 2020-10-13 21:44:20 +00:00
olm_inbound_group_session.js re-add null termination in javascript 2019-04-08 15:54:02 -04:00
olm_outbound_group_session.js re-add null termination in javascript 2019-04-08 15:54:02 -04:00
olm_pk.js re-add null termination in javascript 2019-04-08 15:54:02 -04:00
olm_post.js use stackAlloc instead of allocate 2020-10-06 12:02:17 +02:00
olm_pre.js re-add null termination in javascript 2019-04-08 15:54:02 -04:00
olm_prefix.js do not pollute the global object 2020-10-03 03:46:15 +02:00
olm_sas.js SAS: add olm_sas_is_their_key_set 2020-09-23 15:27:55 -04:00
olm_suffix.js do not pollute the global object 2020-10-03 03:46:15 +02:00
package.json rename npm package to @matrix-org/olm 2021-02-22 15:41:29 -05:00
README.md spell out error msg if you don't Olm.init 2020-05-16 17:10:18 +01:00

Olm

Note: before using any of the olm functions, you must call Olm.init(), and wait for the promise to resolve, otherwise you will get errors like: Uncaught TypeError: Olm.Account is not a constructor

Example:

var alice = new Olm.Account();
var bob = new Olm.Account();
alice.create();
bob.create();
bob.generate_one_time_keys(1);

var bobs_id_keys = JSON.parse(bob.identity_keys());
var bobs_id_key = bobs_id_keys.curve25519;
var bobs_ot_keys = JSON.parse(bob.one_time_keys());
for (key in bobs_ot_keys.curve25519) {
    var bobs_ot_key = bobs_ot_keys.curve25519[key];
}

alice_session = new Olm.Session();
alice_session.create_outbound(alice, bobs_id_key, bobs_ot_key);
alice_message = a_session.encrypt("Hello");

bob_session.create_inbound(bob, bob_message);
var plaintext = bob_session.decrypt(message_1.type, bob_message);
bob.remove_one_time_keys(bob_session);

Group chat:

var outbound_session = new Olm.OutboundGroupSession();
outbound_session.create();

// exchange these over a secure channel
var session_id = group_session.session_id();
var session_key = group_session.session_key();
var message_index = group_session.message_index();

var inbound_session = new Olm.InboundGroupSession();
inbound_session.create(message_index, session_key);

var ciphertext = outbound_session.encrypt("Hello");
var plaintext = inbound_session.decrypt(ciphertext);