I've have this so far, but it's not right yet.

Gives same incorrect answer with different seeds.

Any obvious gaffes?

PIC18F2680

Code:

'Long Variables for signed Key Calculation
int VAR LONG
key VAR LONG
seed VAR LONG
top_j VAR LONG
top_k VAR LONG
top_l VAR LONG
F3_i VAR LONG
F3_j VAR LONG
F3_k VAR LONG
F3_m VAR LONG
F3_n VAR LONG
F3_i1 VAR LONG
F2_i VAR LONG
F2_j VAR LONG
F2_k VAR LONG
F2_m VAR LONG
F2_n VAR LONG
F2_i1 VAR LONG
'*******************************************************************************
Start:
Seed.Byte0 = $6B
Seed.Byte1 = $E3
Seed.byte2 = $C5
'Answer should be $82 $CB $6B
lcdout hex2 Seed.byte2," $",hex2 Seed.byte1," $",hex2 seed.byte0
gosub CalcKey
lcdout hex2 key.byte2," $",hex2 key.byte1," $",hex2 key.byte0
'Try Again
Seed.Byte0 = $6B
Seed.Byte1 = $71
Seed.byte2 = $79
'Answer should be $04 $35 $6B
lcdout hex2 Seed.byte2," $",hex2 Seed.byte1," $",hex2 seed.byte0
gosub CalcKey
lcdout hex2 key.byte2," $",hex2 key.byte1," $",hex2 key.byte0
Stop
'*******************************************************************************
CalcKey:
top_j = seed >> $10
top_j = top_j & $ff
top_k = seed >> 8
top_k = top_k & $ff
top_l = seed & $ff
F3_i = top_j << 8
F3_i = F3_i | top_k
SELECT CASE top_l
case 1
F3_j = 20483;
F3_k = 37495;
F3_m = 19380;
F3_n = 2;
F3_i1 = -1;
case 2
F3_j = 48737;
F3_k = 29064;
F3_m = 0;
F3_n = -2;
F3_i1 = 1;
case 3
F3_j = 38851;
F3_k = 17007;
F3_m = 57213;
F3_n = 2;
F3_i1 = -1;
case 4
F3_j = 38191;
F3_k = 42963;
F3_m = 45416;
F3_n = -3;
F3_i1 = 1;
case 5
F3_j = 31893;
F3_k = 60216;
F3_m = 0;
F3_n = 1;
F3_i1 = -2;
case 6
F3_j = 26458;
F3_k = 15181;
F3_m = 11362;
F3_n = -3;
F3_i1 = 1;
case 7
F3_j = 10773;
F3_k = 36766;
F3_m = 28592;
F3_n = 2;
F3_i1 = -1;
case 8
F3_j = 13376;
F3_k = 4967;
F3_m = 62941;
F3_n = 2;
F3_i1 = -3;
case 9
F3_j = 2197;
F3_k = 24862;
F3_m = 65475;
F3_n = -2;
F3_i1 = 3;
case 10
F3_j = 31199;
F3_k = 59852;
F3_m = 0;
F3_n = 1;
F3_i1 = -3;
case 11
F3_j = 45383;
F3_k = 9690;
F3_m = 0;
F3_n = 3;
F3_i1 = -2;
case 12
F3_j = 34146;
F3_k = 59163;
F3_m = 0;
F3_n = -1;
F3_i1 = 2;
case 13
F3_j = 62765;
F3_k = 33340;
F3_m = 5749;
F3_n = 3;
F3_i1 = -1;
case 14
F3_j = 45458;
F3_k = 44092;
F3_m = 0;
F3_n = -1;
F3_i1 = 3;
case 15
F3_j = 37357;
F3_k = 39321;
F3_m = 0;
F3_n = -2;
F3_i1 = 1;
case 16
F3_j = 8713;
F3_k = 454;
F3_m = 23575;
F3_n = 1;
F3_i1 = -2;
case 17
F3_j = 9988;
F3_k = 56677;
F3_m = 29637;
F3_n = -3;
F3_i1 = 1;
case 18
F3_j = 57758;
F3_k = 34088;
F3_m = 11152;
F3_n = 1;
F3_i1 = -3;
case 19
F3_j = 33800;
F3_k = 14769;
F3_m = 0;
F3_n = -2;
F3_i1 = 1;
case 20
F3_j = 4069;
F3_k = 4013;
F3_m = 24616;
F3_n = -1;
F3_i1 = 2;
case 21
F3_j = 17056;
F3_k = 12969;
F3_m = 11927;
F3_n = 3;
F3_i1 = -1;
case 22
F3_j = 31370;
F3_k = 60592;
F3_m = 0;
F3_n = -1;
F3_i1 = 3;
case 23
F3_j = 24184;
F3_k = 58486;
F3_m = 0;
F3_n = -1;
F3_i1 = 3;
case 24
F3_j = 56838;
F3_k = 5012;
F3_m = 35563;
F3_n = 2;
F3_i1 = -3;
case 25
F3_j = 49473;
F3_k = 5452;
F3_m = 33161;
F3_n = 3;
F3_i1 = -2;
case 26
F3_j = 64459;
F3_k = 44104;
F3_m = 0;
F3_n = 2;
F3_i1 = -1;
case 27
F3_j = 6123;
F3_k = 30247;
F3_m = 0;
F3_n = -1;
F3_i1 = 3;
case 28
F3_j = 62885;
F3_k = 57915;
F3_m = 28211;
F3_n = -2;
F3_i1 = 3;
case 29
F3_j = 56790;
F3_k = 34537;
F3_m = 0;
F3_n = -3;
F3_i1 = 1;
case 30
F3_j = 34655;
F3_k = 4726;
F3_m = 0;
F3_n = 3;
F3_i1 = -1;
case 31
F3_j = 45667;
F3_k = 2227;
F3_m = 0;
F3_n = -3;
F3_i1 = 1;
case 32
F3_j = 64118;
F3_k = 22124;
F3_m = 0;
F3_n = 1;
F3_i1 = -3;
case 33
F3_j = 20483;
F3_k = 37495;
F3_m = 19380;
F3_n = 2;
F3_i1 = -1;
case 34
F3_j = 18934;
F3_k = 33007;
F3_m = 45671;
F3_n = -1;
F3_i1 = 2;
case 35
F3_j = 53898;
F3_k = 43937;
F3_m = 8992;
F3_n = 3;
F3_i1 = -2;
case 36
F3_j = 26472;
F3_k = 30849;
F3_m = 15462;
F3_n = -2;
F3_i1 = 3;
case 37
F3_j = 18864;
F3_k = 16973;
F3_m = 0;
F3_n = -2;
F3_i1 = 2;
case 38
F3_j = 10153;
F3_k = 24758;
F3_m = 0;
F3_n = -2;
F3_i1 = 2;
case 39
F3_j = 28031;
F3_k = 31768;
F3_m = 65233;
F3_n = 3;
F3_i1 = -1;
case 40
F3_j = 9577;
F3_k = 32816;
F3_m = 0;
F3_n = -3;
F3_i1 = 3;
case 41
F3_j = 33294;
F3_k = 41833;
F3_m = 63823;
F3_n = 2;
F3_i1 = -2;
case 42
F3_j = 46258;
F3_k = 33763;
F3_m = 47869;
F3_n = 2;
F3_i1 = -2;
case 43
F3_j = 303;
F3_k = 15452;
F3_m = 49261;
F3_n = -3;
F3_i1 = 1;
case 44
F3_j = 14480;
F3_k = 52729;
F3_m = 0;
F3_n = 2;
F3_i1 = -2;
case 45
F3_j = 26181;
F3_k = 30558;
F3_m = 11669;
F3_n = -1;
F3_i1 = 1;
case 46
F3_j = 57729;
F3_k = 31412;
F3_m = 0;
F3_n = 3;
F3_i1 = -3;
case 47
F3_j = 38273;
F3_k = 42785;
F3_m = 57170;
F3_n = 2;
F3_i1 = -3;
case 48
F3_j = 65304;
F3_k = 24702;
F3_m = 12077;
F3_n = 2;
F3_i1 = -1;
case 49
F3_j = 25997;
F3_k = 16247;
F3_m = 11573;
F3_n = -2;
F3_i1 = 3;
case 50
F3_j = 47122;
F3_k = 17812;
F3_m = 0;
F3_n = 3;
F3_i1 = -1;
case 51
F3_j = 62790;
F3_k = 184;
F3_m = 43056;
F3_n = -2;
F3_i1 = 1;
case 52
F3_j = 27811;
F3_k = 36172;
F3_m = 10312;
F3_n = -1;
F3_i1 = 2;
case 53
F3_j = 33495;
F3_k = 4706;
F3_m = 23772;
F3_n = 1;
F3_i1 = -3;
case 54
F3_j = 11806;
F3_k = 6016;
F3_m = 0;
F3_n = 2;
F3_i1 = -1;
case 55
F3_j = 23022;
F3_k = 61027;
F3_m = 0;
F3_n = 1;
F3_i1 = -3;
case 56
F3_j = 14502;
F3_k = 52925;
F3_m = 45502;
F3_n = -3;
F3_i1 = 2;
case 57
F3_j = 19654;
F3_k = 47349;
F3_m = 29195;
F3_n = 3;
F3_i1 = -2;
case 58
F3_j = 4043;
F3_k = 49055;
F3_m = 0;
F3_n = 1;
F3_i1 = -2;
case 59
F3_j = 238;
F3_k = 61025;
F3_m = 46052;
F3_n = -2;
F3_i1 = 3;
case 60
F3_j = 26525;
F3_k = 16314;
F3_m = 0;
F3_n = 2;
F3_i1 = -1;
case 61
F3_j = 27577;
F3_k = 18161;
F3_m = 3841;
F3_n = -3;
F3_i1 = 1;
case 62
F3_j = 11820;
F3_k = 48834;
F3_m = 24936;
F3_n = -3;
F3_i1 = 2;
case 63
F3_j = 926;
F3_k = 34536;
F3_m = 62639;
F3_n = -1;
F3_i1 = 1;
case 64
F3_j = 34242;
F3_k = 21476;
F3_m = 0;
F3_n = 2;
F3_i1 = -3;
case 97
F3_j = 11937;
F3_k = 0;
F3_m = 54278;
F3_n = 3;
F3_i1 = -1;
case 98
F3_j = 11129;
F3_k = 0;
F3_m = 41060;
F3_n = 1;
F3_i1 = -3;
case 99
F3_j = 16232;
F3_k = 0;
F3_m = 37025;
F3_n = 3;
F3_i1 = -2;
case 100
F3_j = 62287;
F3_k = 21359;
F3_m = 0;
F3_n = -1;
F3_i1 = 1;
case 101
F3_j = 19345;
F3_k = 63583;
F3_m = 20313;
F3_n = -2;
F3_i1 = 2;
case 102
F3_j = 50636;
F3_k = 34432;
F3_m = 58878;
F3_n = -2;
F3_i1 = 2;
case 103
F3_j = 8636;
F3_k = 42038;
F3_m = 0;
F3_n = 3;
F3_i1 = -1;
case 104
F3_j = 49296;
F3_k = 0;
F3_m = 23727;
F3_n = -2;
F3_i1 = 2;
case 105
F3_j = 62603;
F3_k = 0;
F3_m = 7632;
F3_n = 2;
F3_i1 = -1;
case 106
F3_j = 54947;
F3_k = 13952;
F3_m = 0;
F3_n = -3;
F3_i1 = 2;
case 107
F3_j = 46336;
F3_k = 0;
F3_m = 32973;
F3_n = -1;
F3_i1 = 3;
case 108
F3_j = 31276;
F3_k = 0;
F3_m = 41988;
F3_n = -2;
F3_i1 = 2;
case 109
F3_j = 24959;
F3_k = 31354;
F3_m = 55064;
F3_n = 1;
F3_i1 = -1;
case 110
F3_j = 39963;
F3_k = 29660;
F3_m = 0;
F3_n = 2;
F3_i1 = -3;
case 111
F3_j = 16360;
F3_k = 6010;
F3_m = 0;
F3_n = 1;
F3_i1 = -2;
case 112
F3_j = 50050;
F3_k = 36355;
F3_m = 34628;
F3_n = 3;
F3_i1 = -3;
end select
F2_i = F3_i + F3_j
F2_i = F2_i & $FFFF
IF (F3_n > 0) then
F2_j = $FFFF & (F3_i << F3_n | F3_i >> 16 - F3_n)
ELSE
F2_j = $FFFF & (F3_i >> -F3_n | F3_i << 16 + F3_n)
endif
F2_k = F3_i + F3_k
F2_k = F2_k & $FFFF
IF (F3_i1 > 0) then
F2_m = $FFFF & (F2_k << F3_i1 | F2_k >> 16 - F3_i1);
ELSE
F2_m = $FFFF & (F2_k >> -F3_i1 | F2_k << 16 + F3_i1);
endif
F2_n = F2_j * F2_m
F2_i1 = F2_n + F3_m
key = F2_i1 & $FFFF
key = key << 8
key = key + top_l
return

## Bookmarks