diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d20b64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/AES_CMAC.pyc b/AES_CMAC.pyc deleted file mode 100644 index 536f3f8..0000000 Binary files a/AES_CMAC.pyc and /dev/null differ diff --git a/DataPayload.pyc b/DataPayload.pyc deleted file mode 100644 index 4673f89..0000000 Binary files a/DataPayload.pyc and /dev/null differ diff --git a/Direction.pyc b/Direction.pyc deleted file mode 100644 index f36eed0..0000000 Binary files a/Direction.pyc and /dev/null differ diff --git a/FHDR.pyc b/FHDR.pyc deleted file mode 100644 index aae30b0..0000000 Binary files a/FHDR.pyc and /dev/null differ diff --git a/JoinAcceptPayload.py b/JoinAcceptPayload.py index 8fdd2a4..3e182ac 100644 --- a/JoinAcceptPayload.py +++ b/JoinAcceptPayload.py @@ -49,7 +49,7 @@ def get_rxdelay(self): def get_cflist(self): return self.cflist - def compute_mic(self, key, mhdr): + def compute_mic(self, key, direction, mhdr): mic = [] mic += self.to_clear_raw() mic += [mhdr] @@ -57,7 +57,7 @@ def compute_mic(self, key, mhdr): cmac = AES_CMAC() return cmac.encode(str(bytearray(key)), str(bytearray(mic)))[:4] - def decrypt_payload(self, key): + def decrypt_payload(self, key, direction): a = [] a += self.encrypted_payload a += self.mic diff --git a/JoinAcceptPayload.pyc b/JoinAcceptPayload.pyc deleted file mode 100644 index 6b9aa0e..0000000 Binary files a/JoinAcceptPayload.pyc and /dev/null differ diff --git a/JoinRequestPayload.py b/JoinRequestPayload.py index 0505953..f77dd48 100644 --- a/JoinRequestPayload.py +++ b/JoinRequestPayload.py @@ -29,9 +29,12 @@ def get_deveui(self): def get_devnonce(self): return self.devnonce - def compute_mic(self, key, mhdr): + def compute_mic(self, key, direction, mhdr): mic = [mhdr] mic += self.to_raw() cmac = AES_CMAC() return cmac.encode(str(bytearray(key)), str(bytearray(mic)))[:4] + + def decrypt_payload(self, key, direction): + return self.to_raw() diff --git a/JoinRequestPayload.pyc b/JoinRequestPayload.pyc deleted file mode 100644 index 5b746af..0000000 Binary files a/JoinRequestPayload.pyc and /dev/null differ diff --git a/MType.pyc b/MType.pyc deleted file mode 100644 index 7f7649a..0000000 Binary files a/MType.pyc and /dev/null differ diff --git a/MacPayload.py b/MacPayload.py index 1d1b4e5..b713b22 100644 --- a/MacPayload.py +++ b/MacPayload.py @@ -31,9 +31,7 @@ def __init__(self, mtype, mac_payload): self.frm_payload = DataPayload(self, mac_payload[self.fhdr.length() + 1:]) def length(self): - if self.frm_payload == None: - return self.fhdr.length() - return self.fhdr.length() + 1 + self.frm_payload.length() + return len(self.to_raw()) def to_raw(self): mac_payload = [] diff --git a/MacPayload.pyc b/MacPayload.pyc deleted file mode 100644 index e627813..0000000 Binary files a/MacPayload.pyc and /dev/null differ diff --git a/MajorVersion.pyc b/MajorVersion.pyc deleted file mode 100644 index 9d50334..0000000 Binary files a/MajorVersion.pyc and /dev/null differ diff --git a/MalformedPacketException.pyc b/MalformedPacketException.pyc deleted file mode 100644 index 59580f0..0000000 Binary files a/MalformedPacketException.pyc and /dev/null differ diff --git a/PhyPayload.py b/PhyPayload.py index 15673dd..4bfa1a3 100644 --- a/PhyPayload.py +++ b/PhyPayload.py @@ -9,11 +9,22 @@ class PhyPayload: - def __init__(self, packet): + def __init__(self): + self.direction = Direction(Direction.UP) + + def length(self): + return len(self.to_raw()) + + def to_raw(self): + phy_payload = [self.mhdr] + phy_payload += self.mac_payload.to_raw() + phy_payload += self.mic + return phy_payload + + def packet(self, packet): if len(packet) < 12: raise MalformedPacketException("Invalid lorawan packet"); - self.direction = Direction(Direction.UP) self.mhdr = packet[0] self.mversion = MajorVersion(self.mhdr) self.mtype = MType(self.mhdr) @@ -51,20 +62,8 @@ def get_mic(self): def set_mic(self, mic): self.mic = mic - def to_raw(self): - phy_payload = [self.mhdr] - phy_payload += self.mac_payload.to_raw() - phy_payload += self.mic - return phy_payload - def compute_mic(self, key): return self.mac_payload.frm_payload.compute_mic(key, self.get_direction(), self.get_mhdr()) - def decrypt_payload(self, key): + def get_payload(self, key): return self.mac_payload.frm_payload.decrypt_payload(key, self.get_direction()) - - def encrypt_payload(self, key, data): - return self.mac_payload.frm_payload.encrypt_payload(key, self.get_direction(), data) - - def set_payload(self, key, data): - return self.mac_payload.frm_payload.set_payload(key, self.get_direction(), data) diff --git a/PhyPayload.pyc b/PhyPayload.pyc deleted file mode 100644 index cfa82f5..0000000 Binary files a/PhyPayload.pyc and /dev/null differ diff --git a/__init__.py b/__init__.py index 19c46eb..dab818a 100644 --- a/__init__.py +++ b/__init__.py @@ -1,4 +1,7 @@ from PhyPayload import PhyPayload -def new(packet): - return PhyPayload(packet) +def new(packet = None): + phy_payload = PhyPayload() + if packet: + phy_payload.packet(packet) + return phy_payload diff --git a/__init__.pyc b/__init__.pyc deleted file mode 100644 index d592269..0000000 Binary files a/__init__.pyc and /dev/null differ