-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: Move TLS and server files to src directory
- Loading branch information
Showing
10 changed files
with
212 additions
and
70 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
import logging | ||
|
||
|
||
DEFAULT_LOGGING_LEVEL = logging.DEBUG | ||
LISTEN_HOST = "0.0.0.0" | ||
LISTEN_PORT = 443 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
from enum import Enum | ||
|
||
|
||
class SSLContentType(Enum): | ||
HANDSHAKE = "handshake" | ||
DATA = "data" | ||
|
||
|
||
class SSLv2HandshakeType(Enum): | ||
CLIENT_HELLO = 1 | ||
CLIENT_MASTER_KEY = 2 | ||
CLIENT_FINISHED = 3 | ||
SERVER_HELLO = 4 | ||
SERVER_VERIFY = 5 | ||
SERVER_FINISHED = 6 | ||
REQUEST_CERTIFICATE = 7 | ||
CLIENT_CERTIFICATE = 8 | ||
CLIENT_KEY_EXCHANGE = 9 | ||
|
||
|
||
# SSLv2 Handshake Valid State Transition Map (from_state -> to_state) | ||
SSLv2HandshakeTransitionMap = { | ||
SSLv2HandshakeType.CLIENT_HELLO: [SSLv2HandshakeType.SERVER_HELLO], | ||
SSLv2HandshakeType.SERVER_HELLO: [ | ||
SSLv2HandshakeType.CLIENT_MASTER_KEY, | ||
SSLv2HandshakeType.CLIENT_FINISHED, | ||
], | ||
SSLv2HandshakeType.CLIENT_MASTER_KEY: [SSLv2HandshakeType.CLIENT_FINISHED], | ||
SSLv2HandshakeType.CLIENT_FINISHED: [SSLv2HandshakeType.SERVER_VERIFY], | ||
SSLv2HandshakeType.SERVER_VERIFY: [ | ||
SSLv2HandshakeType.SERVER_FINISHED, | ||
SSLv2HandshakeType.REQUEST_CERTIFICATE, | ||
], | ||
SSLv2HandshakeType.SERVER_FINISHED: [], | ||
SSLv2HandshakeType.REQUEST_CERTIFICATE: [SSLv2HandshakeType.CLIENT_CERTIFICATE], | ||
SSLv2HandshakeType.CLIENT_CERTIFICATE: [SSLv2HandshakeType.SERVER_FINISHED], | ||
} | ||
|
||
|
||
class SLv2HandshakeState(Enum): | ||
CLIENT_HELLO = "client_hello" | ||
SERVER_HELLO = "server_hello" | ||
CLIENT_MASTER_KEY = "client_master_key" | ||
CLIENT_FINISHED = "client_finished" | ||
SERVER_VERIFY = "server_verify" | ||
REQUEST_CERTIFICATE = "request_certificate" | ||
CLIENT_CERTIFICATE = "client_certificate" | ||
SERVER_FINISHED = "server_finished" | ||
|
||
|
||
class SSLv2State(Enum): | ||
""" | ||
Represents the state of the SSLv2 protocol. | ||
Attributes: | ||
HANDSHAKE (str): Represents the state during the handshake phase. | ||
DONE (str): Represents the state when the handshake is completed. | ||
""" | ||
|
||
HANDSHAKE = "handshake" | ||
DONE = "done" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
from pyswitch.src.ssl.ssl_v2 import ( | ||
SSLv2Handshake, | ||
SSLv2HandshakeClientHello, | ||
) | ||
from pyswitch.src.ssl.ssl_v2_constants import ( | ||
SSLv2HandshakeTransitionMap, | ||
SSLv2HandshakeType, | ||
SSLv2State, | ||
) | ||
|
||
|
||
def is_valid_sslv2_handshake_transition( | ||
from_state: SSLv2HandshakeType, | ||
to_state: SSLv2HandshakeType, | ||
) -> bool: | ||
""" | ||
Checks if a transition from the current state to the given state is valid. | ||
Args: | ||
from_state (SSLv2HandshakeType): The state from which the transition is made. | ||
to_state (SSLv2HandshakeType): The state to which the transition is made. | ||
Returns: | ||
bool: True if the transition is valid, False otherwise. | ||
""" | ||
return to_state in SSLv2HandshakeTransitionMap[from_state] | ||
|
||
|
||
class SSLv2StateMachine: | ||
""" | ||
Represents the SSLv2 state machine. | ||
Attributes: | ||
state (SSLv2State): The current state of the state machine. | ||
handshake (SSLv2Handshake): The current handshake being processed. | ||
Methods: | ||
process(data: bytes): Processes the given data based on the current state. | ||
""" | ||
|
||
def __init__(self): | ||
self.state = SSLv2State.HANDSHAKE | ||
self.handshake = None | ||
|
||
def process(self, data: bytes): | ||
if self.state == SSLv2State.HANDSHAKE: | ||
self.handshake = SSLv2Handshake(data) | ||
if self.handshake.handshake_type == SSLv2HandshakeType.CLIENT_HELLO: | ||
client_hello = SSLv2HandshakeClientHello(self.handshake.data[1:]) | ||
print(client_hello) | ||
else: | ||
raise ValueError("Invalid state") | ||
|
||
def __str__(self): | ||
return f"State: {self.state}, Handshake: {self.handshake}" |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,22 @@ | ||
def bin2hex(bin_str): | ||
return "".join(format(x, "02x") for x in bin_str) | ||
|
||
|
||
def assert_enough_data(data_length: int, expected_length: int): | ||
if data_length < expected_length: | ||
raise ValueError( | ||
f"Expected at least {expected_length} bytes, got {data_length} bytes" | ||
) | ||
|
||
|
||
def is_msb_set(byte): | ||
""" | ||
Checks if the most significant bit (MSB) of the given byte is set. | ||
Parameters: | ||
- byte: An integer representing the byte to check. | ||
Returns: | ||
- A boolean value indicating whether the MSB is set (True) or not (False). | ||
""" | ||
return byte & 0x80 == 0x80 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
import unittest | ||
|
||
from pyswitch.src.ssl.ssl_v2_constants import SSLv2HandshakeType | ||
from pyswitch.src.ssl.ssl_v2_state_machine import ( | ||
is_valid_sslv2_handshake_transition, | ||
) | ||
|
||
|
||
class SSLv2StateMachineTestCase(unittest.TestCase): | ||
def test_valid_transition(self): | ||
# Test a valid transition from SSLvHandshakeType.CLIENT_HELLO to SSLv2HandshakeType.SERVER_HELLO | ||
from_state = SSLv2HandshakeType.CLIENT_HELLO | ||
to_state = SSLv2HandshakeType.SERVER_HELLO | ||
result = is_valid_sslv2_handshake_transition(from_state, to_state) | ||
self.assertTrue(result) | ||
|
||
def test_invalid_transition(self): | ||
# Test an invalid transition from SSLv2HandshakeType.CLIENT_HELLO to SSLv2HandshakeType.CLIENT_MASTER_KEY | ||
from_state = SSLv2HandshakeType.CLIENT_HELLO | ||
to_state = SSLv2HandshakeType.CLIENT_MASTER_KEY | ||
result = is_valid_sslv2_handshake_transition(from_state, to_state) | ||
self.assertFalse(result) | ||
|
||
|
||
if __name__ == "__main__": | ||
unittest.main() |