Шифрование LoRaWAN AES в C#
Протокол LoRaWAN имеет особый способ шифрования данных ( стр. 20, глава 4.3.3.1), и я пытаюсь сделать это в C#.
Во-первых, последовательность A с блоками размером 16 байтов каждый A1..An
создано. Затем они зашифрованы, чтобы получить последовательность S
блоков Si
:
Si = aes128_encrypt(K, Ai) for i = 1..n
S = S1 | S2 | .. | Sn
И, наконец, полезная нагрузка зашифрована:
(pld | pad16) xor S
truncation of the first len(payload) bytes
Пока мне удалось сгенерировать блоки, но я новичок в криптографии и не знаю, как поступить, кто-нибудь может помочь?
Вот сценарий шифрования в Python.
Вот сценарий шифрования в C++.
И это код C#, который у меня есть:
public string encrypt(string payload, string dev_eui, string dev_addr, int counter_up)
{
try
{
byte[] devaddr = StringToByteArray(dev_addr);
byte[] aBlock = {
0x01,
0x00,
0x00,
0x00,
0x00,
0,
devaddr[3],
devaddr[2],
devaddr[1],
devaddr[0],
(byte)(counter_up & 0xff),
(byte)((counter_up >> 8) & 0xff),
(byte)((counter_up >> 16) & 0xff),
(byte)((counter_up >> 24) & 0xff),
0x00,
0x00 };
\\...