DM4BAC

by

DECLARE SUB SecureEncryptAndWrite (Game$, zkey#, pB#, Pw#, Who%)
DECLARE SUB SecureReadAndDecrypt (Game$, zkey#, pB#, Pw#, Who%)
DECLARE FUNCTION Q% (n%)
DECLARE FUNCTION ksgDecrypt$ (k#, Encrypted$)
DECLARE FUNCTION ksgEncrypt$ (k#, Clear$)
CLS
PRINT "DM4BAC-InputOutput"
PRINT "---------------"
PRINT "This consists of 1) a driver which can be used to debug"
PRINT "the IO routines and 2) attendent simulated logic routines"
1 :
PRINT ""
DEFSTR A-Z ' Debugging
DIM MyErr AS INTEGER: ' Debugging
CONST debugW = "Fuzzy"
CONST debugB = "Wuzzy"

'=============================================
DIM SHARED Board(8, 8) AS INTEGER' column, row
DIM SHARED WBoard(8, 8) AS INTEGER' column, row
DIM SHARED BBoard(8, 8) AS INTEGER' column, row
DIM SHARED pwW AS STRING * 15, pwB AS STRING * 15
'=============================================
DIM i AS INTEGER, j AS INTEGER, c AS INTEGER
MyErr = 0: ON ERROR GOTO GetMyErr
OPEN "DM4BAC.ksg" FOR INPUT AS #1: CLOSE
ON ERROR GOTO 0
IF MyErr = 0 THEN GOTO Test2

Test1:
LSET pwW = debugW: RSET pwB = debugB
FOR i = 1 TO 8: FOR j = 1 TO 8
  c% = c% + 3: 'just test numbers - garbage
  Board(i, j) = Q(c): WBoard(i, j) = Q(c + 1): BBoard(i, j) = Q(c + 2)
NEXT j: NEXT i
CALL SecureEncryptAndWrite("DM4BAC", 123, 456, 789, 3)
RUN 1

Test2:
CALL SecureReadAndDecrypt("DM4BAC", 123, pB#, Pw#, Who%)
IF pB# <> 456 THEN STOP: 'bug
IF Pw# <> 789 THEN STOP: 'bug
IF Who% <> 3 THEN STOP: 'bug
FOR i = 1 TO 8: FOR j = 1 TO 8
  c% = c% + 3: 'just test numbers - garbage
  IF Board(i, j) <> Q(c) THEN STOP: 'bug
  IF WBoard(i, j) <> Q(c + 1) THEN STOP: 'bug
  IF BBoard(i, j) <> Q(c + 2) THEN STOP: 'bug
NEXT j: NEXT i
Test$ = pwW: LSET Test$ = debugW: IF Test$ <> pwW THEN STOP: 'bug
Test$ = pwB: RSET Test$ = debugB: IF Test$ <> pwB THEN STOP: 'bug
LINE INPUT "Success! Press Enter to exit: "; x$
IF x$ <> "" THEN STOP
KILL "DM4BAC.ksg"
SYSTEM

GetMyErr:
MyErr = ERR
RESUME NEXT

FUNCTION ksgDecrypt$ (k#, Encrypted$)
DIM ktest AS STRING * 10
LSET ktest = STR$(k#)
IF LEFT$(Encrypted$, 10) <> ktest THEN STOP: 'bug
ksgDecrypt$ = RIGHT$(Encrypted$, LEN(Encrypted$) - 10)
END FUNCTION

FUNCTION ksgEncrypt$ (k#, Clear$)
DIM ktest AS STRING * 10
LSET ktest = STR$(k#)
ksgEncrypt$ = ktest + Clear$
END FUNCTION

FUNCTION Q% (n%)
y% = RND(-119 * n%)
'Ensure there are plenty of zeros to test packing
IF RND < .8 THEN Q% = 0: EXIT FUNCTION
'Otherwise, just put some pieces in range
IF RND < .5 THEN
  Q% = -1 - INT(8 * RND)
ELSE
  Q% = 1 + INT(8 * RND)
END IF
END FUNCTION

SUB SecureEncryptAndWrite (Game$, zkey#, pB#, Pw#, Who%)
DIM m AS STRING
m = LTRIM$(STR$(pB#)) + "|"
m = m + LTRIM$(STR$(Pw#)) + "|"
m = m + LTRIM$(STR$(Who%)) + "|"
DIM i AS INTEGER, j AS INTEGER
FOR i = 1 TO 8: FOR j = 1 TO 8
    m = m + STR$(Board(i, j))
    m = m + STR$(WBoard(i, j))
    m = m + STR$(BBoard(i, j))
NEXT j: NEXT i
m = m + pwW + pwB
w$ = ksgEncrypt(zkey#, m)
DIM ff AS INTEGER: ff = FREEFILE
OPEN Game$ + ".ksg" FOR OUTPUT AS #ff
PRINT #ff, w$
CLOSE #ff
END SUB

SUB SecureReadAndDecrypt (Game$, zkey#, pB#, Pw#, Who%)
DIM ff AS INTEGER: ff = FREEFILE
OPEN Game$ + ".ksg" FOR INPUT AS #ff
LINE INPUT #ff, l$
CLOSE #ff
DIM m AS STRING, y AS INTEGER
m = ksgDecrypt(zkey#, l$)
y = INSTR(m, "|"): pB# = VAL(LEFT$(m, y - 1)): m = RIGHT$(m, LEN(m) - y)
y = INSTR(m, "|"): Pw# = VAL(LEFT$(m, y - 1)): m = RIGHT$(m, LEN(m) - y)
y = INSTR(m, "|"): Who% = VAL(LEFT$(m, y - 1)): m = RIGHT$(m, LEN(m) - y)
DIM i AS INTEGER, j AS INTEGER
y = 1
FOR i = 1 TO 8: FOR j = 1 TO 8
    Board(i, j) = VAL(MID$(m, y, 2))
    WBoard(i, j) = VAL(MID$(m, y + 2, 2))
    BBoard(i, j) = VAL(MID$(m, y + 4, 2))
    y = y + 6
NEXT j: NEXT i
pwW = MID$(m, LEN(m$) - 29, 15): pwB = RIGHT$(m, 15)
END SUB



    
This message has been edited by iorr5t from IP address 68.98.164.60 on Apr 6, 2006 8:04 AM

Posted on Feb 5, 2006, 1:23 PM
from IP address 68.98.164.60

Respond to this message   

Return to Index


Response TitleAuthor and Date
Upgraded on May 22