ruby_olm 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ext/ruby_olm/ext_lib_olm/ext_account.c +274 -0
- data/ext/ruby_olm/ext_lib_olm/ext_lib_olm.c +51 -0
- data/ext/ruby_olm/ext_lib_olm/ext_lib_olm.h +13 -0
- data/ext/ruby_olm/ext_lib_olm/ext_session.c +363 -0
- data/ext/ruby_olm/ext_lib_olm/ext_utility.c +69 -0
- data/ext/ruby_olm/ext_lib_olm/extconf.rb +69 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_account.cpp +695 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_account.h +56 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_inbound_group_session.cpp +654 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_inbound_group_session.h +51 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_jni.h +81 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_jni_helper.cpp +224 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_jni_helper.h +30 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_manager.cpp +35 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_manager.h +36 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_outbound_group_session.cpp +563 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_outbound_group_session.h +49 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_pk.cpp +716 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_pk.h +48 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_session.cpp +977 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_session.h +59 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_utility.cpp +236 -0
- data/ext/ruby_olm/ext_lib_olm/olm/android/olm-sdk/src/main/jni/olm_utility.h +40 -0
- data/ext/ruby_olm/ext_lib_olm/olm/fuzzers/fuzz_decode_message.cpp +14 -0
- data/ext/ruby_olm/ext_lib_olm/olm/fuzzers/fuzz_decrypt.cpp +65 -0
- data/ext/ruby_olm/ext_lib_olm/olm/fuzzers/fuzz_group_decrypt.cpp +73 -0
- data/ext/ruby_olm/ext_lib_olm/olm/fuzzers/fuzz_unpickle_account.cpp +14 -0
- data/ext/ruby_olm/ext_lib_olm/olm/fuzzers/fuzz_unpickle_session.cpp +14 -0
- data/ext/ruby_olm/ext_lib_olm/olm/fuzzers/include/fuzzing.hh +82 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/account.hh +160 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/base64.h +77 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/base64.hh +63 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/cipher.h +138 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/crypto.h +202 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/error.h +72 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/inbound_group_session.h +235 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/list.hh +119 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/megolm.h +95 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/memory.h +41 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/memory.hh +90 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/message.h +93 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/message.hh +138 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/olm.h +451 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/olm.hh +4 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/outbound_group_session.h +181 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/pickle.h +90 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/pickle.hh +149 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/pickle_encoding.h +76 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/pk.h +214 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/ratchet.hh +184 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/session.hh +156 -0
- data/ext/ruby_olm/ext_lib_olm/olm/include/olm/utility.hh +61 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/aes.c +1073 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/aes.h +123 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/aes_test.c +276 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/arcfour.c +45 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/arcfour.h +30 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/arcfour_test.c +47 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/base64.c +135 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/base64.h +27 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/base64_test.c +54 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/blowfish.c +269 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/blowfish.h +32 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/blowfish_test.c +68 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/des.c +269 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/des.h +37 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/des_test.c +83 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/md2.c +104 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/md2.h +33 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/md2_test.c +58 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/md5.c +189 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/md5.h +34 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/md5_test.c +60 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/rot-13.c +35 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/rot-13.h +20 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/rot-13_test.c +44 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/sha1.c +149 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/sha1.h +35 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/sha1_test.c +58 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/sha256.c +159 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/sha256.h +34 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/crypto-algorithms/sha256_test.c +61 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/curve25519-donna/contrib/Curve25519Donna.c +118 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/curve25519-donna/contrib/Curve25519Donna.h +53 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/curve25519-donna/curve25519-donna-c64.c +449 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/curve25519-donna/curve25519-donna.c +860 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/curve25519-donna/python-src/curve25519/curve25519module.c +105 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/curve25519-donna/speed-curve25519.c +50 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/curve25519-donna/test-curve25519.c +54 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/curve25519-donna/test-noncanon.c +39 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/curve25519-donna/test-sc-curve25519.c +72 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/curve25519-donna.h +18 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/add_scalar.c +56 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/ed25519.h +38 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/fe.c +1493 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/fe.h +41 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/fixedint.h +72 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/ge.c +467 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/ge.h +74 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/key_exchange.c +79 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/keypair.c +16 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/precomp_data.h +1391 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/sc.c +814 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/sc.h +12 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/seed.c +40 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/sha512.c +275 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/sha512.h +21 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/sign.c +31 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/src/verify.c +77 -0
- data/ext/ruby_olm/ext_lib_olm/olm/lib/ed25519/test.c +150 -0
- data/ext/ruby_olm/ext_lib_olm/olm/python/dummy/stddef.h +0 -0
- data/ext/ruby_olm/ext_lib_olm/olm/python/dummy/stdint.h +0 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/account.cpp +380 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/base64.cpp +167 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/cipher.cpp +152 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/crypto.cpp +299 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/ed25519.c +22 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/error.c +44 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/inbound_group_session.c +524 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/megolm.c +150 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/memory.cpp +45 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/message.cpp +401 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/olm.cpp +738 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/outbound_group_session.c +363 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/pickle.cpp +242 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/pickle_encoding.c +92 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/pk.cpp +412 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/ratchet.cpp +625 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/session.cpp +462 -0
- data/ext/ruby_olm/ext_lib_olm/olm/src/utility.cpp +57 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/include/unittest.hh +107 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_base64.cpp +70 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_crypto.cpp +246 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_group_session.cpp +329 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_list.cpp +92 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_megolm.cpp +134 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_message.cpp +112 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_olm.cpp +405 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_olm_decrypt.cpp +90 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_olm_sha256.cpp +20 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_olm_signature.cpp +81 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_olm_using_malloc.cpp +210 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_pk.cpp +166 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_ratchet.cpp +221 -0
- data/ext/ruby_olm/ext_lib_olm/olm/tests/test_session.cpp +144 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMAccount.h +51 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMAccount_Private.h +25 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMInboundGroupSession.h +38 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMKit.h +37 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMMessage.h +38 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMOutboundGroupSession.h +32 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMPkDecryption.h +71 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMPkEncryption.h +42 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMPkMessage.h +31 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMSerializable.h +29 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMSession.h +44 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMSession_Private.h +26 -0
- data/ext/ruby_olm/ext_lib_olm/olm/xcode/OLMKit/OLMUtility.h +49 -0
- data/ext/ruby_olm/ext_lib_olm/staging/account.cpp +380 -0
- data/ext/ruby_olm/ext_lib_olm/staging/aes.c +1073 -0
- data/ext/ruby_olm/ext_lib_olm/staging/base64.cpp +167 -0
- data/ext/ruby_olm/ext_lib_olm/staging/cipher.cpp +152 -0
- data/ext/ruby_olm/ext_lib_olm/staging/crypto.cpp +299 -0
- data/ext/ruby_olm/ext_lib_olm/staging/curve25519-donna.c +860 -0
- data/ext/ruby_olm/ext_lib_olm/staging/ed25519.c +22 -0
- data/ext/ruby_olm/ext_lib_olm/staging/error.c +44 -0
- data/ext/ruby_olm/ext_lib_olm/staging/inbound_group_session.c +524 -0
- data/ext/ruby_olm/ext_lib_olm/staging/megolm.c +150 -0
- data/ext/ruby_olm/ext_lib_olm/staging/memory.cpp +45 -0
- data/ext/ruby_olm/ext_lib_olm/staging/message.cpp +401 -0
- data/ext/ruby_olm/ext_lib_olm/staging/olm.cpp +738 -0
- data/ext/ruby_olm/ext_lib_olm/staging/outbound_group_session.c +363 -0
- data/ext/ruby_olm/ext_lib_olm/staging/pickle.cpp +242 -0
- data/ext/ruby_olm/ext_lib_olm/staging/pickle_encoding.c +92 -0
- data/ext/ruby_olm/ext_lib_olm/staging/pk.cpp +412 -0
- data/ext/ruby_olm/ext_lib_olm/staging/ratchet.cpp +625 -0
- data/ext/ruby_olm/ext_lib_olm/staging/session.cpp +461 -0
- data/ext/ruby_olm/ext_lib_olm/staging/sha256.c +159 -0
- data/ext/ruby_olm/ext_lib_olm/staging/utility.cpp +57 -0
- data/lib/ruby_olm/account.rb +42 -0
- data/lib/ruby_olm/message.rb +6 -0
- data/lib/ruby_olm/olm_error.rb +70 -0
- data/lib/ruby_olm/olm_message.rb +25 -0
- data/lib/ruby_olm/pre_key_message.rb +6 -0
- data/lib/ruby_olm/session.rb +16 -0
- data/lib/ruby_olm/version.rb +5 -0
- data/lib/ruby_olm.rb +10 -0
- data/rakefile +18 -0
- data/test/examples/test_bob_no_answer.rb +62 -0
- data/test/examples/test_exchange.rb +60 -0
- data/test/spec/test_account.rb +152 -0
- data/test/unit/test_account_methods.rb +85 -0
- metadata +282 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2016 OpenMarket Ltd
|
|
3
|
+
* Copyright 2016 Vector Creations Ltd
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef _OMLSESSION_H
|
|
19
|
+
#define _OMLSESSION_H
|
|
20
|
+
|
|
21
|
+
#include "olm_jni.h"
|
|
22
|
+
#include "olm/olm.h"
|
|
23
|
+
|
|
24
|
+
#define OLM_SESSION_FUNC_DEF(func_name) FUNC_DEF(OlmSession,func_name)
|
|
25
|
+
|
|
26
|
+
#ifdef __cplusplus
|
|
27
|
+
extern "C" {
|
|
28
|
+
#endif
|
|
29
|
+
|
|
30
|
+
// session creation/destruction
|
|
31
|
+
JNIEXPORT void OLM_SESSION_FUNC_DEF(releaseSessionJni)(JNIEnv *env, jobject thiz);
|
|
32
|
+
JNIEXPORT jlong OLM_SESSION_FUNC_DEF(createNewSessionJni)(JNIEnv *env, jobject thiz);
|
|
33
|
+
|
|
34
|
+
// outbound session
|
|
35
|
+
JNIEXPORT void OLM_SESSION_FUNC_DEF(initOutboundSessionJni)(JNIEnv *env, jobject thiz, jlong aOlmAccountId, jbyteArray aTheirIdentityKey, jbyteArray aTheirOneTimeKey);
|
|
36
|
+
|
|
37
|
+
// inbound sessions: establishment based on PRE KEY message
|
|
38
|
+
JNIEXPORT void OLM_SESSION_FUNC_DEF(initInboundSessionJni)(JNIEnv *env, jobject thiz, jlong aOlmAccountId, jbyteArray aOneTimeKeyMsg);
|
|
39
|
+
JNIEXPORT void OLM_SESSION_FUNC_DEF(initInboundSessionFromIdKeyJni)(JNIEnv *env, jobject thiz, jlong aOlmAccountId, jbyteArray aTheirIdentityKey, jbyteArray aOneTimeKeyMsg);
|
|
40
|
+
|
|
41
|
+
// match inbound sessions: based on PRE KEY message
|
|
42
|
+
JNIEXPORT jboolean OLM_SESSION_FUNC_DEF(matchesInboundSessionJni)(JNIEnv *env, jobject thiz, jbyteArray aOneTimeKeyMsg);
|
|
43
|
+
JNIEXPORT jboolean OLM_SESSION_FUNC_DEF(matchesInboundSessionFromIdKeyJni)(JNIEnv *env, jobject thiz, jbyteArray aTheirIdentityKey, jbyteArray aOneTimeKeyMsg);
|
|
44
|
+
|
|
45
|
+
// encrypt/decrypt
|
|
46
|
+
JNIEXPORT jbyteArray OLM_SESSION_FUNC_DEF(encryptMessageJni)(JNIEnv *env, jobject thiz, jbyteArray aClearMsg, jobject aEncryptedMsg);
|
|
47
|
+
JNIEXPORT jbyteArray OLM_SESSION_FUNC_DEF(decryptMessageJni)(JNIEnv *env, jobject thiz, jobject aEncryptedMsg);
|
|
48
|
+
|
|
49
|
+
JNIEXPORT jbyteArray OLM_SESSION_FUNC_DEF(getSessionIdentifierJni)(JNIEnv *env, jobject thiz);
|
|
50
|
+
|
|
51
|
+
// serialization
|
|
52
|
+
JNIEXPORT jbyteArray OLM_SESSION_FUNC_DEF(serializeJni)(JNIEnv *env, jobject thiz, jbyteArray aKey);
|
|
53
|
+
JNIEXPORT jlong OLM_SESSION_FUNC_DEF(deserializeJni)(JNIEnv *env, jobject thiz, jbyteArray aSerializedData, jbyteArray aKey);
|
|
54
|
+
|
|
55
|
+
#ifdef __cplusplus
|
|
56
|
+
}
|
|
57
|
+
#endif
|
|
58
|
+
|
|
59
|
+
#endif
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2016 OpenMarket Ltd
|
|
3
|
+
* Copyright 2016 Vector Creations Ltd
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#include "olm_utility.h"
|
|
19
|
+
|
|
20
|
+
using namespace AndroidOlmSdk;
|
|
21
|
+
|
|
22
|
+
OlmUtility* initializeUtilityMemory()
|
|
23
|
+
{
|
|
24
|
+
size_t utilitySize = olm_utility_size();
|
|
25
|
+
OlmUtility* utilityPtr = (OlmUtility*)malloc(utilitySize);
|
|
26
|
+
|
|
27
|
+
if (utilityPtr)
|
|
28
|
+
{
|
|
29
|
+
utilityPtr = olm_utility(utilityPtr);
|
|
30
|
+
LOGD("## initializeUtilityMemory(): success - OLM utility size=%lu",static_cast<long unsigned int>(utilitySize));
|
|
31
|
+
}
|
|
32
|
+
else
|
|
33
|
+
{
|
|
34
|
+
LOGE("## initializeUtilityMemory(): failure - OOM");
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return utilityPtr;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
JNIEXPORT jlong OLM_UTILITY_FUNC_DEF(createUtilityJni)(JNIEnv *env, jobject thiz)
|
|
41
|
+
{
|
|
42
|
+
OlmUtility* utilityPtr = initializeUtilityMemory();
|
|
43
|
+
|
|
44
|
+
LOGD("## createUtilityJni(): IN");
|
|
45
|
+
|
|
46
|
+
// init account memory allocation
|
|
47
|
+
if (!utilityPtr)
|
|
48
|
+
{
|
|
49
|
+
LOGE(" ## createUtilityJni(): failure - init OOM");
|
|
50
|
+
env->ThrowNew(env->FindClass("java/lang/Exception"), "init OOM");
|
|
51
|
+
}
|
|
52
|
+
else
|
|
53
|
+
{
|
|
54
|
+
LOGD(" ## createUtilityJni(): success");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return (jlong)(intptr_t)utilityPtr;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
JNIEXPORT void OLM_UTILITY_FUNC_DEF(releaseUtilityJni)(JNIEnv *env, jobject thiz)
|
|
62
|
+
{
|
|
63
|
+
OlmUtility* utilityPtr = getUtilityInstanceId(env, thiz);
|
|
64
|
+
|
|
65
|
+
LOGD("## releaseUtilityJni(): IN");
|
|
66
|
+
|
|
67
|
+
if (!utilityPtr)
|
|
68
|
+
{
|
|
69
|
+
LOGE("## releaseUtilityJni(): failure - utility ptr=NULL");
|
|
70
|
+
}
|
|
71
|
+
else
|
|
72
|
+
{
|
|
73
|
+
olm_clear_utility(utilityPtr);
|
|
74
|
+
free(utilityPtr);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Verify an ed25519 signature.
|
|
81
|
+
* @param aSignature the base64-encoded message signature to be checked.
|
|
82
|
+
* @param aKey the ed25519 key (fingerprint key)
|
|
83
|
+
* @param aMessage the message which was signed
|
|
84
|
+
* @return 0 if validation succeed, an error message string if operation failed
|
|
85
|
+
*/
|
|
86
|
+
JNIEXPORT jstring OLM_UTILITY_FUNC_DEF(verifyEd25519SignatureJni)(JNIEnv *env, jobject thiz, jbyteArray aSignatureBuffer, jbyteArray aKeyBuffer, jbyteArray aMessageBuffer)
|
|
87
|
+
{
|
|
88
|
+
jstring errorMessageRetValue = 0;
|
|
89
|
+
OlmUtility* utilityPtr = getUtilityInstanceId(env, thiz);
|
|
90
|
+
jbyte* signaturePtr = NULL;
|
|
91
|
+
jbyte* keyPtr = NULL;
|
|
92
|
+
jbyte* messagePtr = NULL;
|
|
93
|
+
jboolean messageWasCopied = JNI_FALSE;
|
|
94
|
+
|
|
95
|
+
LOGD("## verifyEd25519SignatureJni(): IN");
|
|
96
|
+
|
|
97
|
+
if (!utilityPtr)
|
|
98
|
+
{
|
|
99
|
+
LOGE(" ## verifyEd25519SignatureJni(): failure - invalid utility ptr=NULL");
|
|
100
|
+
}
|
|
101
|
+
else if (!aSignatureBuffer || !aKeyBuffer || !aMessageBuffer)
|
|
102
|
+
{
|
|
103
|
+
LOGE(" ## verifyEd25519SignatureJni(): failure - invalid input parameters ");
|
|
104
|
+
}
|
|
105
|
+
else if (!(signaturePtr = env->GetByteArrayElements(aSignatureBuffer, 0)))
|
|
106
|
+
{
|
|
107
|
+
LOGE(" ## verifyEd25519SignatureJni(): failure - signature JNI allocation OOM");
|
|
108
|
+
}
|
|
109
|
+
else if (!(keyPtr = env->GetByteArrayElements(aKeyBuffer, 0)))
|
|
110
|
+
{
|
|
111
|
+
LOGE(" ## verifyEd25519SignatureJni(): failure - key JNI allocation OOM");
|
|
112
|
+
}
|
|
113
|
+
else if (!(messagePtr = env->GetByteArrayElements(aMessageBuffer, &messageWasCopied)))
|
|
114
|
+
{
|
|
115
|
+
LOGE(" ## verifyEd25519SignatureJni(): failure - message JNI allocation OOM");
|
|
116
|
+
}
|
|
117
|
+
else
|
|
118
|
+
{
|
|
119
|
+
size_t signatureLength = (size_t)env->GetArrayLength(aSignatureBuffer);
|
|
120
|
+
size_t keyLength = (size_t)env->GetArrayLength(aKeyBuffer);
|
|
121
|
+
size_t messageLength = (size_t)env->GetArrayLength(aMessageBuffer);
|
|
122
|
+
LOGD(" ## verifyEd25519SignatureJni(): signatureLength=%lu keyLength=%lu messageLength=%lu",static_cast<long unsigned int>(signatureLength),static_cast<long unsigned int>(keyLength),static_cast<long unsigned int>(messageLength));
|
|
123
|
+
LOGD(" ## verifyEd25519SignatureJni(): key=%.*s", static_cast<int>(keyLength), keyPtr);
|
|
124
|
+
|
|
125
|
+
size_t result = olm_ed25519_verify(utilityPtr,
|
|
126
|
+
(void const *)keyPtr,
|
|
127
|
+
keyLength,
|
|
128
|
+
(void const *)messagePtr,
|
|
129
|
+
messageLength,
|
|
130
|
+
(void*)signaturePtr,
|
|
131
|
+
signatureLength);
|
|
132
|
+
if (result == olm_error()) {
|
|
133
|
+
const char *errorMsgPtr = olm_utility_last_error(utilityPtr);
|
|
134
|
+
errorMessageRetValue = env->NewStringUTF(errorMsgPtr);
|
|
135
|
+
LOGE("## verifyEd25519SignatureJni(): failure - olm_ed25519_verify Msg=%s",errorMsgPtr);
|
|
136
|
+
}
|
|
137
|
+
else
|
|
138
|
+
{
|
|
139
|
+
LOGD("## verifyEd25519SignatureJni(): success - result=%lu", static_cast<long unsigned int>(result));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// free alloc
|
|
144
|
+
if (signaturePtr)
|
|
145
|
+
{
|
|
146
|
+
env->ReleaseByteArrayElements(aSignatureBuffer, signaturePtr, JNI_ABORT);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (keyPtr)
|
|
150
|
+
{
|
|
151
|
+
env->ReleaseByteArrayElements(aKeyBuffer, keyPtr, JNI_ABORT);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (messagePtr)
|
|
155
|
+
{
|
|
156
|
+
if (messageWasCopied) {
|
|
157
|
+
memset(messagePtr, 0, (size_t)env->GetArrayLength(aMessageBuffer));
|
|
158
|
+
}
|
|
159
|
+
env->ReleaseByteArrayElements(aMessageBuffer, messagePtr, JNI_ABORT);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return errorMessageRetValue;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Compute the digest (SHA 256) for the message passed in parameter.<br>
|
|
167
|
+
* The digest value is the function return value.
|
|
168
|
+
* An exception is thrown if the operation fails.
|
|
169
|
+
* @param aMessage the message
|
|
170
|
+
* @return digest of the message.
|
|
171
|
+
**/
|
|
172
|
+
JNIEXPORT jbyteArray OLM_UTILITY_FUNC_DEF(sha256Jni)(JNIEnv *env, jobject thiz, jbyteArray aMessageToHashBuffer)
|
|
173
|
+
{
|
|
174
|
+
jbyteArray sha256Ret = 0;
|
|
175
|
+
|
|
176
|
+
OlmUtility* utilityPtr = getUtilityInstanceId(env, thiz);
|
|
177
|
+
jbyte* messagePtr = NULL;
|
|
178
|
+
jboolean messageWasCopied = JNI_FALSE;
|
|
179
|
+
|
|
180
|
+
LOGD("## sha256Jni(): IN");
|
|
181
|
+
|
|
182
|
+
if (!utilityPtr)
|
|
183
|
+
{
|
|
184
|
+
LOGE(" ## sha256Jni(): failure - invalid utility ptr=NULL");
|
|
185
|
+
}
|
|
186
|
+
else if(!aMessageToHashBuffer)
|
|
187
|
+
{
|
|
188
|
+
LOGE(" ## sha256Jni(): failure - invalid message parameters ");
|
|
189
|
+
}
|
|
190
|
+
else if(!(messagePtr = env->GetByteArrayElements(aMessageToHashBuffer, &messageWasCopied)))
|
|
191
|
+
{
|
|
192
|
+
LOGE(" ## sha256Jni(): failure - message JNI allocation OOM");
|
|
193
|
+
}
|
|
194
|
+
else
|
|
195
|
+
{
|
|
196
|
+
// get lengths
|
|
197
|
+
size_t messageLength = (size_t)env->GetArrayLength(aMessageToHashBuffer);
|
|
198
|
+
size_t hashLength = olm_sha256_length(utilityPtr);
|
|
199
|
+
void* hashValuePtr = malloc((hashLength)*sizeof(uint8_t));
|
|
200
|
+
|
|
201
|
+
if (!hashValuePtr)
|
|
202
|
+
{
|
|
203
|
+
LOGE("## sha256Jni(): failure - hash value allocation OOM");
|
|
204
|
+
}
|
|
205
|
+
else
|
|
206
|
+
{
|
|
207
|
+
size_t result = olm_sha256(utilityPtr,
|
|
208
|
+
(void const *)messagePtr,
|
|
209
|
+
messageLength,
|
|
210
|
+
(void *)hashValuePtr,
|
|
211
|
+
hashLength);
|
|
212
|
+
if (result == olm_error())
|
|
213
|
+
{
|
|
214
|
+
LOGE("## sha256Jni(): failure - hash creation Msg=%s",(const char *)olm_utility_last_error(utilityPtr));
|
|
215
|
+
}
|
|
216
|
+
else
|
|
217
|
+
{
|
|
218
|
+
LOGD("## sha256Jni(): success - result=%lu hashValue=%.*s",static_cast<long unsigned int>(result), static_cast<int>(result), (char*)hashValuePtr);
|
|
219
|
+
sha256Ret = env->NewByteArray(result);
|
|
220
|
+
env->SetByteArrayRegion(sha256Ret, 0 , result, (jbyte*)hashValuePtr);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
free(hashValuePtr);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
if (messagePtr)
|
|
228
|
+
{
|
|
229
|
+
if (messageWasCopied) {
|
|
230
|
+
memset(messagePtr, 0, (size_t)env->GetArrayLength(aMessageToHashBuffer));
|
|
231
|
+
}
|
|
232
|
+
env->ReleaseByteArrayElements(aMessageToHashBuffer, messagePtr, JNI_ABORT);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
return sha256Ret;
|
|
236
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2016 OpenMarket Ltd
|
|
3
|
+
* Copyright 2016 Vector Creations Ltd
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#ifndef _OMLUTILITY_H
|
|
19
|
+
#define _OMLUTILITY_H
|
|
20
|
+
|
|
21
|
+
#include "olm_jni.h"
|
|
22
|
+
#include "olm/olm.h"
|
|
23
|
+
|
|
24
|
+
#define OLM_UTILITY_FUNC_DEF(func_name) FUNC_DEF(OlmUtility,func_name)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#ifdef __cplusplus
|
|
28
|
+
extern "C" {
|
|
29
|
+
#endif
|
|
30
|
+
JNIEXPORT jlong OLM_UTILITY_FUNC_DEF(createUtilityJni)(JNIEnv *env, jobject thiz);
|
|
31
|
+
JNIEXPORT void OLM_UTILITY_FUNC_DEF(releaseUtilityJni)(JNIEnv *env, jobject thiz);
|
|
32
|
+
JNIEXPORT jstring OLM_UTILITY_FUNC_DEF(verifyEd25519SignatureJni)(JNIEnv *env, jobject thiz, jbyteArray aSignature, jbyteArray aKey, jbyteArray aMessage);
|
|
33
|
+
JNIEXPORT jbyteArray OLM_UTILITY_FUNC_DEF(sha256Jni)(JNIEnv *env, jobject thiz, jbyteArray aMessageToHash);
|
|
34
|
+
#ifdef __cplusplus
|
|
35
|
+
}
|
|
36
|
+
#endif
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
#endif
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#include "olm/message.hh"
|
|
2
|
+
#include "fuzzing.hh"
|
|
3
|
+
|
|
4
|
+
int main(int argc, const char *argv[]) {
|
|
5
|
+
int message_fd = STDIN_FILENO;
|
|
6
|
+
uint8_t * message_buffer;
|
|
7
|
+
ssize_t message_length = check_errno(
|
|
8
|
+
"Error reading message file", read_file(message_fd, &message_buffer)
|
|
9
|
+
);
|
|
10
|
+
olm::MessageReader * reader = new olm::MessageReader;
|
|
11
|
+
decode_message(*reader, message_buffer, message_length, 8);
|
|
12
|
+
free(message_buffer);
|
|
13
|
+
delete reader;
|
|
14
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
#include "olm/olm.hh"
|
|
2
|
+
|
|
3
|
+
#include "fuzzing.hh"
|
|
4
|
+
|
|
5
|
+
int main(int argc, const char *argv[]) {
|
|
6
|
+
size_t ignored;
|
|
7
|
+
if (argc <= 3) {
|
|
8
|
+
const char * message = "Usage: decrypt: <session_key> <session_file>"
|
|
9
|
+
" <message_type>\n";
|
|
10
|
+
ignored = write(STDERR_FILENO, message, strlen(message));
|
|
11
|
+
exit(3);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const char * key = argv[1];
|
|
15
|
+
size_t key_length = strlen(key);
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
int session_fd = check_errno(
|
|
19
|
+
"Error opening session file", open(argv[2], O_RDONLY)
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
int message_type = atoi(argv[3]);
|
|
23
|
+
|
|
24
|
+
uint8_t *session_buffer;
|
|
25
|
+
ssize_t session_length = check_errno(
|
|
26
|
+
"Error reading session file", read_file(session_fd, &session_buffer)
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
int message_fd = STDIN_FILENO;
|
|
30
|
+
uint8_t * message_buffer;
|
|
31
|
+
ssize_t message_length = check_errno(
|
|
32
|
+
"Error reading message file", read_file(message_fd, &message_buffer)
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
uint8_t * tmp_buffer = (uint8_t *) malloc(message_length);
|
|
36
|
+
memcpy(tmp_buffer, message_buffer, message_length);
|
|
37
|
+
|
|
38
|
+
uint8_t session_memory[olm_session_size()];
|
|
39
|
+
OlmSession * session = olm_session(session_memory);
|
|
40
|
+
check_session(session, "Error unpickling session", olm_unpickle_session(
|
|
41
|
+
session, key, key_length, session_buffer, session_length
|
|
42
|
+
));
|
|
43
|
+
|
|
44
|
+
size_t max_length = check_session(
|
|
45
|
+
session,
|
|
46
|
+
"Error getting plaintext length",
|
|
47
|
+
olm_decrypt_max_plaintext_length(
|
|
48
|
+
session, message_type, tmp_buffer, message_length
|
|
49
|
+
)
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
uint8_t plaintext[max_length];
|
|
53
|
+
|
|
54
|
+
size_t length = check_session(
|
|
55
|
+
session, "Error decrypting message", olm_decrypt(
|
|
56
|
+
session, message_type,
|
|
57
|
+
message_buffer, message_length,
|
|
58
|
+
plaintext, max_length
|
|
59
|
+
)
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
ignored = write(STDOUT_FILENO, plaintext, length);
|
|
63
|
+
ignored = write(STDOUT_FILENO, "\n", 1);
|
|
64
|
+
return ignored;
|
|
65
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
#include "olm/olm.hh"
|
|
2
|
+
|
|
3
|
+
#include "fuzzing.hh"
|
|
4
|
+
|
|
5
|
+
int main(int argc, const char *argv[]) {
|
|
6
|
+
size_t ignored;
|
|
7
|
+
if (argc <= 2) {
|
|
8
|
+
const char * message = "Usage: decrypt <pickle_key> <group_session>\n";
|
|
9
|
+
ignored = write(STDERR_FILENO, message, strlen(message));
|
|
10
|
+
exit(3);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const char * key = argv[1];
|
|
14
|
+
size_t key_length = strlen(key);
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
int session_fd = check_errno(
|
|
18
|
+
"Error opening session file", open(argv[2], O_RDONLY)
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
uint8_t *session_buffer;
|
|
22
|
+
ssize_t session_length = check_errno(
|
|
23
|
+
"Error reading session file", read_file(session_fd, &session_buffer)
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
int message_fd = STDIN_FILENO;
|
|
27
|
+
uint8_t * message_buffer;
|
|
28
|
+
ssize_t message_length = check_errno(
|
|
29
|
+
"Error reading message file", read_file(message_fd, &message_buffer)
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
uint8_t * tmp_buffer = (uint8_t *) malloc(message_length);
|
|
33
|
+
memcpy(tmp_buffer, message_buffer, message_length);
|
|
34
|
+
|
|
35
|
+
uint8_t session_memory[olm_inbound_group_session_size()];
|
|
36
|
+
OlmInboundGroupSession * session = olm_inbound_group_session(session_memory);
|
|
37
|
+
check_error(
|
|
38
|
+
olm_inbound_group_session_last_error,
|
|
39
|
+
session,
|
|
40
|
+
"Error unpickling session",
|
|
41
|
+
olm_unpickle_inbound_group_session(
|
|
42
|
+
session, key, key_length, session_buffer, session_length
|
|
43
|
+
)
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
size_t max_length = check_error(
|
|
47
|
+
olm_inbound_group_session_last_error,
|
|
48
|
+
session,
|
|
49
|
+
"Error getting plaintext length",
|
|
50
|
+
olm_group_decrypt_max_plaintext_length(
|
|
51
|
+
session, tmp_buffer, message_length
|
|
52
|
+
)
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
uint8_t plaintext[max_length];
|
|
56
|
+
|
|
57
|
+
uint32_t ratchet_index;
|
|
58
|
+
|
|
59
|
+
size_t length = check_error(
|
|
60
|
+
olm_inbound_group_session_last_error,
|
|
61
|
+
session,
|
|
62
|
+
"Error decrypting message",
|
|
63
|
+
olm_group_decrypt(
|
|
64
|
+
session,
|
|
65
|
+
message_buffer, message_length,
|
|
66
|
+
plaintext, max_length, &ratchet_index
|
|
67
|
+
)
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
ignored = write(STDOUT_FILENO, plaintext, length);
|
|
71
|
+
ignored = write(STDOUT_FILENO, "\n", 1);
|
|
72
|
+
return ignored;
|
|
73
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#include "olm/account.hh"
|
|
2
|
+
#include "fuzzing.hh"
|
|
3
|
+
|
|
4
|
+
int main(int argc, const char *argv[]) {
|
|
5
|
+
int pickle_fd = STDIN_FILENO;
|
|
6
|
+
uint8_t * pickle_buffer;
|
|
7
|
+
ssize_t pickle_length = check_errno(
|
|
8
|
+
"Error reading pickle file", read_file(pickle_fd, &pickle_buffer)
|
|
9
|
+
);
|
|
10
|
+
olm::Account * account = new olm::Account;
|
|
11
|
+
unpickle(pickle_buffer, pickle_buffer + pickle_length, *account);
|
|
12
|
+
free(pickle_buffer);
|
|
13
|
+
delete account;
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#include "olm/session.hh"
|
|
2
|
+
#include "fuzzing.hh"
|
|
3
|
+
|
|
4
|
+
int main(int argc, const char *argv[]) {
|
|
5
|
+
int pickle_fd = STDIN_FILENO;
|
|
6
|
+
uint8_t * pickle_buffer;
|
|
7
|
+
ssize_t pickle_length = check_errno(
|
|
8
|
+
"Error reading pickle file", read_file(pickle_fd, &pickle_buffer)
|
|
9
|
+
);
|
|
10
|
+
olm::Session * session = new olm::Session;
|
|
11
|
+
unpickle(pickle_buffer, pickle_buffer + pickle_length, *session);
|
|
12
|
+
free(pickle_buffer);
|
|
13
|
+
delete session;
|
|
14
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#include "olm/olm.hh"
|
|
2
|
+
|
|
3
|
+
#include <stdio.h>
|
|
4
|
+
#include <stdlib.h>
|
|
5
|
+
#include <unistd.h>
|
|
6
|
+
#include <stddef.h>
|
|
7
|
+
#include <string.h>
|
|
8
|
+
#include <sys/types.h>
|
|
9
|
+
#include <sys/stat.h>
|
|
10
|
+
#include <fcntl.h>
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
ssize_t read_file(
|
|
14
|
+
int fd,
|
|
15
|
+
uint8_t **buffer
|
|
16
|
+
) {
|
|
17
|
+
size_t buffer_size = 4096;
|
|
18
|
+
uint8_t * current_buffer = (uint8_t *) malloc(buffer_size);
|
|
19
|
+
if (current_buffer == NULL) return -1;
|
|
20
|
+
size_t buffer_pos = 0;
|
|
21
|
+
while (1) {
|
|
22
|
+
ssize_t count = read(
|
|
23
|
+
fd, current_buffer + buffer_pos, buffer_size - buffer_pos
|
|
24
|
+
);
|
|
25
|
+
if (count < 0) break;
|
|
26
|
+
if (count == 0) {
|
|
27
|
+
uint8_t * return_buffer = (uint8_t *) realloc(current_buffer, buffer_pos);
|
|
28
|
+
if (return_buffer == NULL) break;
|
|
29
|
+
*buffer = return_buffer;
|
|
30
|
+
return buffer_pos;
|
|
31
|
+
}
|
|
32
|
+
buffer_pos += count;
|
|
33
|
+
if (buffer_pos == buffer_size) {
|
|
34
|
+
buffer_size *= 2;
|
|
35
|
+
uint8_t * new_buffer = (uint8_t *) realloc(current_buffer, buffer_size);
|
|
36
|
+
if (new_buffer == NULL) break;
|
|
37
|
+
current_buffer = new_buffer;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
free(current_buffer);
|
|
41
|
+
return -1;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
template<typename T>
|
|
45
|
+
T check_errno(
|
|
46
|
+
const char * message,
|
|
47
|
+
T value
|
|
48
|
+
) {
|
|
49
|
+
if (value == T(-1)) {
|
|
50
|
+
perror(message);
|
|
51
|
+
exit(1);
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
template<typename T, typename F>
|
|
57
|
+
size_t check_error(
|
|
58
|
+
F f,
|
|
59
|
+
T * object,
|
|
60
|
+
const char * message,
|
|
61
|
+
size_t value
|
|
62
|
+
) {
|
|
63
|
+
if (value == olm_error()) {
|
|
64
|
+
const char * olm_message = f(object);
|
|
65
|
+
ssize_t ignored;
|
|
66
|
+
ignored = write(STDERR_FILENO, message, strlen(message));
|
|
67
|
+
ignored = write(STDERR_FILENO, ": ", 2);
|
|
68
|
+
ignored = write(STDERR_FILENO, olm_message, strlen(olm_message));
|
|
69
|
+
ignored = write(STDERR_FILENO, "\n", 1);
|
|
70
|
+
exit(2);
|
|
71
|
+
return ignored;
|
|
72
|
+
}
|
|
73
|
+
return value;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
size_t check_session(
|
|
77
|
+
OlmSession * session,
|
|
78
|
+
const char * message,
|
|
79
|
+
size_t value
|
|
80
|
+
) {
|
|
81
|
+
return check_error(olm_session_last_error, session, message, value);
|
|
82
|
+
}
|