┊ 网站导航 ┊ 管理登陆 ┊ 免责声明 ┊ 问题反馈 ┊ 友链说明┊本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正! 不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作! ![]() ![]() ![]() ![]() ![]() ![]() 本站学习交流群:138..158(高级群1-满)、77930286(高级群2)、61804809(群3) Copyright© MCUSY All Rights Reserved 本站网警备案号: WZ36040002485 ICP备案证书号:粤ICP备09034963号 |
#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 B00010000 ; 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 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 ; COPY THE BIT TO BIT 7
MOVLW B10000000 ; COPY THE BIT TO BIT 7
XORWF HOP2,W ; ONLY INTERESTED IN BIT HOP2,7
XORWF HOP4,W ; ONLY INTERESTED IN BIT HOP4,7
XORWF KEY1,W ; ONLY INTERESTED IN BIT KEYREG1,7
MOVWF MASK ; STORE W TEMPORARILY (WE NEED BIT 7)
RLF MASK,F ; LEFT ROTATE MASK TO GET BIT 7 INTO CARRY
RLF HOP1,F ; SHIFT IN THE NEW BIT
RLF HOP2,F
RLF HOP3,F
RLF HOP4,F
ROTATE_KEY
bcf STATUS,C ; CLEAR CARRY
BTFSC KEY7,7 ; SET CARRY IF LEFTMOST BIT SET
bsf STATUS,C ; SET CARRY IF LEFTMOST BIT SET
RLF KEY0,F ; LEFT-ROTATE THE 64-BIT KEY
RLF KEY1,F
RLF KEY2,F
RLF KEY3,F
RLF KEY4,F
RLF KEY5,F
RLF KEY6,F
RLF KEY7,F
DECFSZ CNT0,F ; INNER LOOP 48 TIMES
GOTO DECRYPT_INNER ; INNER LOOP 48 TIMES
DECFSZ CNT1,F ; OUTER LOOP 12 TIMES (11+1 TO RESTORE KEY)
GOTO DECRYPT_OUTER ; OUTER LOOP 12 TIMES (11+1 TO RESTORE KEY)
RETLW 0 ; RETURN
┊ 网站导航 ┊ 管理登陆 ┊ 免责声明 ┊ 问题反馈 ┊ 友链说明┊本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正! 不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作! ![]() ![]() ![]() ![]() ![]() ![]() 本站学习交流群:138..158(高级群1-满)、77930286(高级群2)、61804809(群3) Copyright© MCUSY All Rights Reserved 本站网警备案号: WZ36040002485 ICP备案证书号:粤ICP备09034963号 |