|
11 | 11 | from meshtastic.supported_device import SupportedDevice |
12 | 12 | from meshtastic.protobuf import mesh_pb2 |
13 | 13 | from meshtastic.util import ( |
| 14 | + DEFAULT_KEY, |
14 | 15 | Timeout, |
15 | 16 | active_ports_on_supported_devices, |
16 | 17 | camel_to_snake, |
17 | 18 | catchAndIgnore, |
| 19 | + channel_hash, |
18 | 20 | convert_mac_addr, |
19 | 21 | eliminate_duplicate_port, |
20 | 22 | findPorts, |
21 | 23 | fixme, |
22 | 24 | fromPSK, |
23 | 25 | fromStr, |
| 26 | + generate_channel_hash, |
24 | 27 | genPSK256, |
25 | 28 | hexstr, |
26 | 29 | ipstr, |
@@ -670,3 +673,45 @@ def test_shorthex(): |
670 | 673 | assert result == b'\x05' |
671 | 674 | result = fromStr('0xffff') |
672 | 675 | assert result == b'\xff\xff' |
| 676 | + |
| 677 | +def test_channel_hash_basics(): |
| 678 | + "Test the default key and LongFast with channel_hash" |
| 679 | + assert channel_hash(DEFAULT_KEY) == 2 |
| 680 | + assert channel_hash("LongFast".encode("utf-8")) == 10 |
| 681 | + |
| 682 | +@given(st.text(min_size=1, max_size=12)) |
| 683 | +def test_channel_hash_fuzz(channel_name): |
| 684 | + "Test channel_hash with fuzzed channel names, ensuring it produces single-byte values" |
| 685 | + hashed = channel_hash(channel_name.encode("utf-8")) |
| 686 | + assert 0 <= hashed <= 0xFF |
| 687 | + |
| 688 | +def test_generate_channel_hash_basics(): |
| 689 | + "Test the default key and LongFast/MediumFast with generate_channel_hash" |
| 690 | + assert generate_channel_hash("LongFast", "AQ==") == 8 |
| 691 | + assert generate_channel_hash("LongFast", bytes([1])) == 8 |
| 692 | + assert generate_channel_hash("LongFast", DEFAULT_KEY) == 8 |
| 693 | + assert generate_channel_hash("MediumFast", DEFAULT_KEY) == 31 |
| 694 | + |
| 695 | +@given(st.text(min_size=1, max_size=12)) |
| 696 | +def test_generate_channel_hash_fuzz_default_key(channel_name): |
| 697 | + "Test generate_channel_hash with fuzzed channel names and the default key, ensuring it produces single-byte values" |
| 698 | + hashed = generate_channel_hash(channel_name, DEFAULT_KEY) |
| 699 | + assert 0 <= hashed <= 0xFF |
| 700 | + |
| 701 | +@given(st.text(min_size=1, max_size=12), st.binary(min_size=1, max_size=1)) |
| 702 | +def test_generate_channel_hash_fuzz_simple(channel_name, key_bytes): |
| 703 | + "Test generate_channel_hash with fuzzed channel names and one-byte keys, ensuring it produces single-byte values" |
| 704 | + hashed = generate_channel_hash(channel_name, key_bytes) |
| 705 | + assert 0 <= hashed <= 0xFF |
| 706 | + |
| 707 | +@given(st.text(min_size=1, max_size=12), st.binary(min_size=16, max_size=16)) |
| 708 | +def test_generate_channel_hash_fuzz_aes128(channel_name, key_bytes): |
| 709 | + "Test generate_channel_hash with fuzzed channel names and 128-bit keys, ensuring it produces single-byte values" |
| 710 | + hashed = generate_channel_hash(channel_name, key_bytes) |
| 711 | + assert 0 <= hashed <= 0xFF |
| 712 | + |
| 713 | +@given(st.text(min_size=1, max_size=12), st.binary(min_size=32, max_size=32)) |
| 714 | +def test_generate_channel_hash_fuzz_aes256(channel_name, key_bytes): |
| 715 | + "Test generate_channel_hash with fuzzed channel names and 256-bit keys, ensuring it produces single-byte values" |
| 716 | + hashed = generate_channel_hash(channel_name, key_bytes) |
| 717 | + assert 0 <= hashed <= 0xFF |
0 commit comments