263b94428a
Change the interface again, hopefully this time a bit more normal. Now we wrap the emscripten module completely and just expose the high level objects. The olm library export is now imported as normal (ie. returns a module rather than a function returning a module) but has an `init` method which *must* be called. This returns a promise which resolves when the module is ready. It also rejects if the module failed to set up, unlike before (and unlike the promise-not-a-promise that emscripten returns). Generally catch failures to init the module.
73 lines
2.3 KiB
JavaScript
73 lines
2.3 KiB
JavaScript
/*
|
|
Copyright 2016 OpenMarket Ltd
|
|
Copyright 2018 New Vector Ltd
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
var Olm = require('../olm');
|
|
|
|
describe("megolm", function() {
|
|
var aliceSession, bobSession;
|
|
|
|
beforeEach(function(done) {
|
|
Olm.init().then(function() {
|
|
aliceSession = new Olm.OutboundGroupSession();
|
|
bobSession = new Olm.InboundGroupSession();
|
|
|
|
done();
|
|
});
|
|
});
|
|
|
|
afterEach(function() {
|
|
if (aliceSession !== undefined) {
|
|
aliceSession.free();
|
|
aliceSession = undefined;
|
|
}
|
|
|
|
if (bobSession !== undefined) {
|
|
bobSession.free();
|
|
bobSession = undefined;
|
|
}
|
|
});
|
|
|
|
it("should encrypt and decrypt", function() {
|
|
aliceSession.create();
|
|
expect(aliceSession.message_index()).toEqual(0);
|
|
bobSession.create(aliceSession.session_key());
|
|
|
|
var TEST_TEXT='têst1';
|
|
var encrypted = aliceSession.encrypt(TEST_TEXT);
|
|
var decrypted = bobSession.decrypt(encrypted);
|
|
console.log(TEST_TEXT, "->", decrypted);
|
|
expect(decrypted.plaintext).toEqual(TEST_TEXT);
|
|
expect(decrypted.message_index).toEqual(0);
|
|
|
|
TEST_TEXT='hot beverage: ☕';
|
|
encrypted = aliceSession.encrypt(TEST_TEXT);
|
|
decrypted = bobSession.decrypt(encrypted);
|
|
console.log(TEST_TEXT, "->", decrypted);
|
|
expect(decrypted.plaintext).toEqual(TEST_TEXT);
|
|
expect(decrypted.message_index).toEqual(1);
|
|
|
|
// shorter text, to spot buffer overruns
|
|
TEST_TEXT='☕';
|
|
encrypted = aliceSession.encrypt(TEST_TEXT);
|
|
decrypted = bobSession.decrypt(encrypted);
|
|
console.log(TEST_TEXT, "->", decrypted);
|
|
expect(decrypted.plaintext).toEqual(TEST_TEXT);
|
|
expect(decrypted.message_index).toEqual(2);
|
|
});
|
|
});
|