-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathdes.f
40 lines (40 loc) · 1.22 KB
/
des.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
SUBROUTINE DES(INPUT,KEY,NEWKEY,ISW,JOTPUT)
DIMENSION INPUT(64),KEY(64),JOTPUT(64),ITMP(64),IP(64),IPM(64)
* ,ICF(32),KNS(48,16)
DATA IP/58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46
* ,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,5
*1
* ,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7/
DATA IPM/40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14
* ,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3
* ,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25/
IF(NEWKEY.NE.0)THEN
NEWKEY=0
DO 11 I=1,16
CALL KS(KEY,I,KNS(1,I))
11 CONTINUE
ENDIF
DO 12 J=1,64
ITMP(J)=INPUT(IP(J))
12 CONTINUE
DO 14 I=1,16
II=I
IF(ISW.EQ.1)II=17-I
CALL CYFUN(ITMP(33),KNS(1,II),ICF)
DO 13 J=1,32
IC=ICF(J)+ITMP(J)
ITMP(J)=ITMP(J+32)
ITMP(J+32)=IAND(IC,1)
C ITMP(J+32)=MOD(MOD(IC,2)+2,2)
13 CONTINUE
14 CONTINUE
DO 15 J=1,32
IC=ITMP(J)
ITMP(J)=ITMP(J+32)
ITMP(J+32)=IC
15 CONTINUE
DO 16 J=1,64
JOTPUT(J)=ITMP(IPM(J))
16 CONTINUE
RETURN
END