security0.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # SPDX-FileCopyrightText: 2018-2022 Espressif Systems (Shanghai) CO LTD
  2. # SPDX-License-Identifier: Apache-2.0
  3. #
  4. # APIs for interpreting and creating protobuf packets for
  5. # protocomm endpoint with security type protocomm_security0
  6. import proto
  7. from utils import str_to_bytes
  8. from .security import Security
  9. class Security0(Security):
  10. def __init__(self, verbose):
  11. # Initialize state of the security1 FSM
  12. self.session_state = 0
  13. self.verbose = verbose
  14. Security.__init__(self, self.security0_session)
  15. def security0_session(self, response_data):
  16. # protocomm security0 FSM which interprets/forms
  17. # protobuf packets according to present state of session
  18. if (self.session_state == 0):
  19. self.session_state = 1
  20. return self.setup0_request()
  21. if (self.session_state == 1):
  22. self.setup0_response(response_data)
  23. return None
  24. def setup0_request(self):
  25. # Form protocomm security0 request packet
  26. setup_req = proto.session_pb2.SessionData()
  27. setup_req.sec_ver = 0
  28. session_cmd = proto.sec0_pb2.S0SessionCmd()
  29. setup_req.sec0.sc.MergeFrom(session_cmd)
  30. return setup_req.SerializeToString().decode('latin-1')
  31. def setup0_response(self, response_data):
  32. # Interpret protocomm security0 response packet
  33. setup_resp = proto.session_pb2.SessionData()
  34. setup_resp.ParseFromString(str_to_bytes(response_data))
  35. # Check if security scheme matches
  36. if setup_resp.sec_ver != proto.session_pb2.SecScheme0:
  37. raise RuntimeError('Incorrect security scheme')
  38. def encrypt_data(self, data):
  39. # Passive. No encryption when security0 used
  40. return data
  41. def decrypt_data(self, data):
  42. # Passive. No encryption when security0 used
  43. return data