PIC 滾動碼的解碼程序
發(fā)布時(shí)間:2008/9/12 0:00:00 訪問次數(shù):1207
#include <p16f877.inc>
;
global decrypt
global key0,key1,key2,key3,key4,key5,key6,key7
global csr0,csr1,csr2,csr3,csr4,csr5,csr6,csr7,csr8
;
#define hop1 csr0 ; ﹚竡 hop1~4 單 csr1~4
#define hop2 csr1
#define hop3 csr2
#define hop4 csr3
#define max_code_length .72
#define code_length .66
;
udata_shr ; difine csr0:csr7 on share memory
csr0 res 1 ; hopping code 鋇μ纗既竟 (lsb)
csr1 res 1
csr2 res 1
csr3 res 1
csr4 res 1
csr5 res 1
csr6 res 1
csr7 res 1
csr8 res 1 ; hopping code 鋇μ纗既竟 (msb)
;
encrypt_data udata 0x20
key0 res 1 ; 64-bit 稈盞じン戈 (lsb)
key1 res 1
key2 res 1
key3 res 1
key4 res 1
key5 res 1
key6 res 1
key7 res 1
;
udata
cnt0 res 1
cnt1 res 1
hop_length res 1
mask res 1
keeloq_temp res 1
;
;
keeloq_code code
;
;*****************************************************
;**** rotate csrs register right 1 bit
;*****************************************************
rot_csrs
rrf csr8,f
rrf csr7,f
rrf csr6,f
rrf csr5,f
rrf csr4,f
rrf csr3,f
rrf csr2,f
rrf csr1,f
rrf csr0,f
return
;
;
;
;
;****************************************************************
;
; function : decrypt ()
;
; description : decrypts 32 bit [hop1:hop4] using [csr0:csr7]
;
;****************************************************************
decrypt
banksel cnt1
movlw (.11+1) ; outer loop 11+1 times
movwf cnt1 ; outer loop 11+1 times
decrypt_outer
movlw .48 ; inner loop 48 times
movwf cnt0 ; inner loop 48 times
decrypt_inner
clrwdt ; reset watchdog timer
movfw cnt1 ; last 48 loops restore the key
xorlw .1 ; last 48 loops restore the key
btfsc status,z ; last 48 loops restore the key
goto rotate_key ; last 48 loops restore the key
; the lookup table is compressed into in 4 bytes to save space
; use the 3 low index bits to make up an 8-bit bit mask
; use the 2 high index bits to look up the value in the table
; use the bit mask to isolate the correct bit in the byte
; part of the reason for this scheme is because normal table
; lookup requires an additional stack level
bcf status,c ; clear carry (for the left shift)
movlw .1 ; initialise mask = 1
btfsc hop3,3 ; shift mask 4x if bit 2 set
movlw b'00010000' ; shift mask 4x if bit 2 set
movwf mask ; initialise mask = 1
btfss hop2,0 ; shift mask another 2x if bit 1 set
goto $+3
rlf mask,f
rlf mask,f
btfsc hop1,0 ; shift mask another 1x if bit 0 set
rlf mask,f
; mask has now been shifted 0-7 times according to bits 2:1:0
movlw high table
movwf pclath
movlw low table
movwf keeloq_temp
movlw 0 ; table index = 0
btfsc hop4,1
iorlw .2 ; if bit 3 set add 2 to the table index
btfsc hop4,6
iorlw .4 ; if bit 4 set add 4 to the table index
addwf keeloq_temp,w
btfsc status,c
incf pclath,f
movwf pcl ; add the index to the program counter
; [ must be in lower half of page ]
table
movlw 0x2e ; bits 4:3 were 00
goto table_end ; end of lookup
movlw 0x74 ; bits 4:3 were 01
goto table_end ; end of lookup
movlw 0x5c ; bits 4:3 were 10
goto table_end ; end of lookup
movlw 0x3a ; bits 4:3 were 11
table_end
andwf mask,1 ; isolate the correct bit
movlw 0 ; copy the bit to bit 7
btfss status,z ; cop
#include <p16f877.inc>
;
global decrypt
global key0,key1,key2,key3,key4,key5,key6,key7
global csr0,csr1,csr2,csr3,csr4,csr5,csr6,csr7,csr8
;
#define hop1 csr0 ; ﹚竡 hop1~4 單 csr1~4
#define hop2 csr1
#define hop3 csr2
#define hop4 csr3
#define max_code_length .72
#define code_length .66
;
udata_shr ; difine csr0:csr7 on share memory
csr0 res 1 ; hopping code 鋇μ纗既竟 (lsb)
csr1 res 1
csr2 res 1
csr3 res 1
csr4 res 1
csr5 res 1
csr6 res 1
csr7 res 1
csr8 res 1 ; hopping code 鋇μ纗既竟 (msb)
;
encrypt_data udata 0x20
key0 res 1 ; 64-bit 稈盞じン戈 (lsb)
key1 res 1
key2 res 1
key3 res 1
key4 res 1
key5 res 1
key6 res 1
key7 res 1
;
udata
cnt0 res 1
cnt1 res 1
hop_length res 1
mask res 1
keeloq_temp res 1
;
;
keeloq_code code
;
;*****************************************************
;**** rotate csrs register right 1 bit
;*****************************************************
rot_csrs
rrf csr8,f
rrf csr7,f
rrf csr6,f
rrf csr5,f
rrf csr4,f
rrf csr3,f
rrf csr2,f
rrf csr1,f
rrf csr0,f
return
;
;
;
;
;****************************************************************
;
; function : decrypt ()
;
; description : decrypts 32 bit [hop1:hop4] using [csr0:csr7]
;
;****************************************************************
decrypt
banksel cnt1
movlw (.11+1) ; outer loop 11+1 times
movwf cnt1 ; outer loop 11+1 times
decrypt_outer
movlw .48 ; inner loop 48 times
movwf cnt0 ; inner loop 48 times
decrypt_inner
clrwdt ; reset watchdog timer
movfw cnt1 ; last 48 loops restore the key
xorlw .1 ; last 48 loops restore the key
btfsc status,z ; last 48 loops restore the key
goto rotate_key ; last 48 loops restore the key
; the lookup table is compressed into in 4 bytes to save space
; use the 3 low index bits to make up an 8-bit bit mask
; use the 2 high index bits to look up the value in the table
; use the bit mask to isolate the correct bit in the byte
; part of the reason for this scheme is because normal table
; lookup requires an additional stack level
bcf status,c ; clear carry (for the left shift)
movlw .1 ; initialise mask = 1
btfsc hop3,3 ; shift mask 4x if bit 2 set
movlw b'00010000' ; shift mask 4x if bit 2 set
movwf mask ; initialise mask = 1
btfss hop2,0 ; shift mask another 2x if bit 1 set
goto $+3
rlf mask,f
rlf mask,f
btfsc hop1,0 ; shift mask another 1x if bit 0 set
rlf mask,f
; mask has now been shifted 0-7 times according to bits 2:1:0
movlw high table
movwf pclath
movlw low table
movwf keeloq_temp
movlw 0 ; table index = 0
btfsc hop4,1
iorlw .2 ; if bit 3 set add 2 to the table index
btfsc hop4,6
iorlw .4 ; if bit 4 set add 4 to the table index
addwf keeloq_temp,w
btfsc status,c
incf pclath,f
movwf pcl ; add the index to the program counter
; [ must be in lower half of page ]
table
movlw 0x2e ; bits 4:3 were 00
goto table_end ; end of lookup
movlw 0x74 ; bits 4:3 were 01
goto table_end ; end of lookup
movlw 0x5c ; bits 4:3 were 10
goto table_end ; end of lookup
movlw 0x3a ; bits 4:3 were 11
table_end
andwf mask,1 ; isolate the correct bit
movlw 0 ; copy the bit to bit 7
btfss status,z ; cop
熱門點(diǎn)擊
- PIC 滾動碼的解碼程序
- PIC單片機(jī)滾動碼的解碼程序
- 采用混合信號高電壓單片機(jī)實(shí)現(xiàn)LED降壓-升壓
- MSP430單片機(jī)與nRF905無線通信系統(tǒng)
- 瑞薩 正式推出于M16C/Tiny系列16位
- 8051單片機(jī)的I2C接口并行擴(kuò)展
- 關(guān)于VIPA 221-1BF00 CPU模塊
- 單片機(jī)與液晶顯示器的接口及應(yīng)用
- AVR單片機(jī)定時(shí)器的要點(diǎn)
- 單片機(jī)控制紅外編碼探測障礙物
推薦技術(shù)資料
- 硬盤式MP3播放器終級改
- 一次偶然的機(jī)會我結(jié)識了NE0 2511,那是一個(gè)遠(yuǎn)方的... [詳細(xì)]
- 100A全集成電源模塊R
- Teseo-VIC6A GNSS車用精準(zhǔn)定位
- 高效先進(jìn)封裝工藝
- 模數(shù)轉(zhuǎn)換器 (Analog-to-Digit
- 集成模數(shù)轉(zhuǎn)換器(ADC)
- 128 通道20 位電流數(shù)字轉(zhuǎn)換器̴
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究