namespace channel { string new_double_ratchet([ByRef] sequence session_key, [ByRef] sequence sending_header_key, [ByRef] sequence next_receiving_header_key, boolean is_sender, [ByRef] sequence sending_ephemeral_private_key, [ByRef] sequence receiving_ephemeral_key); DoubleRatchetStateAndEnvelope double_ratchet_encrypt(DoubleRatchetStateAndMessage ratchet_state_and_message); DoubleRatchetStateAndMessage double_ratchet_decrypt(DoubleRatchetStateAndEnvelope ratchet_state_and_envelope); TripleRatchetStateAndMetadata new_triple_ratchet([ByRef] sequence> peers, [ByRef] sequence peer_key, [ByRef] sequence identity_key, [ByRef] sequence signed_pre_key, u64 threshold, boolean async_dkg_ratchet); TripleRatchetStateAndMetadata triple_ratchet_init_round_1(TripleRatchetStateAndMetadata ratchet_state_and_metadata); TripleRatchetStateAndMetadata triple_ratchet_init_round_2(TripleRatchetStateAndMetadata ratchet_state_and_metadata); TripleRatchetStateAndMetadata triple_ratchet_init_round_3(TripleRatchetStateAndMetadata ratchet_state_and_metadata); TripleRatchetStateAndMetadata triple_ratchet_init_round_4(TripleRatchetStateAndMetadata ratchet_state_and_metadata); TripleRatchetStateAndEnvelope triple_ratchet_encrypt(TripleRatchetStateAndMessage ratchet_state_and_message); TripleRatchetStateAndMessage triple_ratchet_decrypt(TripleRatchetStateAndEnvelope ratchet_state_and_envelope); }; dictionary DoubleRatchetStateAndEnvelope { string ratchet_state; string envelope; }; dictionary DoubleRatchetStateAndMessage { string ratchet_state; sequence message; }; dictionary TripleRatchetStateAndMetadata { string ratchet_state; record metadata; }; dictionary TripleRatchetStateAndEnvelope { string ratchet_state; string envelope; }; dictionary TripleRatchetStateAndMessage { string ratchet_state; sequence message; };