⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 des.inc

📁 非常经典的加密算法
💻 INC
📖 第 1 页 / 共 2 页
字号:
;-----------------------------------------------------------------------------; DESPICable - DES (FIPS PUB 46, ANSI X3.92-1981) for the PIC16Cxx; Copyright 1994, 1996, 1997, 1998, 1999 Eric L. Smith;; WARNING: This software may be subject to export controls;; http://www.brouhaha.com/~eric/pic/; http://www.brouhaha.com/~eric/crypto/;; DESPICable is free software; you can redistribute it and/or modify it; under the terms of the GNU General Public License version 2 as published by; the Free Software Foundation.  Note that I am not granting permission to; redistribute or modify DESPICable under the terms of any later version of; the General Public License.;; This program is distributed in the hope that it will be useful (or at least; amusing), but WITHOUT ANY WARRANTY; without even the implied warranty of; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General; Public License for more details.;; You should have received a copy of the GNU General Public License along with; this program (in the file "COPYING"); if not, write to the Free Software; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.;; $Id: des.inc,v 1.3 1999/05/07 01:57:31 eric Exp $;-----------------------------------------------------------------------------;-----------------------------------------------------------------------------; parameters;-----------------------------------------------------------------------------; Don't assume that just because keylen, blocklen, and rounds are; defined as constants, that you can change them arbitrarily and; expect the code to still work.  It's mostly hard-coded.keylen		equ	8blocklen	equ	8rounds		equ	16;-----------------------------------------------------------------------------; RAM definitions;-----------------------------------------------------------------------------        cblock	keyl:   4	keyr:   4	left:   4	right:  4	newr:   4        endc;-----------------------------------------------------------------------------; bit definitions;-----------------------------------------------------------------------------#define k01 keyl+0,7#define k02 keyl+0,6#define k03 keyl+0,5#define k04 keyl+0,4#define k05 keyl+0,3#define k06 keyl+0,2#define k07 keyl+0,1#define k08 keyl+0,0#define k09 keyl+1,7#define k10 keyl+1,6#define k11 keyl+1,5#define k12 keyl+1,4#define k13 keyl+1,3#define k14 keyl+1,2#define k15 keyl+1,1#define k16 keyl+1,0#define k17 keyl+2,7#define k18 keyl+2,6#define k19 keyl+2,5#define k20 keyl+2,4#define k21 keyl+2,3#define k22 keyl+2,2#define k23 keyl+2,1#define k24 keyl+2,0#define k25 keyl+3,7#define k26 keyl+3,6#define k27 keyl+3,5#define k28 keyl+3,4#define k29 keyr+0,7#define k30 keyr+0,6#define k31 keyr+0,5#define k32 keyr+0,4#define k33 keyr+0,3#define k34 keyr+0,2#define k35 keyr+0,1#define k36 keyr+0,0#define k37 keyr+1,7#define k38 keyr+1,6#define k39 keyr+1,5#define k40 keyr+1,4#define k41 keyr+1,3#define k42 keyr+1,2#define k43 keyr+1,1#define k44 keyr+1,0#define k45 keyr+2,7#define k46 keyr+2,6#define k47 keyr+2,5#define k48 keyr+2,4#define k49 keyr+2,3#define k50 keyr+2,2#define k51 keyr+2,1#define k52 keyr+2,0#define k53 keyr+3,7#define k54 keyr+3,6#define k55 keyr+3,5#define k56 keyr+3,4#define r01 right+0,7#define r02 right+0,6#define r03 right+0,5#define r04 right+0,4#define r05 right+0,3#define r06 right+0,2#define r07 right+0,1#define r08 right+0,0#define r09 right+1,7#define r10 right+1,6#define r11 right+1,5#define r12 right+1,4#define r13 right+1,3#define r14 right+1,2#define r15 right+1,1#define r16 right+1,0#define r17 right+2,7#define r18 right+2,6#define r19 right+2,5#define r20 right+2,4#define r21 right+2,3#define r22 right+2,2#define r23 right+2,1#define r24 right+2,0#define r25 right+3,7#define r26 right+3,6#define r27 right+3,5#define r28 right+3,4#define r29 right+3,3#define r30 right+3,2#define r31 right+3,1#define r32 right+3,0#define nr01 newr+0,7#define nr02 newr+0,6#define nr03 newr+0,5#define nr04 newr+0,4#define nr05 newr+0,3#define nr06 newr+0,2#define nr07 newr+0,1#define nr08 newr+0,0#define nr09 newr+1,7#define nr10 newr+1,6#define nr11 newr+1,5#define nr12 newr+1,4#define nr13 newr+1,3#define nr14 newr+1,2#define nr15 newr+1,1#define nr16 newr+1,0#define nr17 newr+2,7#define nr18 newr+2,6#define nr19 newr+2,5#define nr20 newr+2,4#define nr21 newr+2,3#define nr22 newr+2,2#define nr23 newr+2,1#define nr24 newr+2,0#define nr25 newr+3,7#define nr26 newr+3,6#define nr27 newr+3,5#define nr28 newr+3,4#define nr29 newr+3,3#define nr30 newr+3,2#define nr31 newr+3,1#define nr32 newr+3,0;-----------------------------------------------------------------------------; DES encrypt one block of data; ; on entry:;   FSR points to plaintext; on exit:;   FSR unchanged, points to ciphertext;   PCLATH altered;   temp altered;-----------------------------------------------------------------------------des:        movlw   sboxpage	; set up to call s-boxes        movwf   pclath	call	ip	call	descore        goto    ipinv;-----------------------------------------------------------------------------; DES decrypt one block of data; ; on entry:;   FSR points to plaintext; on exit:;   FSR unchanged, points to ciphertext;   PCLATH altered;   temp altered;-----------------------------------------------------------------------------desinv:        movlw   sboxpage	; set up to call s-boxes        movwf   pclath	call	ip	call	desinvcore        goto    ipinv;-----------------------------------------------------------------------------; setkey: permute key; on entry:;   FSR points to (unpermuted) key; on exit:;   permuted key is in keyl:keyr;   temp altered;   FSR is unchanged, but memory pointed to by FSR will be altered;     unless preserve_key is defined.  preserve_key costs 32 extra;     clock cycles;-----------------------------------------------------------------------------setkey:	movlw	keylen	movwf	tempsetkey0:	ifdef	preserve_key	movf	indf,w	movwf	newr+0	endif        rlf     indf	rrf	keyl+0        rlf     indf	rrf	keyl+1        rlf     indf	rrf	keyl+2        rlf     indf	rrf	keyl+3        rlf     indf	rrf	keyr+2        rlf     indf	rrf	keyr+1        rlf     indf	rrf	keyr+0	ifdef	preserve_key	movf	newr+0,w	movwf	indf	endif        incf    fsr	decfsz	temp	goto	setkey0        swapf   keyl+3,w        ; move low 4 bits of keyl+3	movwf	keyr+3		;   into high 4 bits of keyr+3	movlw	0f0h		; mask off extra bits	andwf	keyl+3	andwf	keyr+3        movlw   -keylen		; restore FSR to original value        addwf   fsr	return;-----------------------------------------------------------------------------; initial permutation;; on entry:;   data pointed to by FSR; on exit:;   permuted data in left:right;   FSR unchanged;   input data unchanged;-----------------------------------------------------------------------------ip:	movlw	blocklen	movwf	tempip0:    rrf     indf	rrf	left+3        rrf     indf	rrf	left+7        rrf     indf	rrf	left+2        rrf     indf	rrf	left+6        rrf     indf	rrf	left+1        rrf     indf	rrf	left+5        rrf     indf	rrf	left+0        rrf     indf	rrf	left+4        incf    fsr	decfsz	temp	goto	ip0        movlw   -blocklen	; restore FSR to original value        addwf   fsr	return;-----------------------------------------------------------------------------; inverse initial permutation; on entry:;   data in left:right;   pointer to storage for permuted data output pointed to by FSR; on exit:;   permuted data output in buffer pointed to by FSR;   FSR unchanged;   input data unchanged;-----------------------------------------------------------------------------ipinv:	movlw	blocklen	movwf	tempipinv0:	rrf	left+3        rrf     indf	rrf	left+7        rrf     indf	rrf	left+2        rrf     indf	rrf	left+6        rrf     indf	rrf	left+1        rrf     indf	rrf	left+5        rrf     indf	rrf	left+0        rrf     indf	rrf	left+4        rrf     indf        incf    fsr	decfsz	temp	goto	ipinv0        movlw   -blocklen	; restore FSR to original value        addwf   fsr	return;-----------------------------------------------------------------------------; core of DES;-----------------------------------------------------------------------------; The descore and desinvcore subroutines do complete DES encryptions and; decryptions less the initial permutation and inverse initial permutation.; The permutations are omitted here because in a triple-DES, it is a waste; of time to apply them to the intermediate stages.; On entry:;   plaintext in left:right;   permuted key in keyl:keyr; On exit:;   ciphertext in left:right;                             call =    2 cycles;   4 calls to roundl @ 320 cycles = 1280 cycles; 12 calls to roundl2 @ 338 cycles = 4056 cycles;                 fall into swaplr =   18 cycles;                                    -----------;                            total = 5356 cyclesdescore:	call	roundl		; round 1	call	roundl		; round 2	call	roundl2		; round 3	call	roundl2		; round 4	call	roundl2		; round 5	call	roundl2		; round 6	call	roundl2		; round 7	call	roundl2		; round 8	call	roundl		; round 9	call	roundl2		; round 10	call	roundl2		; round 11	call	roundl2		; round 12	call	roundl2		; round 13	call	roundl2		; round 14	call	roundl2		; round 15	call	roundl		; round 16; swaplr = 20 cycles including callswaplr:        movf    left+0,w	movwf	right+0        movf    left+1,w	movwf	right+1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -