NAME
Protocol::OTR - Off-the-Record secure messaging protocol
VERSION
version 0.05
SYNOPSIS
my
$otr
= Protocol::OTR->new(
{
privkeys_file
=>
"otr.private_key"
,
contacts_file
=>
"otr.fingerprints"
,
instance_tags_file
=>
"otr.instance_tags"
,
}
);
# find or create account
my
$alice
=
$otr
->account(
'alice@domain'
,
'prpl-jabber'
);
# find or create contact known by $alice
my
$bob
=
$alice
->contact(
'bob@domain'
);
# create secure channel to Bob
my
$channel
=
$bob
->channel(
{
policy
=> ...,
max_message_size
=> ...,
on_write
=>
sub
{ ... },
on_read
=>
sub
{ ... },
on_gone_secure
=>
sub
{ ... },
on_gone_insecure
=>
sub
{ ... },
on_still_secure
=>
sub
{ ... },
on_unverified_fingerprint
=>
sub
{ ... },
on_symkey
=>
sub
{ ... },
on_timer
=>
sub
{ ... },
on_smp
=>
sub
{ ... },
on_error
=>
sub
{ ... },
on_event
=>
sub
{ ... },
on_smp_event
=>
sub
{ ... },
on_before_encrypt
=>
sub
{ ... },
on_after_decrypt
=>
sub
{ ... },
on_is_contact_logged_in
=>
sub
{ ... },
}
);
# establish private chat
$channel
->init();
# encrypt message
$channel
->
write
(
"Hi Bob!"
);
# finish all sessions
$channel
->finish();
DESCRIPTION
Protocol::OTR provides bindings to Off-the-Record C library allowing to manage OTR setup and to communicate in secure way.
METHODS
new
my
$otr
= Protocol::OTR->new(
{
privkeys_file
=>
"otr.private_key"
,
contacts_file
=>
"otr.fingerprints"
,
instance_tags_file
=>
"otr.instance_tags"
,
}
);
Returns an context object using optionally specified files. If files do not exist, they will be created when needed.
The example above shows the default filenames used.
find_account
my
$account
=
$otr
->find_account(
$name
,
$protocol
);
Returns an account object Protocol::OTR::Account if exists, otherwise undef
.
account
my
$account
=
$otr
->account(
$name
,
$protocol
);
Returns an existing matching account object Protocol::OTR::Account or creates new one.
Note: Generating new private key may take some time.
accounts
my
@accounts
=
$otr
->accounts();
Returns a list of known account objects Protocol::OTR::Account.
ENVIRONMENT VARIABLES
PROTOCOL_OTR_ENABLE_QUICK_RANDOM
BEGIN {
$ENV
{PROTOCOL_OTR_ENABLE_QUICK_RANDOM} = 1; }
use
Protocol::OTR;
If exists in environment it will use much faster /dev/urandom
, rather then more secure, but slow /dev/random
.
EXPORTED CONSTANTS
Constants are grouped in four groups, to import them all use :constants
.
:policies
See "policy" in Protocol::OTR::Channel for usage details.
POLICY_OPPORTUNISTIC
Start OTR conversation whenever it detects that the correspondent supports it. Default.
POLICY_ALWAYS
Requires encrypted conversation.
:error_codes
See "on_error" in Protocol::OTR::Channel for usage details.
ERRCODE_NONE
ERRCODE_ENCRYPTION_ERROR
Error occured while encrypting a message.
ERRCODE_MSG_NOT_IN_PRIVATE
Sent encrypted message to somebody who is not in a mutual OTR session.
ERRCODE_MSG_UNREADABLE
Sent an unreadable encrypted message
ERRCODE_MSG_MALFORMED
Message sent is malformed.
:event_codes
See "on_event" in Protocol::OTR::Channel for usage details.
MSGEVENT_NONE
MSGEVENT_ENCRYPTION_REQUIRED
Our policy requires encryption but we are trying to send an unencrypted message out.
MSGEVENT_ENCRYPTION_ERROR
An error occured while encrypting a message and the message was not sent.
MSGEVENT_CONNECTION_ENDED
Message has not been sent because our buddy has ended the private conversation. We should either close the connection, or refresh it.
MSGEVENT_SETUP_ERROR
A private conversation could not be set up. Error message will be passed.
MSGEVENT_MSG_REFLECTED
Received our own OTR messages.
MSGEVENT_MSG_RESENT
The previous message was resent.
MSGEVENT_RCVDMSG_NOT_IN_PRIVATE
Received an encrypted message but cannot read it because no private connection is established yet.
MSGEVENT_RCVDMSG_UNREADABLE
Cannot read the received message.
MSGEVENT_RCVDMSG_MALFORMED
The message received contains malformed data.
MSGEVENT_LOG_HEARTBEAT_RCVD
Received a heartbeat.
MSGEVENT_LOG_HEARTBEAT_SENT
Sent a heartbeat.
MSGEVENT_RCVDMSG_GENERAL_ERR
Received a general OTR error. Error message will be passed.
MSGEVENT_RCVDMSG_UNENCRYPTED
Received an unencrypted message. The unencrypted message will be passed.
MSGEVENT_RCVDMSG_UNRECOGNIZED
Cannot recognize the type of OTR message received.
MSGEVENT_RCVDMSG_FOR_OTHER_INSTANCE
Received and discarded a message intended for another instance.
:smp_event_codes
See "on_smp_event" in Protocol::OTR::Channel for usage details.
SMPEVENT_NONE
SMPEVENT_CHEATED
The current verification has been aborted, use progress percent to update auth progress dialog.
SMPEVENT_IN_PROGRESS
SMPEVENT_SUCCESS
SMPEVENT_FAILURE
SMPEVENT_ABORT
Update the auth progress dialog with progress percent
SMPEVENT_ERROR
Same as "SMPEVENT_CHEATED".
:instags
See "select_session" in Protocol::OTR::Channel for usage details.
INSTAG_BEST
Session that has the best conversation status, then fingerprint status (in the event of a tie), then most recent (similarly in the event of a tie). When calculating how recent an instance has been active, INSTAG_BEST
is limited by a one second resolution.
INSTAG_RECENT
The most recent session (either by message sent or received).
INSTAG_RECENT_RECEIVED
The session with the most recent message received.
INSTAG_RECENT_SENT
The session with the most recent message sent.
SEE ALSO
AUTHOR
Alex J. G. Burzyński <ajgb@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Alex J. G. Burzyński <ajgb@cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.