Factor encrypt/decrypt out of Network::Message.
This commit is contained in:
@@ -201,17 +201,6 @@ Nonce::Nonce( const char *s_bytes, size_t len )
|
|||||||
memcpy( bytes + 4, s_bytes, 8 );
|
memcpy( bytes + 4, s_bytes, 8 );
|
||||||
}
|
}
|
||||||
|
|
||||||
Message::Message( const char *nonce_bytes, size_t nonce_len,
|
|
||||||
const char *text_bytes, size_t text_len )
|
|
||||||
: nonce( nonce_bytes, nonce_len ),
|
|
||||||
text( text_bytes, text_len )
|
|
||||||
{}
|
|
||||||
|
|
||||||
Message::Message( const Nonce & s_nonce, const string & s_text )
|
|
||||||
: nonce( s_nonce ),
|
|
||||||
text( s_text )
|
|
||||||
{}
|
|
||||||
|
|
||||||
const string Session::encrypt( const Message & plaintext )
|
const string Session::encrypt( const Message & plaintext )
|
||||||
{
|
{
|
||||||
const size_t pt_len = plaintext.text.size();
|
const size_t pt_len = plaintext.text.size();
|
||||||
|
|||||||
+7
-2
@@ -122,8 +122,13 @@ namespace Crypto {
|
|||||||
const string text;
|
const string text;
|
||||||
|
|
||||||
Message( const char *nonce_bytes, size_t nonce_len,
|
Message( const char *nonce_bytes, size_t nonce_len,
|
||||||
const char *text_bytes, size_t text_len );
|
const char *text_bytes, size_t text_len )
|
||||||
Message( const Nonce & s_nonce, const string & s_text );
|
: nonce( nonce_bytes, nonce_len ),
|
||||||
|
text( text_bytes, text_len ) {}
|
||||||
|
|
||||||
|
Message( const Nonce & s_nonce, const string & s_text )
|
||||||
|
: nonce( s_nonce ),
|
||||||
|
text( s_text ) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Session {
|
class Session {
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ using namespace Crypto;
|
|||||||
const uint64_t DIRECTION_MASK = uint64_t(1) << 63;
|
const uint64_t DIRECTION_MASK = uint64_t(1) << 63;
|
||||||
const uint64_t SEQUENCE_MASK = uint64_t(-1) ^ DIRECTION_MASK;
|
const uint64_t SEQUENCE_MASK = uint64_t(-1) ^ DIRECTION_MASK;
|
||||||
|
|
||||||
/* Read in packet from coded string */
|
/* Read in packet */
|
||||||
Packet::Packet( const Message & message )
|
Packet::Packet( const Message & message )
|
||||||
: seq( message.nonce.val() & SEQUENCE_MASK ),
|
: seq( message.nonce.val() & SEQUENCE_MASK ),
|
||||||
direction( (message.nonce.val() & DIRECTION_MASK) ? TO_CLIENT : TO_SERVER ),
|
direction( (message.nonce.val() & DIRECTION_MASK) ? TO_CLIENT : TO_SERVER ),
|
||||||
@@ -83,8 +83,8 @@ Packet::Packet( const Message & message )
|
|||||||
payload = string( message.text.begin() + 2 * sizeof( uint16_t ), message.text.end() );
|
payload = string( message.text.begin() + 2 * sizeof( uint16_t ), message.text.end() );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Output coded string from packet */
|
/* Output from packet */
|
||||||
string Packet::tostring( Session *session )
|
Message Packet::toMessage( void )
|
||||||
{
|
{
|
||||||
uint64_t direction_seq = (uint64_t( direction == TO_CLIENT ) << 63) | (seq & SEQUENCE_MASK);
|
uint64_t direction_seq = (uint64_t( direction == TO_CLIENT ) << 63) | (seq & SEQUENCE_MASK);
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ string Packet::tostring( Session *session )
|
|||||||
|
|
||||||
string timestamps = string( (char *)ts_net, 2 * sizeof( uint16_t ) );
|
string timestamps = string( (char *)ts_net, 2 * sizeof( uint16_t ) );
|
||||||
|
|
||||||
return session->encrypt( Message( Nonce( direction_seq ), timestamps + payload ) );
|
return Message( Nonce( direction_seq ), timestamps + payload );
|
||||||
}
|
}
|
||||||
|
|
||||||
Packet Connection::new_packet( const string &s_payload )
|
Packet Connection::new_packet( const string &s_payload )
|
||||||
@@ -399,7 +399,7 @@ void Connection::send( const string & s )
|
|||||||
|
|
||||||
Packet px = new_packet( s );
|
Packet px = new_packet( s );
|
||||||
|
|
||||||
string p = px.tostring( &session );
|
string p = session.encrypt( px.toMessage() );
|
||||||
|
|
||||||
ssize_t bytes_sent = sendto( sock(), p.data(), p.size(), MSG_DONTWAIT,
|
ssize_t bytes_sent = sendto( sock(), p.data(), p.size(), MSG_DONTWAIT,
|
||||||
&remote_addr.sa, remote_addr_len );
|
&remote_addr.sa, remote_addr_len );
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ namespace Network {
|
|||||||
|
|
||||||
Packet( const Message & message );
|
Packet( const Message & message );
|
||||||
|
|
||||||
string tostring( Session *session );
|
Message toMessage( void );
|
||||||
};
|
};
|
||||||
|
|
||||||
union Addr {
|
union Addr {
|
||||||
|
|||||||
Reference in New Issue
Block a user