Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
Olm
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Nheko Reborn
Olm
Commits
c04b770c
Commit
c04b770c
authored
8 years ago
by
Richard van der Hoff
Browse files
Options
Downloads
Patches
Plain Diff
Add some tests for inbound session import/export
parent
fc72c732
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
include/olm/inbound_group_session.h
+13
-0
13 additions, 0 deletions
include/olm/inbound_group_session.h
src/inbound_group_session.c
+7
-1
7 additions, 1 deletion
src/inbound_group_session.c
tests/test_group_session.cpp
+82
-2
82 additions, 2 deletions
tests/test_group_session.cpp
with
102 additions
and
3 deletions
include/olm/inbound_group_session.h
+
13
−
0
View file @
c04b770c
...
...
@@ -190,6 +190,19 @@ uint32_t olm_inbound_group_session_first_known_index(
const
OlmInboundGroupSession
*
session
);
/**
* Check if the session has been verified as a valid session.
*
* (A session is verified either because the original session share was signed,
* or because we have subsequently successfully decrypted a message.)
*
* This is mainly intended for the unit tests, currently.
*/
int
olm_inbound_group_session_is_verified
(
const
OlmInboundGroupSession
*
session
);
/**
* Get the number of bytes returned by olm_export_inbound_group_session()
*/
...
...
This diff is collapsed.
Click to expand it.
src/inbound_group_session.c
+
7
−
1
View file @
c04b770c
...
...
@@ -47,7 +47,7 @@ struct OlmInboundGroupSession {
/**
* Have we ever seen any evidence that this is a valid session?
* (either because the original session share was signed, or because we
* have subsequently successfully decrypted a message
?
)
* have subsequently successfully decrypted a message)
*
* (We don't do anything with this currently, but we may want to bear it in
* mind when we consider handling key-shares for sessions we already know
...
...
@@ -470,6 +470,12 @@ uint32_t olm_inbound_group_session_first_known_index(
return
session
->
initial_ratchet
.
counter
;
}
int
olm_inbound_group_session_is_verified
(
const
OlmInboundGroupSession
*
session
)
{
return
session
->
signing_key_verified
;
}
size_t
olm_export_inbound_group_session_length
(
const
OlmInboundGroupSession
*
session
)
{
...
...
This diff is collapsed.
Click to expand it.
tests/test_group_session.cpp
+
82
−
2
View file @
c04b770c
...
...
@@ -127,17 +127,18 @@ int main() {
assert_equals
(
msglen
,
res
);
assert_equals
(
1U
,
olm_outbound_group_session_message_index
(
session
));
/* build the inbound session */
size
=
olm_inbound_group_session_size
();
uint8_t
inbound_session_memory
[
size
];
OlmInboundGroupSession
*
inbound_session
=
olm_inbound_group_session
(
inbound_session_memory
);
assert_equals
(
0
,
olm_inbound_group_session_is_verified
(
inbound_session
));
res
=
olm_init_inbound_group_session
(
inbound_session
,
session_key
,
session_key_len
);
assert_equals
((
size_t
)
0
,
res
);
assert_equals
(
1
,
olm_inbound_group_session_is_verified
(
inbound_session
));
/* Check the session ids */
...
...
@@ -174,6 +175,85 @@ int main() {
assert_equals
(
message_index
,
uint32_t
(
0
));
}
{
TestCase
test_case
(
"Inbound group session export/import"
);
uint8_t
session_key
[]
=
"AgAAAAAwMTIzNDU2Nzg5QUJERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCREVGM"
"DEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkRFRjAxMjM0NTY3ODlBQkNERUYwMTIzND"
"U2Nzg5QUJERUYwMTIzNDU2Nzg5QUJDREVGMDEyMw0bdg1BDq4Px/slBow06q8n/B9WBfw"
"WYyNOB8DlUmXGGwrFmaSb9bR/eY8xgERrxmP07hFmD9uqA2p8PMHdnV5ysmgufE6oLZ5+"
"8/mWQOW3VVTnDIlnwd8oHUYRuk8TCQ"
;
const
uint8_t
message
[]
=
"AwgAEhAcbh6UpbByoyZxufQ+h2B+8XHMjhR69G8F4+qjMaFlnIXusJZX3r8LnRORG9T3D"
"XFdbVuvIWrLyRfm4i8QRbe8VPwGRFG57B1CtmxanuP8bHtnnYqlwPsD"
;
const
std
::
size_t
msglen
=
sizeof
(
message
)
-
1
;
/* init first inbound group session, and decrypt */
std
::
size_t
size
=
olm_inbound_group_session_size
();
uint8_t
session_memory1
[
size
];
OlmInboundGroupSession
*
session1
=
olm_inbound_group_session
(
session_memory1
);
assert_equals
(
0
,
olm_inbound_group_session_is_verified
(
session1
));
std
::
size_t
res
=
olm_init_inbound_group_session
(
session1
,
session_key
,
sizeof
(
session_key
)
-
1
);
assert_equals
((
size_t
)
0
,
res
);
assert_equals
(
1
,
olm_inbound_group_session_is_verified
(
session1
));
/* olm_group_decrypt_max_plaintext_length destroys the input so we have to
copy it. */
uint8_t
msgcopy
[
msglen
];
memcpy
(
msgcopy
,
message
,
msglen
);
size
=
olm_group_decrypt_max_plaintext_length
(
session1
,
msgcopy
,
msglen
);
uint8_t
plaintext_buf
[
size
];
uint32_t
message_index
;
memcpy
(
msgcopy
,
message
,
msglen
);
res
=
olm_group_decrypt
(
session1
,
msgcopy
,
msglen
,
plaintext_buf
,
size
,
&
message_index
);
assert_equals
((
std
::
size_t
)
7
,
res
);
assert_equals
((
const
uint8_t
*
)
"Message"
,
plaintext_buf
,
res
);
assert_equals
(
uint32_t
(
0
),
message_index
);
/* export the keys */
size
=
olm_export_inbound_group_session_length
(
session1
);
uint8_t
export_memory
[
size
];
res
=
olm_export_inbound_group_session
(
session1
,
export_memory
,
size
,
0
);
assert_equals
(
size
,
res
);
/* free the old session to check there is no shared data */
olm_clear_inbound_group_session
(
session1
);
/* import the keys into another inbound group session */
size
=
olm_inbound_group_session_size
();
uint8_t
session_memory2
[
size
];
OlmInboundGroupSession
*
session2
=
olm_inbound_group_session
(
session_memory2
);
res
=
olm_import_inbound_group_session
(
session2
,
export_memory
,
sizeof
(
export_memory
)
);
assert_equals
((
size_t
)
0
,
res
);
assert_equals
(
0
,
olm_inbound_group_session_is_verified
(
session2
));
/* decrypt the message with the new session */
memcpy
(
msgcopy
,
message
,
msglen
);
size
=
olm_group_decrypt_max_plaintext_length
(
session2
,
msgcopy
,
msglen
);
uint8_t
plaintext_buf2
[
size
];
memcpy
(
msgcopy
,
message
,
msglen
);
res
=
olm_group_decrypt
(
session2
,
msgcopy
,
msglen
,
plaintext_buf2
,
size
,
&
message_index
);
assert_equals
((
std
::
size_t
)
7
,
res
);
assert_equals
((
const
uint8_t
*
)
"Message"
,
plaintext_buf2
,
res
);
assert_equals
(
uint32_t
(
0
),
message_index
);
assert_equals
(
1
,
olm_inbound_group_session_is_verified
(
session2
));
}
{
TestCase
test_case
(
"Invalid signature group message"
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment