[Back to DATATYPE SWAG index] [Back to Main SWAG index] [Original]

    {
    The following is result of my work to make simple, fast, and enough
    acceptable routine that will encrypt/decrypt any data with the given Key
    string. It really works, it's far from RSA and DES, but it encrypts/decrypts
    just as it will be _quite_ (impossibel? hard?) to restore the original data
    without knowing a Key. BTW, i would recommend as long Key as possibel. ;)

    This Eigus Encryption released to Public Domain, and no charge is required
    for the author. Alsow, if you would have reccomendations, suggestions, ideas,
    or stories to optimise my code, please do not hestitate to ask/tell/post.

    Eigus Encryption may be included in SWAG. Thank you.
    }

    Unit Crypto;
    {
      Copyright (c) 1994 by Andrew Eigus    Fidonet: 2:5100/33
      Eigus Encryption Routine source code for Borland Pascal 7.0
      Platforms: DOS, DPMI, Windows
    }

    interface

    const
      { use these above as values for ecCommand parameter for Encrypt procedure }
      ecEncode  = True;
      ecExtract = False;

    procedure Encrypt(var Buffer; Count : word; Key : string; ecCommand : boolean);

    implementation

    Procedure Encrypt; assembler;
    var
      SaveDS, SaveSI : word;
      N : byte;
    Asm
      push ds
      lds si,Key
      cld
      xor ah,ah
      lodsb
      mov N,al
      mov bx,ax
      cmp bx,0
      je  @@5
      mov SaveDS,ds
      mov SaveSI,si
      lds si,Buffer
      les di,Buffer
      mov cx,Count
      jcxz @@5
    @@1:
      lodsb
      mov dl,al
      push ds
      push si
      mov ds,SaveDS
      mov si,SaveSI
      lodsb
      dec bx
      cmp bx,0
      jz  @@2
      lds si,Key
      lodsb
      mov bl,al
    @@2:
      add N,al
      or  ecCommand,ecExtract
      jz  @@3
      add dl,al
      sub dl,N
      not dl
      jmp @@4
    @@3:
      not dl
      add dl,N
      sub dl,al
    @@4:
      mov al,dl
      mov SaveDS,ds
      mov SaveSI,si
      pop si
      pop ds
      stosb
      loop @@1
    @@5:
      pop ds
    End; { Encrypt }

    End.

    { CRYPDEMO.PAS }

    Program CryptoDemo;
    {
    Copyright (c) 1994 by Andrew Eigus  Fidonet: 2:5100/33
    Demonstrates the use of unit CRYPTO.PAS
    }

    uses Crypto;

    var
      Str, Key : string;

    Begin
      Str := 'This is text to encrypt with Encrypt procedure'; { text to encrypt }
      Key := 'ExCaLiBeR'; { key string to use; longer -> safer ;I }
      WriteLn(#13#10'Original string: ''', Str, '''');
      Encrypt(Str[1], Length(Str), Key, ecEncode);
      WriteLn('Encrypted string: ''', Str, '''');
      Encrypt(Str[1], Length(Str), Key, ecExtract);
      WriteLn('Decrypted string: ''', Str, '''')
    End.

    {
    I hope that my CRYPTO unit might be useful for all of you. You may change my
    code as you want.
    }

[Back to DATATYPE SWAG index] [Back to Main SWAG index] [Original]