16.02.2014, 20:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2012
Сообщений: 3,015
Сказал спасибо: 7
Сказали Спасибо 3,494 раз(а) в 1,783 сообщении(ях)
|
Re: Помощь в WinAvr
"avr-libc Reference Manual.
Backwards compatibility macros
#define PRG RDB(addr) pgm read byte(addr)"
Это для совместимости со старой версией avr-libc.
Используется для чтения байта из памяти программ.
http://lobot.ucoz.ru/publ/mikrokontr...lerov/3-1-0-10
|
|
|
|
17.09.2014, 17:20
|
|
Прописка
Регистрация: 17.02.2009
Сообщений: 154
Сказал спасибо: 14
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Помощь в WinAvr
Доброго времени суток,помогите с кодом. Есть две функции,одна шифратор и дешифратор
Цитата:
|
#define KeeLoq_NLF 0x3A5C742E
#define bit(x,n) (((x)››(n))&1)
#define g5(x,a,b,c,d,e) (bit(x,a)+bit(x,b)*2+bit(x,c)*4+bit(x,d)*8+bit(x,e )*16)
/// шифрование
uint32_t KeeLoq_Encrypt (uint32_t dattta,uint64_t key){ //uint32_t data, uint64_t key
uint32_t x = dattta, r;
for (r = 0; r ‹ 528; r++){
x = (x››1)^((bit(x,0)^bit(x,16)^( uint32_t)bit(key,r&63)^bit(KeeLoq_NLF,g5(x,0,9,20, 26,31)))‹‹31);
}
return x;
}
/// дешифровка
uint32_t KeeLoq_Decrypt ( uint32_t dattta, uint64_t key){
uint32_t x = dattta, r;
for (r = 0; r ‹ 528; r++)
x = (x‹‹1)^bit(x,31)^bit(x,15)^( uint32_t)bit(key,(15-r)&63)^bit(KeeLoq_NLF,g5(x,0,8,19,25,30));
return x;
}
|
Конечно очень мудрёный код,по крайне мере для меня, так вот на функцию шифратора компилятор ругается, а на дешифратора нет. Вроде код почти одинаковый. Что не так подскажите? А это WinAvr выдаёт ошибку
Цитата:
|
Make_data.c:26: error: unable to find a register to spill in class 'POINTER_REGS'
Make_data.c:26: error: this is the insn:
(insn 52 50 53 3 Make_data.c:22 (set (reg:SI 24 r24 [63])
(and:SI (subreg:SI (regI 62 [+1 ]) 0)
(const_int 1 [0x1]))) 43 {andsi3} (nil))
Make_data.c:26: confused by earlier errors, bailing out
|
|
|
|
|
18.09.2014, 08:08
|
|
Временная регистрация
Регистрация: 06.06.2007
Сообщений: 55
Сказал спасибо: 2
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Помощь в WinAvr
Разбейте выражение на несколько последовательных действий и ошибка исчезнет. Например, так:
Цитата:
|
for (r = 0; r ‹ 528; r++){
uint32_t t;
t = bit(x, 0);
t ^= bit(x, 16);
t ^= (uint32_t) bit(key, r&63);
t ^= bit(KeeLoq_NLF,g5(x, 0, 9, 20, 26, 31));
t ‹‹= 31;
t ^= (x ›› 1);
x = t; }
|
А так и задумано:
Цитата:
|
a != KeeLoq_Decrypt(KeeLoq_Encrypt(a, key), key)
|
?
|
|
|
|
18.09.2014, 10:05
|
|
Прописка
Регистрация: 17.02.2009
Сообщений: 154
Сказал спасибо: 14
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Помощь в WinAvr
Сообщение от Bear-ku
|
А так и задумано:
|
Спасибо, А можете объяснить что, что за выражение
a != KeeLoq_Decrypt(KeeLoq_Encrypt(a, key), key)
|
|
|
|
18.09.2014, 12:19
|
|
Временная регистрация
Регистрация: 06.06.2007
Сообщений: 55
Сказал спасибо: 2
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Помощь в WinAvr
Сначала закодировал переменную a (KeeLoq_Encrypt(a, key)), а полученный результат декодировал с тем же ключом (KeeLoq_Decrypt(KeeLoq_Encrypt(a, key), key)). Результат полученный после декодирования не совпал с начальным значением, т.е. с a.
|
|
|
|
19.09.2014, 05:19
|
|
Прописка
Регистрация: 17.02.2009
Сообщений: 154
Сказал спасибо: 14
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Помощь в WinAvr
Да я понял , да и проверил, не совпадает. Тогда в чём логика? По моему что зашифровано то и после дешифровки должно быть одним и тем же, при условии что ключ один.
|
|
|
|
19.09.2014, 07:50
|
|
Временная регистрация
Регистрация: 06.06.2007
Сообщений: 55
Сказал спасибо: 2
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Помощь в WinAvr
это же ВАШ код. Если не ваш, попробуйте найти автора, либо исходный алгоритм шифрования.
|
|
|
|
19.09.2014, 10:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Помощь в WinAvr
|
|
|
|
19.09.2014, 11:39
|
|
Временная регистрация
Регистрация: 06.06.2007
Сообщений: 55
Сказал спасибо: 2
Сказали Спасибо 10 раз(а) в 10 сообщении(ях)
|
Re: Помощь в WinAvr
Ну вот и ответ: g5(x,1,9,20,26,31).
|
|
|
|
19.09.2014, 18:13
|
|
Прописка
Регистрация: 17.02.2009
Сообщений: 154
Сказал спасибо: 14
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
|
Re: Помощь в WinAvr
Сообщение от Bear-ku
|
Ну вот и ответ: g5(x,1,9,20,26,31).
|
Что то не могу понять что это.....?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:46.
|
|