home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 11 / titel / feal.a < prev    next >
Encoding:
Text File  |  1989-08-30  |  5.3 KB  |  197 lines

  1. (* ------------------------------------------------------ *)
  2. (*                        FEAL.A                          *)
  3. (*    Algorithmus von Akihiro Shimizu & Shoji Mijaguchi   *)
  4. (*    implementiert in M2ASM  (c) 1989 Ralf Hensmann      *)
  5. (* ------------------------------------------------------ *)
  6. module FEAL;
  7.  
  8. segment D_FEAL (M_DATA,28H); select D_FEAL
  9. public FEAL@Key:        org 32     (* Zur Verschlüsselung *)
  10. public FEAL@DecryptKey: org 32     (* Zur Entschlüsselung *)
  11.        Hilf1:           org 2      (* Hilfsvariablen *)
  12.        Hilf2:           org 2
  13.        HilfB:           org 1
  14.  
  15. segment C_FEAL (FCODE,28H); group G_FEAL (C_FEAL);
  16.         select C_FEAL
  17.  
  18. public FEAL$SetKey: DataAdr = 6;
  19.         push bp
  20.         mov  bp,sp
  21.         push ds
  22.         push es
  23.         push si
  24.         push di
  25.                                     (* Laden der Register *)
  26.         mov  ax, [bp] [DataAdr]
  27.         mov  bx, [bp] [DataAdr+2]
  28.         mov  cx, [bp] [DataAdr+4]
  29.         mov  dx, [bp] [DataAdr+6]
  30.                             (* DS auf Datensegment setzen *)
  31.         mov  si,D_FEAL
  32.         mov  ds,si
  33.                             (* Hilfsvariable auf 0 setzen *)
  34.         and  word [Hilf1], 0
  35.         and  word [Hilf2], 0
  36.         sub  si, si
  37.  
  38.                                     (* Start der Schleife *)
  39. Start:  push cx
  40.         push dx
  41.         xor  cx, [Hilf1]
  42.         xor  dx, [Hilf2]
  43.         mov  [Hilf1], ax
  44.         mov  [Hilf2], bx
  45.                                            (* Funktion fk *)
  46.         xor  ah, al
  47.         xor  bl, bh
  48.  
  49.         mov  [HilfB], bl
  50.         xor  bl, cl
  51.         add  ah, bl; inc ah; rol ah,1; rol ah,1
  52.         mov  bl, [HilfB]
  53.  
  54.         mov  [HilfB], ah
  55.         xor  ah, ch
  56.         add  bl, ah;         rol bl,1; rol bl,1
  57.         mov  ah, [HilfB]
  58.  
  59.         xor  ah, dl
  60.         add  al, ah;         rol al,1; rol al,1
  61.         mov  ah, [HilfB]
  62.  
  63.         mov  [HilfB], bl
  64.         xor  bl, dh
  65.         add  bh, bl; inc bh; rol bh,1; rol bh,1
  66.         mov  bl, [HilfB]
  67.                                          (* Funktionsende *)
  68.         mov  [FEAL@Key]   [si], ax
  69.         mov  [FEAL@Key+2] [si], bx
  70.         mov  cx, ax
  71.         mov  dx, bx
  72.         pop  bx
  73.         pop  ax
  74.         add  si, 4
  75.         cmp  si, 32
  76.         jb   Start
  77.  
  78.                                   (* DecryptKey erstellen *)
  79.         mov  ax, ds
  80.         mov  es, ax
  81.         lea  si, [FEAL@Key]
  82.         add  si, 16
  83.         mov  dx, si
  84.         lea  di, [FEAL@DecryptKey]
  85.         add  di, 24
  86.         movsw; movsw; movsw; movsw;
  87.         sub  di, 16
  88.         movsw; movsw; movsw; movsw;
  89.  
  90.         sub  di, 10
  91.         sub  si, 32
  92. Schleife:
  93.         lodsw
  94.         mov  [di], ax
  95.         dec  di
  96.         dec  di
  97.         cmp  si, dx
  98.         jb   Schleife
  99.                                          (* Funktionsende *)
  100.         pop  di
  101.         pop  si
  102.         pop  es
  103.         pop  ds
  104.         mov  sp, bp
  105.         pop  bp
  106.         ret  far 8
  107.                               (* Verschlüsselungsfunktion *)
  108.  
  109. public FEAL$Crypt: DataAdr = 6;
  110.  
  111.         push  bp
  112.         mov   bp, sp
  113.         push  si
  114.         push  ds
  115.         lea   si, [FEAL@Key]
  116.         jmp   near CryptStart
  117.  
  118. public FEAL$DeCrypt: DataAdr = 6;
  119.  
  120.         push  bp
  121.         mov   bp, sp
  122.         push  si
  123.         push  ds
  124.         lea   si, [FEAL@DecryptKey]
  125.  
  126. CryptStart:
  127.         push  di
  128.         lds   di, [bp] [DataAdr]
  129.  
  130.                                     (* Laden der Register *)
  131.         mov  ax, [di]
  132.         mov  bx, [di] [2]
  133.         mov  cx, [di] [4]
  134.         mov  dx, [di] [6]
  135.  
  136.         mov   di, D_FEAL
  137.         mov   ds, di
  138.         mov   di, si                 (* Ende der Schleife *)
  139.         add   di, 16
  140.                                          (* Anfangs - XOR *)
  141.         xor  ax, [di]
  142.         xor  bx, [di] [2]
  143.         xor  cx, [di] [4]
  144.         xor  dx, [di] [6]
  145.         xor  cx, ax
  146.         xor  dx, bx
  147.  
  148. C_Schleife:
  149.         mov  [Hilf1], cx
  150.         mov  [Hilf2], dx
  151.                                             (* Funktion f *)
  152.         xor  ch, [si]
  153.         inc  si
  154.         xor  dl, [si]
  155.         inc  si
  156.         xor  ch, cl
  157.         xor  dl, dh
  158.         add  ch, dl; inc ch; rol ch,1; rol ch,1
  159.         add  dl, ch;         rol dl,1; rol dl,1
  160.         add  dh, dl; inc dh; rol dh,1; rol dh,1
  161.         add  cl, ch;         rol cl,1; rol cl,1
  162.                                      (* Ende der Funktion *)
  163.         cmp  si, di
  164.         je   Weiter
  165.         xor  cx, ax
  166.         xor  dx, bx
  167.         mov  ax, [Hilf1]
  168.         mov  bx, [Hilf2]
  169.         jmp  C_Schleife
  170. Weiter:
  171.         xor  ax, cx
  172.         xor  bx, dx
  173.         mov  cx, [Hilf1]
  174.         mov  dx, [Hilf2]
  175.         xor  cx, ax
  176.         xor  dx, bx
  177.                                              (* End - XOR *)
  178.         xor  ax, [si] [8]
  179.         xor  bx, [si] [10]
  180.         xor  cx, [si] [12]
  181.         xor  dx, [si] [14]
  182.                                            (* Abspeichern *)
  183.         lds  di, [bp] [DataAdr]
  184.         mov  [di],     ax
  185.         mov  [di] [2], bx
  186.         mov  [di] [4], cx
  187.         mov  [di] [6], dx
  188. Ende:   pop  di
  189.         pop  ds
  190.         pop  si
  191.         mov  sp, bp
  192.         pop  bp
  193.         ret  far 4
  194. end
  195. (* ------------------------------------------------------ *)
  196. (*                   Ende von FEAL.A                      *)
  197.