示例#1
0
 def hid_send_encrypt(self, msg):
     sha256_byte_len = 32
     reply = ""
     try:
         encryption_key, authentication_key = derive_keys(self.password)
         msg = EncodeAES_bytes(encryption_key, msg)
         hmac_digest = hmac_oneshot(authentication_key, msg, hashlib.sha256)
         authenticated_msg = base64.b64encode(msg + hmac_digest)
         reply = self.hid_send_plain(authenticated_msg)
         if 'ciphertext' in reply:
             b64_unencoded = bytes(
                 base64.b64decode(''.join(reply["ciphertext"])))
             reply_hmac = b64_unencoded[-sha256_byte_len:]
             hmac_calculated = hmac_oneshot(
                 authentication_key, b64_unencoded[:-sha256_byte_len],
                 hashlib.sha256)
             if not hmac.compare_digest(reply_hmac, hmac_calculated):
                 raise Exception("Failed to validate HMAC")
             reply = DecodeAES_bytes(encryption_key,
                                     b64_unencoded[:-sha256_byte_len])
             reply = to_string(reply, 'utf8')
             reply = json.loads(reply)
         if 'error' in reply:
             self.password = None
     except Exception as e:
         _logger.info(f'Exception caught {repr(e)}')
     return reply
示例#2
0
 def hid_send_encrypt(self, msg):
     reply = ""
     try:
         secret = Hash(self.password)
         msg = EncodeAES(secret, msg)
         reply = self.hid_send_plain(msg)
         if 'ciphertext' in reply:
             reply = DecodeAES(secret, ''.join(reply["ciphertext"]))
             reply = to_string(reply, 'utf8')
             reply = json.loads(reply)
         if 'error' in reply:
             self.password = None
     except Exception as e:
         print_error('Exception caught ' + str(e))
     return reply
示例#3
0
 def hid_send_plain(self, msg):
     reply = ""
     try:
         serial_number = self.dbb_hid.get_serial_number_string()
         if "v2.0." in serial_number or "v1." in serial_number:
             hidBufSize = 4096
             self.dbb_hid.write('\0' + msg + '\0' * (hidBufSize - len(msg)))
             r = bytearray()
             while len(r) < hidBufSize:
                 r += bytearray(self.dbb_hid.read(hidBufSize))
         else:
             self.hid_send_frame(msg)
             r = self.hid_read_frame()
         r = r.rstrip(b' \t\r\n\0')
         r = r.replace(b"\0", b'')
         r = to_string(r, 'utf8')
         reply = json.loads(r)
     except Exception as e:
         print_error('Exception caught ' + str(e))
     return reply
示例#4
0
 def hid_send_plain(self, msg):
     reply = ""
     try:
         serial_number = self.dbb_hid.get_serial_number_string()
         if "v2.0." in serial_number or "v1." in serial_number:
             hidBufSize = 4096
             self.dbb_hid.write('\0' + msg + '\0' * (hidBufSize - len(msg)))
             r = bytearray()
             while len(r) < hidBufSize:
                 r += bytearray(self.dbb_hid.read(hidBufSize))
         else:
             self.hid_send_frame(msg)
             r = self.hid_read_frame()
         r = r.rstrip(b' \t\r\n\0')
         r = r.replace(b"\0", b'')
         r = to_string(r, 'utf8')
         reply = json.loads(r)
     except Exception as e:
         _logger.info(f'Exception caught {repr(e)}')
     return reply
示例#5
0
 def hid_send_encrypt(self, msg):
     sha256_byte_len = 32
     reply = ""
     try:
         encryption_key, authentication_key = derive_keys(self.password)
         msg = EncodeAES_bytes(encryption_key, msg)
         hmac_digest = hmac_oneshot(authentication_key, msg, hashlib.sha256)
         authenticated_msg = base64.b64encode(msg + hmac_digest)
         reply = self.hid_send_plain(authenticated_msg)
         if 'ciphertext' in reply:
             b64_unencoded = bytes(base64.b64decode(''.join(reply["ciphertext"])))
             reply_hmac = b64_unencoded[-sha256_byte_len:]
             hmac_calculated = hmac_oneshot(authentication_key, b64_unencoded[:-sha256_byte_len], hashlib.sha256)
             if not hmac.compare_digest(reply_hmac, hmac_calculated):
                 raise Exception("Failed to validate HMAC")
             reply = DecodeAES_bytes(encryption_key, b64_unencoded[:-sha256_byte_len])
             reply = to_string(reply, 'utf8')
             reply = json.loads(reply)
         if 'error' in reply:
             self.password = None
     except Exception as e:
         _logger.info(f'Exception caught {repr(e)}')
     return reply