      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
