Unauthenticate IPSC Bug Fixed
unauthenticated packets were subject to having their hashes stripped just like other packets. The problem is that they don't have hashes to strip, so I was throwing away part of the packet. Fixed in log.py, dmrlink.py and bridge.py
This commit is contained in:
		
							parent
							
								
									7a63b3d25f
								
							
						
					
					
						commit
						6223f582cf
					
				
							
								
								
									
										20
									
								
								bridge.py
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								bridge.py
									
									
									
									
									
								
							| @ -66,12 +66,28 @@ class bridgeIPSC(IPSC): | ||||
|     def private_data(self, _network, _src_sub, _dst_sub, _ts, _end, _peerid, _data):     | ||||
|         pass | ||||
| 
 | ||||
|          | ||||
| class bridgeUnauthIPSC(logIPSC): | ||||
|      | ||||
|     # There isn't a hash to build, so just return the data | ||||
|     # | ||||
|     def hashed_packet(self, _key, _data): | ||||
|         return _data    | ||||
|      | ||||
|     # Remove the hash from a packet and return the payload | ||||
|     # | ||||
|     def strip_hash(self, _data): | ||||
|         return _data | ||||
|      | ||||
|     # Everything is validated, so just return True | ||||
|     # | ||||
|     def validate_auth(self, _key, _data): | ||||
|         return True | ||||
|        | ||||
| for ipsc_network in NETWORK: | ||||
|     if (NETWORK[ipsc_network]['LOCAL']['ENABLED']): | ||||
|         if NETWORK[ipsc_network]['LOCAL']['AUTH_ENABLED'] == True: | ||||
|             networks[ipsc_network] = bridgeIPSC(ipsc_network) | ||||
|         else: | ||||
|             networks[ipsc_network] = UnauthIPSC(ipsc_network) | ||||
|             networks[ipsc_network] = bridgeUnauthIPSC(ipsc_network) | ||||
|         reactor.listenUDP(NETWORK[ipsc_network]['LOCAL']['PORT'], networks[ipsc_network]) | ||||
| reactor.run() | ||||
							
								
								
									
										25
									
								
								dmrlink.py
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								dmrlink.py
									
									
									
									
									
								
							| @ -202,14 +202,6 @@ def get_info(_id, _dict): | ||||
|             return _dict[_id] | ||||
|     return _id | ||||
| 
 | ||||
| # Remove the hash from a packet and return the payload | ||||
| # | ||||
| def strip_hash(_data): | ||||
| #    _log = logger.debug | ||||
| #    _log('Stripped Packet: %s', binascii.b2a_hex(_data[:-10])) | ||||
|     return _data[:-10] | ||||
| 
 | ||||
| 
 | ||||
| # Determine if the provided peer ID is valid for the provided network  | ||||
| # | ||||
| def valid_peer(_peer_list, _peerid): | ||||
| @ -507,12 +499,18 @@ class IPSC(DatagramProtocol): | ||||
|         _hash = binascii.a2b_hex((hmac.new(_key,_data,hashlib.sha1)).hexdigest()[:20]) | ||||
|         return (_data + _hash)     | ||||
|      | ||||
|     # Remove the hash from a packet and return the payload | ||||
|     # | ||||
|     def strip_hash(self, _data): | ||||
|     #    _log = logger.debug | ||||
|     #    _log('Stripped Packet: %s', binascii.b2a_hex(_data[:-10])) | ||||
|         return _data[:-10] | ||||
|      | ||||
|     # Take a RECEIVED packet, calculate the auth hash and verify authenticity | ||||
|     # | ||||
|     def validate_auth(self, _key, _data): | ||||
|         _log = logger.info | ||||
|         _payload = strip_hash(_data) | ||||
|         _payload = self.strip_hash(_data) | ||||
|         _hash = _data[-10:] | ||||
|         _chk_hash = binascii.a2b_hex((hmac.new(_key,_payload,hashlib.sha1)).hexdigest()[:20])    | ||||
| 
 | ||||
| @ -643,7 +641,7 @@ class IPSC(DatagramProtocol): | ||||
|             return | ||||
|              | ||||
|         # Strip the hash, we won't need it anymore | ||||
|         data = strip_hash(data) | ||||
|         data = self.strip_hash(data) | ||||
| 
 | ||||
|         # Packets types that must be originated from a peer (including master peer) | ||||
|         if (_packettype in ANY_PEER_REQUIRED): | ||||
| @ -798,7 +796,12 @@ class UnauthIPSC(IPSC): | ||||
|     # There isn't a hash to build, so just return the data | ||||
|     # | ||||
|     def hashed_packet(self, _key, _data): | ||||
|         return (_data)     | ||||
|         return _data | ||||
|      | ||||
|     # Remove the hash from a packet and return the payload | ||||
|     # | ||||
|     def strip_hash(_self, data): | ||||
|         return _data | ||||
|      | ||||
|     # Everything is validated, so just return True | ||||
|     # | ||||
|  | ||||
							
								
								
									
										7
									
								
								log.py
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								log.py
									
									
									
									
									
								
							| @ -95,7 +95,12 @@ class logUnauthIPSC(logIPSC): | ||||
|     # There isn't a hash to build, so just return the data | ||||
|     # | ||||
|     def hashed_packet(self, _key, _data): | ||||
|         return (_data)     | ||||
|         return _data    | ||||
|      | ||||
|     # Remove the hash from a packet and return the payload | ||||
|     # | ||||
|     def strip_hash(self, _data): | ||||
|         return _data | ||||
|      | ||||
|     # Everything is validated, so just return True | ||||
|     # | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user