hp41programs

Cryptography

Cryptography for the HP-41


Overview
 

 1°)  Coding & Decoding
 2°)  Storing Alpha Strings
 3°)  Passwords
 

-"CYPHER" allows to code and decode a text that has been stored into data registers by groups of 1 to 6 characters.
-The key is simply a random seed. The same one is used for coding and decoding.
-X-Functions module is required.
-A routine is also listed to store alpha strings into contiguous registers.

-"PASS" is a short program to create a password of a given length.
 

1°)  Coding & Decoding
 

Data Registers:            R00 to R03: temp                        ( Registers Rbb thru Ree are to be initialized before executing "CYPHER" )

                                   •  Rbb  •  Rbb+1  ...............  •  Ree = the message     bbb > 003     ( R03 = bbb.eee )

     >>> When the program stops, the coded message has replaced the original  ( or vice versa )

Flag:   CF 01 to code a message
            SF 01 to decode a message

Subroutines: /
 
 

01  LBL "CYPHER"
02  STO 00
03  X<>Y
04  STO 01
05  STO 03
06  255
07  STO 02
08  LBL 01
09  CLA
10  ARCL IND 01 
11  ALENG
12  LBL 02
13  ATOX
14  RCL 00
15  R-D
16  FRC
17  STO 00
18  RCL 02            
19  *
20  INT
21  FS? 01
22  CHS
23  +
24  RCL 02
25  MOD
26  X=0?
27  X<> L
28  XTOA
29  X<>Y
30  DSE X
31  GTO 02
32  ASTO IND 01 
33  ISG 01
34  GTO 01
35  RCL 03            
36  CLA
37  END

 
   ( 61 bytes )
 
 

      STACK        INPUTS     OUTPUTS
           Y        bbb.eee            /
           X             r        bbb.eee

  where  bbb.eee  is the comtrol number of the message registers  ( bbb > 003 )
    and         r        is the key

Example:

-You have stored

          "MYNAME"     in register   R11
           "ISBOND"       in register   R12
           "JAMES "         in register   R13
           "BOND"           in register   R14

-If your key is  r = 1  ( a more sophisticated key is recommended... )

   CF 01   11.014   ENTER^
                     1      XEQ "CYPHER"  >>>>  11.014                 --- Execution time = 17s ---

-The coded message is now in registers R11 thru R14 ( many of the characters are displayed as starbursts )

-To decode this message:

   SF 01   11.014   ENTER^
                    1           R/S      >>>>   11.014    and the original alpha strings are in R11 to R14 again.
 

Notes:

-For a 600 character message ( stored in 100 registers ), execution time = 7mn40s.
-We must avoid the null character since it disappears when shifted into the leftmost position.
-Otherwise, all the characters with an ASCII code from 1 to 255 are allowed.
-"CYPHER" uses the random number generator  R-D  FRC , so choose r so that  180*r/PI is not an integer.
-Using this program several times with several keys could produce an almost unbreakable encryption.
 

2°) Storing Alpha Strings
 

-Line 22 is one space.
-Lile 24 is  append  ?
 
 

01  LBL "AIN"    
02  ENTER^
03  AON
04  1
05  ST- Y
06  GTO 02
07  LBL 01
08  ISG Z
09  CLX
10  ASTO IND Z
11  ASHF
12  CLX
13  ALENG
14  X#0?
15  GTO 01
16  SIGN
17  +
18  LBL 02
19  RCLFLAG 
20  FIX 0
21  CF 29
22  " "
23  ARCL Y
24  "~?"
25  STOFLAG   
26  STOP
27  FS?C 23
28  GTO 01
29  AOFF
30  RDN
31  CLX
32   E3
33  /
34  +
35  CLA 
36  END            

 
   ( 61 bytes )
 
 

      STACK        INPUT      OUTPUT
           X           bbb       bbb.eee

 
Example:   You want to store the confidential message:   "THE GARDEN PEAS ARE SIMMERING IN THE SAUCEPAN"   into registers R00 , R01 , .....

               0  XEQ "AIN"                           the HP-41 displays  1?   ( the alpha keyboard is activated - line 03 )  key in:
 "THE GARDEN PEAS ARE SIMM"      you hear a TONE since there are now 24 characters in the alpha "register".
                  press  R/S                               the HP-41 displays  2?   key in:
 "ERING IN THE SAUCEPAN"
                  press R/S                                the HP-41 displays  3?
       simply press R/S without any entry     the HP-41  returns the control number  0.007

-Your message has been stored into registers R00 thru R07
 

3°)  Passwords
 

 "PASS" takes an integer N in X-register and displays a password of N characters

-If F00 is clear, all characters between 0 and Z plus a b c d e  may be used
-If F00 is set, only numbers between 0 and 9 and letters between A and Z are used
 

Data Register:   R00 = N , N-1 , N-2 , ....... , 1 , 0
Flag:  F00
Subroutine:  RAND  ( M-Code routine listed in "Random Number Generators for the HP-41" )
 
 
 

 01 LBL "PASS"
 02 " "
 03 STO 00
 04 LBL 01
 05 RAND
 06 FC? 00
 07 47
 08 FS? 00        
 09 36
 10 *
 11 INT
 12 48
 13 +
 14 FC? 00       
 15 91
 16 FS? 00
 17 58
 18 X>Y?
 19 GTO 00      
 20 CLX
 21 7
 22 FC? 00
 23 DSE X
 24 +
 25 ENTER
 26 LBL 00        
 27 RDN
 28 XTOA
 29 DSE 00
 30 GTO 01
 31 AVIEW
 32 END

 
    ( 58 bytes / SIZE 001 )
 
 

      STACK        INPUT      OUTPUT
           X             N             /

     Where N = Number of characters

Note:

-The M-Code routine RAND may be replaced by another RNG.
-For example, replace

    line 29 by  DSE 01
    line 05 by  RCL 00  R-D  FRC  STO 00
    line 03 by  STO 01

 and initialize R00 before executing "PASS"