Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
matrix-org
Olm
Commits
fb87d8fe
Commit
fb87d8fe
authored
Oct 21, 2016
by
pedroGitt
Browse files
Serialization for OlmAccount and OlmSession OK
parent
1511962d
Changes
11
Hide whitespace changes
Inline
Side-by-side
java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmAccountTest.java
View file @
fb87d8fe
...
...
@@ -42,7 +42,7 @@ public class OlmAccountTest {
private
static
OlmAccount
mOlmAccount
;
private
static
OlmManager
mOlmManager
;
private
boolean
mIsAccountCreated
;
final
String
FILE_NAME
=
"SerialTestFile"
;
private
final
String
FILE_NAME
=
"SerialTestFile"
;
@BeforeClass
public
static
void
setUpClass
(){
...
...
@@ -170,7 +170,12 @@ public class OlmAccountTest {
@Test
public
void
test10RemoveOneTimeKeysForSession
()
{
OlmSession
olmSession
=
new
OlmSession
();
OlmSession
olmSession
=
null
;
try
{
olmSession
=
new
OlmSession
();
}
catch
(
OlmException
e
)
{
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
long
sessionId
=
olmSession
.
getOlmSessionId
();
assertTrue
(
0
!=
sessionId
);
...
...
@@ -230,16 +235,16 @@ public class OlmAccountTest {
try
{
Context
context
=
getInstrumentation
().
getContext
();
context
.
getFilesDir
();
//
context.getFilesDir();
fileOutput
=
context
.
openFileOutput
(
FILE_NAME
,
Context
.
MODE_PRIVATE
);
// serialize
// serialize
account
objectOutput
=
new
ObjectOutputStream
(
fileOutput
);
objectOutput
.
writeObject
(
accountRef
);
objectOutput
.
flush
();
objectOutput
.
close
();
// deserialize
// deserialize
account
FileInputStream
fileInput
=
context
.
openFileInput
(
FILE_NAME
);
ObjectInputStream
objectInput
=
new
ObjectInputStream
(
fileInput
);
accountDeserial
=
(
OlmAccount
)
objectInput
.
readObject
();
...
...
@@ -262,7 +267,6 @@ public class OlmAccountTest {
accountRef
.
releaseAccount
();
accountDeserial
.
releaseAccount
();
}
catch
(
FileNotFoundException
e
)
{
Log
.
e
(
LOG_TAG
,
"## test13Serialization(): Exception FileNotFoundException Msg=="
+
e
.
getMessage
());
}
...
...
@@ -278,7 +282,6 @@ public class OlmAccountTest {
catch
(
Exception
e
)
{
Log
.
e
(
LOG_TAG
,
"## test13Serialization(): Exception Msg=="
+
e
.
getMessage
());
}
}
...
...
java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmGroupSessionTest.java
View file @
fb87d8fe
package
org.matrix.olm
;
import
android.content.Context
;
import
android.support.test.runner.AndroidJUnit4
;
import
android.text.TextUtils
;
import
android.util.Log
;
...
...
@@ -11,6 +12,14 @@ import org.junit.runner.RunWith;
import
org.junit.runners.MethodSorters
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.ObjectInputStream
;
import
java.io.ObjectOutputStream
;
import
static
android
.
support
.
test
.
InstrumentationRegistry
.
getInstrumentation
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
...
...
@@ -19,6 +28,7 @@ import static org.junit.Assert.assertTrue;
@FixMethodOrder
(
MethodSorters
.
NAME_ASCENDING
)
public
class
OlmGroupSessionTest
{
private
static
final
String
LOG_TAG
=
"OlmSessionTest"
;
private
final
String
FILE_NAME_SERIAL_SESSION
=
"SerialGroupSession"
;
private
static
OlmManager
mOlmManager
;
private
static
OlmOutboundGroupSession
mAliceOutboundGroupSession
;
...
...
@@ -141,4 +151,66 @@ public class OlmGroupSessionTest {
// release group sessions
mBobInboundGroupSession
.
releaseSession
();
}
@Test
public
void
test14SerializeOutboundSession
()
{
OlmOutboundGroupSession
outboundGroupSessionRef
=
null
;
OlmOutboundGroupSession
outboundGroupSessionSerial
=
null
;
// alice creates OUTBOUND GROUP SESSION
try
{
outboundGroupSessionRef
=
new
OlmOutboundGroupSession
();
}
catch
(
OlmException
e
)
{
assertTrue
(
"Exception in OlmOutboundGroupSession, Exception code="
+
e
.
getExceptionCode
(),
false
);
}
assertNotNull
(
outboundGroupSessionRef
);
// serialize alice session
Context
context
=
getInstrumentation
().
getContext
();
try
{
FileOutputStream
fileOutput
=
context
.
openFileOutput
(
FILE_NAME_SERIAL_SESSION
,
Context
.
MODE_PRIVATE
);
ObjectOutputStream
objectOutput
=
new
ObjectOutputStream
(
fileOutput
);
objectOutput
.
writeObject
(
outboundGroupSessionRef
);
objectOutput
.
flush
();
objectOutput
.
close
();
// deserialize session
FileInputStream
fileInput
=
context
.
openFileInput
(
FILE_NAME_SERIAL_SESSION
);
ObjectInputStream
objectInput
=
new
ObjectInputStream
(
fileInput
);
outboundGroupSessionSerial
=
(
OlmOutboundGroupSession
)
objectInput
.
readObject
();
objectInput
.
close
();
// get sessions IDs
String
sessionKeyRef
=
outboundGroupSessionRef
.
sessionKey
();
String
sessionKeySerial
=
outboundGroupSessionSerial
.
sessionKey
();
// session ID sanity check
assertFalse
(
TextUtils
.
isEmpty
(
sessionKeyRef
));
assertFalse
(
TextUtils
.
isEmpty
(
sessionKeySerial
));
// session IDs comparison
assertTrue
(
sessionKeyRef
.
equals
(
sessionKeySerial
));
}
catch
(
FileNotFoundException
e
)
{
Log
.
e
(
LOG_TAG
,
"## test03SessionSerialization(): Exception FileNotFoundException Msg=="
+
e
.
getMessage
());
}
catch
(
ClassNotFoundException
e
)
{
Log
.
e
(
LOG_TAG
,
"## test03SessionSerialization(): Exception ClassNotFoundException Msg=="
+
e
.
getMessage
());
}
catch
(
IOException
e
)
{
Log
.
e
(
LOG_TAG
,
"## test03SessionSerialization(): Exception IOException Msg=="
+
e
.
getMessage
());
}
/*catch (OlmException e) {
Log.e(LOG_TAG, "## test03SessionSerialization(): Exception OlmException Msg==" + e.getMessage());
}*/
catch
(
Exception
e
)
{
Log
.
e
(
LOG_TAG
,
"## test03SessionSerialization(): Exception Msg=="
+
e
.
getMessage
());
}
}
}
java/android/OlmLibSdk/olm-sdk/src/androidTest/java/org/matrix/olm/OlmSessionTest.java
View file @
fb87d8fe
package
org.matrix.olm
;
import
android.content.Context
;
import
android.support.test.runner.AndroidJUnit4
;
import
android.util.Log
;
...
...
@@ -11,8 +12,15 @@ import org.junit.Test;
import
org.junit.runner.RunWith
;
import
org.junit.runners.MethodSorters
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.ObjectInputStream
;
import
java.io.ObjectOutputStream
;
import
java.util.Iterator
;
import
static
android
.
support
.
test
.
InstrumentationRegistry
.
getInstrumentation
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
...
...
@@ -20,6 +28,7 @@ import static org.junit.Assert.assertTrue;
@FixMethodOrder
(
MethodSorters
.
NAME_ASCENDING
)
public
class
OlmSessionTest
{
private
static
final
String
LOG_TAG
=
"OlmSessionTest"
;
private
final
String
FILE_NAME_SERIAL_SESSION
=
"SerialSession"
;
private
static
OlmManager
mOlmManager
;
...
...
@@ -86,11 +95,16 @@ public class OlmSessionTest {
}
assertNotNull
(
bobOneTimeKey
);
}
catch
(
JSONException
e
)
{
assertTrue
(
"Exception M
S
g="
+
e
.
getMessage
(),
false
);
assertTrue
(
"Exception M
s
g="
+
e
.
getMessage
(),
false
);
}
// CREATE ALICE SESSION
OlmSession
aliceSession
=
new
OlmSession
();
OlmSession
aliceSession
=
null
;
try
{
aliceSession
=
new
OlmSession
();
}
catch
(
OlmException
e
)
{
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
assertTrue
(
0
!=
aliceSession
.
getOlmSessionId
());
// CREATE ALICE OUTBOUND SESSION and encrypt message to bob
...
...
@@ -101,7 +115,12 @@ public class OlmSessionTest {
Log
.
d
(
LOG_TAG
,
"## test01AliceToBob(): encryptedMsg="
+
encryptedMsgToBob
.
mCipherText
);
// CREATE BOB INBOUND SESSION and decrypt message from alice
OlmSession
bobSession
=
new
OlmSession
();
OlmSession
bobSession
=
null
;
try
{
bobSession
=
new
OlmSession
();
}
catch
(
OlmException
e
)
{
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
assertTrue
(
0
!=
bobSession
.
getOlmSessionId
());
assertNotNull
(
bobSession
.
initInboundSessionWithAccount
(
bobAccount
,
encryptedMsgToBob
.
mCipherText
));
String
decryptedMsg
=
bobSession
.
decryptMessage
(
encryptedMsgToBob
);
...
...
@@ -173,6 +192,7 @@ public class OlmSessionTest {
Iterator
<
String
>
generatedKeysIt
=
generatedKeys
.
keys
();
if
(
generatedKeysIt
.
hasNext
())
{
// return first otk
bobOneTimeKey
=
generatedKeys
.
getString
(
generatedKeysIt
.
next
());
}
assertNotNull
(
bobOneTimeKey
);
...
...
@@ -181,7 +201,12 @@ public class OlmSessionTest {
}
// CREATE ALICE SESSION
OlmSession
aliceSession
=
new
OlmSession
();
OlmSession
aliceSession
=
null
;
try
{
aliceSession
=
new
OlmSession
();
}
catch
(
OlmException
e
)
{
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
assertTrue
(
0
!=
aliceSession
.
getOlmSessionId
());
// CREATE ALICE OUTBOUND SESSION and encrypt message to bob
...
...
@@ -192,7 +217,12 @@ public class OlmSessionTest {
assertNotNull
(
encryptedAliceToBobMsg1
);
// CREATE BOB INBOUND SESSION and decrypt message from alice
OlmSession
bobSession
=
new
OlmSession
();
OlmSession
bobSession
=
null
;
try
{
bobSession
=
new
OlmSession
();
}
catch
(
OlmException
e
)
{
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
assertTrue
(
0
!=
bobSession
.
getOlmSessionId
());
assertNotNull
(
bobSession
.
initInboundSessionWithAccount
(
bobAccount
,
encryptedAliceToBobMsg1
.
mCipherText
));
...
...
@@ -210,6 +240,7 @@ public class OlmSessionTest {
String
clearMsg2
=
"Isn't life grand?"
;
String
clearMsg3
=
"Let's go to the opera."
;
// bob encrypts messages
OlmMessage
encryptedMsg1
=
bobSession
.
encryptMessage
(
clearMsg1
);
assertNotNull
(
encryptedMsg1
);
OlmMessage
encryptedMsg2
=
bobSession
.
encryptMessage
(
clearMsg2
);
...
...
@@ -217,6 +248,7 @@ public class OlmSessionTest {
OlmMessage
encryptedMsg3
=
bobSession
.
encryptMessage
(
clearMsg3
);
assertNotNull
(
encryptedMsg3
);
// alice decrypts bob's messages
String
decryptedMsg1
=
aliceSession
.
decryptMessage
(
encryptedMsg1
);
assertNotNull
(
decryptedMsg1
);
String
decryptedMsg2
=
aliceSession
.
decryptMessage
(
encryptedMsg2
);
...
...
@@ -224,6 +256,7 @@ public class OlmSessionTest {
String
decryptedMsg3
=
aliceSession
.
decryptMessage
(
encryptedMsg3
);
assertNotNull
(
decryptedMsg3
);
// comparison tests
assertTrue
(
clearMsg1
.
equals
(
decryptedMsg1
));
assertTrue
(
clearMsg2
.
equals
(
decryptedMsg2
));
assertTrue
(
clearMsg3
.
equals
(
decryptedMsg3
));
...
...
@@ -235,6 +268,7 @@ public class OlmSessionTest {
aliceSession
.
releaseSession
();
}
@Test
public
void
test03AliceBobSessionId
()
{
// creates alice & bob accounts
...
...
@@ -252,11 +286,22 @@ public class OlmSessionTest {
assertTrue
(
0
!=
aliceAccount
.
getOlmAccountId
());
// CREATE ALICE SESSION
OlmSession
aliceSession
=
new
OlmSession
();
OlmSession
aliceSession
=
null
;
try
{
aliceSession
=
new
OlmSession
();
}
catch
(
OlmException
e
)
{
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
assertTrue
(
0
!=
aliceSession
.
getOlmSessionId
());
// CREATE BOB INBOUND SESSION and decrypt message from alice
OlmSession
bobSession
=
new
OlmSession
();
// CREATE ALICE SESSION
OlmSession
bobSession
=
null
;
try
{
bobSession
=
new
OlmSession
();
}
catch
(
OlmException
e
)
{
e
.
printStackTrace
();
}
assertTrue
(
0
!=
bobSession
.
getOlmSessionId
());
String
aliceSessionId
=
aliceSession
.
sessionIdentifier
();
...
...
@@ -268,4 +313,164 @@ public class OlmSessionTest {
// must be the same for both ends of the conversation
assertTrue
(
aliceSessionId
.
equals
(
bobSessionId
));
}
// ********************************************************
// ************* SERIALIZATION TEST ***********************
// ********************************************************
/**
* Same as test02AliceToBobBackAndForth() but alice's session
* is serialized and de-serialized before performing the final
* comparison (encrypt vs )
*/
@Test
public
void
test03SessionSerialization
()
{
final
int
ONE_TIME_KEYS_NUMBER
=
1
;
String
bobIdentityKey
=
null
;
String
bobOneTimeKey
=
null
;
OlmAccount
aliceAccount
=
null
;
OlmAccount
bobAccount
=
null
;
OlmSession
aliceSessionDeserial
;
// creates alice & bob accounts
try
{
aliceAccount
=
new
OlmAccount
();
bobAccount
=
new
OlmAccount
();
}
catch
(
OlmException
e
)
{
assertTrue
(
e
.
getMessage
(),
false
);
}
// test accounts creation
assertTrue
(
0
!=
bobAccount
.
getOlmAccountId
());
assertTrue
(
0
!=
aliceAccount
.
getOlmAccountId
());
// get bob identity key
JSONObject
bobIdentityKeysJson
=
bobAccount
.
identityKeys
();
assertNotNull
(
bobIdentityKeysJson
);
try
{
bobIdentityKey
=
bobIdentityKeysJson
.
getString
(
OlmAccount
.
JSON_KEY_IDENTITY_KEY
);
assertTrue
(
null
!=
bobIdentityKey
);
}
catch
(
JSONException
e
)
{
assertTrue
(
"Exception MSg="
+
e
.
getMessage
(),
false
);
}
// get bob one time keys
assertTrue
(
0
==
bobAccount
.
generateOneTimeKeys
(
ONE_TIME_KEYS_NUMBER
));
JSONObject
bobOneTimeKeysJsonObj
=
bobAccount
.
oneTimeKeys
();
assertNotNull
(
bobOneTimeKeysJsonObj
);
try
{
JSONObject
generatedKeys
=
bobOneTimeKeysJsonObj
.
getJSONObject
(
OlmAccount
.
JSON_KEY_ONE_TIME_KEY
);
assertNotNull
(
OlmAccount
.
JSON_KEY_ONE_TIME_KEY
+
" object is missing"
,
generatedKeys
);
Iterator
<
String
>
generatedKeysIt
=
generatedKeys
.
keys
();
if
(
generatedKeysIt
.
hasNext
())
{
// return first otk
bobOneTimeKey
=
generatedKeys
.
getString
(
generatedKeysIt
.
next
());
}
assertNotNull
(
bobOneTimeKey
);
}
catch
(
JSONException
e
)
{
assertTrue
(
"Exception MSg="
+
e
.
getMessage
(),
false
);
}
// CREATE ALICE SESSION
OlmSession
aliceSession
=
null
;
try
{
aliceSession
=
new
OlmSession
();
}
catch
(
OlmException
e
)
{
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
assertTrue
(
0
!=
aliceSession
.
getOlmSessionId
());
// CREATE ALICE OUTBOUND SESSION and encrypt message to bob
assertNotNull
(
aliceSession
.
initOutboundSessionWithAccount
(
aliceAccount
,
bobIdentityKey
,
bobOneTimeKey
));
String
helloClearMsg
=
"Hello I'm Alice!"
;
OlmMessage
encryptedAliceToBobMsg1
=
aliceSession
.
encryptMessage
(
helloClearMsg
);
assertNotNull
(
encryptedAliceToBobMsg1
);
// CREATE BOB INBOUND SESSION and decrypt message from alice
OlmSession
bobSession
=
null
;
try
{
bobSession
=
new
OlmSession
();
}
catch
(
OlmException
e
)
{
assertTrue
(
"Exception Msg="
+
e
.
getMessage
(),
false
);
}
assertTrue
(
0
!=
bobSession
.
getOlmSessionId
());
assertNotNull
(
bobSession
.
initInboundSessionWithAccount
(
bobAccount
,
encryptedAliceToBobMsg1
.
mCipherText
));
// DECRYPT MESSAGE FROM ALICE
String
decryptedMsg01
=
bobSession
.
decryptMessage
(
encryptedAliceToBobMsg1
);
assertNotNull
(
decryptedMsg01
);
// MESSAGE COMPARISON: decrypted vs encrypted
assertTrue
(
helloClearMsg
.
equals
(
decryptedMsg01
));
assertTrue
(
0
==
bobAccount
.
removeOneTimeKeysForSession
(
bobSession
));
// BACK/FORTH MESSAGE COMPARISON
String
clearMsg1
=
"Hello I'm Bob!"
;
String
clearMsg2
=
"Isn't life grand?"
;
String
clearMsg3
=
"Let's go to the opera."
;
// bob encrypts messages
OlmMessage
encryptedMsg1
=
bobSession
.
encryptMessage
(
clearMsg1
);
assertNotNull
(
encryptedMsg1
);
OlmMessage
encryptedMsg2
=
bobSession
.
encryptMessage
(
clearMsg2
);
assertNotNull
(
encryptedMsg2
);
OlmMessage
encryptedMsg3
=
bobSession
.
encryptMessage
(
clearMsg3
);
assertNotNull
(
encryptedMsg3
);
// serialize alice session
Context
context
=
getInstrumentation
().
getContext
();
try
{
FileOutputStream
fileOutput
=
context
.
openFileOutput
(
FILE_NAME_SERIAL_SESSION
,
Context
.
MODE_PRIVATE
);
ObjectOutputStream
objectOutput
=
new
ObjectOutputStream
(
fileOutput
);
objectOutput
.
writeObject
(
aliceSession
);
objectOutput
.
flush
();
objectOutput
.
close
();
// deserialize session
FileInputStream
fileInput
=
context
.
openFileInput
(
FILE_NAME_SERIAL_SESSION
);
ObjectInputStream
objectInput
=
new
ObjectInputStream
(
fileInput
);
aliceSessionDeserial
=
(
OlmSession
)
objectInput
.
readObject
();
objectInput
.
close
();
// test deserialize return value
assertNotNull
(
aliceSessionDeserial
);
// de-serialized alice session decrypts bob's messages
String
decryptedMsg1
=
aliceSessionDeserial
.
decryptMessage
(
encryptedMsg1
);
assertNotNull
(
decryptedMsg1
);
String
decryptedMsg2
=
aliceSessionDeserial
.
decryptMessage
(
encryptedMsg2
);
assertNotNull
(
decryptedMsg2
);
String
decryptedMsg3
=
aliceSessionDeserial
.
decryptMessage
(
encryptedMsg3
);
assertNotNull
(
decryptedMsg3
);
// comparison tests
assertTrue
(
clearMsg1
.
equals
(
decryptedMsg1
));
assertTrue
(
clearMsg2
.
equals
(
decryptedMsg2
));
assertTrue
(
clearMsg3
.
equals
(
decryptedMsg3
));
// clean objects..
bobAccount
.
releaseAccount
();
aliceAccount
.
releaseAccount
();
bobSession
.
releaseSession
();
aliceSession
.
releaseSession
();
aliceSessionDeserial
.
releaseSession
();
}
catch
(
FileNotFoundException
e
)
{
Log
.
e
(
LOG_TAG
,
"## test03SessionSerialization(): Exception FileNotFoundException Msg=="
+
e
.
getMessage
());
}
catch
(
ClassNotFoundException
e
)
{
Log
.
e
(
LOG_TAG
,
"## test03SessionSerialization(): Exception ClassNotFoundException Msg=="
+
e
.
getMessage
());
}
catch
(
IOException
e
)
{
Log
.
e
(
LOG_TAG
,
"## test03SessionSerialization(): Exception IOException Msg=="
+
e
.
getMessage
());
}
/*catch (OlmException e) {
Log.e(LOG_TAG, "## test03SessionSerialization(): Exception OlmException Msg==" + e.getMessage());
}*/
catch
(
Exception
e
)
{
Log
.
e
(
LOG_TAG
,
"## test03SessionSerialization(): Exception Msg=="
+
e
.
getMessage
());
}
}
}
java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmAccount.java
View file @
fb87d8fe
...
...
@@ -31,8 +31,6 @@ import java.util.Random;
public
class
OlmAccount
implements
Serializable
{
private
static
final
long
serialVersionUID
=
3497486121598434824L
;
private
static
final
String
LOG_TAG
=
"OlmAccount"
;
private
static
final
int
RANDOM_KEY_SIZE
=
32
;
private
static
final
int
RANDOM_RANGE
=
256
;
// JSON keys used in the JSON objects returned by JNI
/** As well as the identity key, each device creates a number of Curve25519 key pairs which are
...
...
@@ -63,24 +61,17 @@ public class OlmAccount implements Serializable {
}
}
private
String
getRandomKey
()
{
String
keyRetValue
;
Random
rand
=
new
Random
();
StringBuilder
strBuilder
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
OlmAccount
.
RANDOM_KEY_SIZE
;
i
++)
{
strBuilder
.
append
(
rand
.
nextInt
(
RANDOM_RANGE
));
}
keyRetValue
=
strBuilder
.
toString
();
return
keyRetValue
;
}
/**
* Kick off the serialization mechanism.
* @param aOutStream output stream for serializing
* @throws IOException
* @throws OlmException
*/
private
void
writeObject
(
ObjectOutputStream
aOutStream
)
throws
IOException
,
OlmException
{
aOutStream
.
defaultWriteObject
();
// generate serialization key
String
key
=
getRandomKey
();
String
key
=
OlmUtility
.
getRandomKey
();
// compute pickle string
StringBuffer
errorMsg
=
new
StringBuffer
();
...
...
@@ -94,6 +85,13 @@ public class OlmAccount implements Serializable {
}
}
/**
* Kick off the deserialization mechanism.
* @param aInStream
* @throws IOException
* @throws ClassNotFoundException
* @throws OlmException
*/
private
void
readObject
(
ObjectInputStream
aInStream
)
throws
IOException
,
ClassNotFoundException
,
OlmException
{
aInStream
.
defaultReadObject
();
StringBuffer
errorMsg
=
new
StringBuffer
();
...
...
@@ -379,9 +377,4 @@ public class OlmAccount implements Serializable {
return
signMessageJni
(
aMessage
);
}
private
native
String
signMessageJni
(
String
aMessage
);
// TODO missing API: initWithSerializedData
// TODO missing API: serializeDataWithKey
// TODO missing API: initWithCoder
// TODO missing API: encodeWithCoder
}
java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmException.java
View file @
fb87d8fe
...
...
@@ -30,6 +30,7 @@ public class OlmException extends Exception {
public
static
final
int
EXCEPTION_CODE_SESSION_SERIALIZATION
=
6
;
public
static
final
int
EXCEPTION_CODE_SESSION_DESERIALIZATION
=
7
;
public
static
final
int
EXCEPTION_CODE_INIT_ACCOUNT_CREATION
=
8
;
public
static
final
int
EXCEPTION_CODE_INIT_SESSION_CREATION
=
9
;
// exception human readable messages
public
static
final
String
EXCEPTION_MSG_NEW_OUTBOUND_GROUP_SESSION
=
"failed to create a new outbound group Session"
;
...
...
@@ -40,6 +41,7 @@ public class OlmException extends Exception {
public
static
final
String
EXCEPTION_MSG_INIT_ACCOUNT_DESERIALIZATION
=
"initWithSerializedData() failure"
;
public
static
final
String
EXCEPTION_MSG_INVALID_PARAMS_DESERIALIZATION
=
"invalid deserialized parameters"
;
public
static
final
String
EXCEPTION_MSG_INIT_ACCOUNT_CREATION
=
"Account constructor failure"
;
public
static
final
String
EXCEPTION_MSG_INIT_SESSION_CREATION
=
"Session constructor failure"
;
/** exception code to be taken from: {@link #EXCEPTION_CODE_CREATE_OUTBOUND_GROUP_SESSION} {@link #EXCEPTION_CODE_CREATE_INBOUND_GROUP_SESSION}
* {@link #EXCEPTION_CODE_INIT_OUTBOUND_GROUP_SESSION} {@link #EXCEPTION_CODE_INIT_INBOUND_GROUP_SESSION}**/
...
...
java/android/OlmLibSdk/olm-sdk/src/main/java/org/matrix/olm/OlmSession.java
View file @
fb87d8fe
...
...
@@ -19,37 +19,146 @@ package org.matrix.olm;
import
android.text.TextUtils
;
import
android.util.Log
;
import
java.io.IOException
;
import
java.io.ObjectInputStream
;
import
java.io.ObjectOutputStream
;
import
java.io.Serializable
;
public
class
OlmSession
implements
Serializable
{
private
static
final
long
serialVersionUID
=
-
8975488639186976419L
;
private
static
final
String
LOG_TAG
=
"OlmSession"
;
/** session raw pointer value (OlmSession*) returned by JNI.
* this value uniquely identifies the native session instance.
**/
private
long
mNativeOlmSessionId
;
private
transient
long
mNativeOlmSessionId
;
/** account instance associated with this session. **/
private
OlmAccount
mOlmAccount
;
public
OlmSession
()
{
initNewSession
();
public
OlmSession
()
throws
OlmException
{