RFC 2994 (rfc2994) - Page 2 of 10


A Description of the MISTY1 Encryption Algorithm



Alternative Format: Original Text Document



RFC 2994                         MISTY1                    November 2000


   part takes a 64-bit input data and mixes it, namely encryption.  If
   data randomizing part is processed in reverse order, mixed data is
   transformed to input data, namely decryption.

2.1 Terminology

   Some operators are used in this document to describe the algorithm.
   The operator `+' indicates two's complement addition.  The operator
   `*' indicates multiplication.  The operator `/' yields the quotient,
   and the operator `%' yields the remainder from the division.  The
   operator `&' indicates bitwise AND operation.  The operator `|'
   indicates bitwise inclusive OR operation.  The operator `^' indicates
   bitwise exclusive OR operation.  The operator `>' indicates bitwise right
   shift operation.

2.2 Key Scheduling Part

   Key scheduling part consists of the following operations.

   for i = 0, ..., 7 do
       EK[i] = K[i*2]*256 + K[i*2+1];
   for i = 0, ..., 7 do
   begin
       EK[i+ 8] = FI(EK[i], EK[(i+1)%8]);
       EK[i+16] = EK[i+8] & 0x1ff;
       EK[i+24] = EK[i+8] >> 9;
   end

   K is an input key, and each element of K, namely K[i], holds an 8-bit
   of the key, respectively.  EK denotes an expanded key, and each
   element of EK, namely EK[i], holds a 16-bit of the expanded key.
   Input data of K[0], ..., K[15] are copied to EK[0], ..., EK[7].
   Expanded key is produced from EK[0], ..., EK[7] by using function FI,
   and stored in EK[8], ..., EK[15].  Function FI is described in the
   following section.

2.3 Data Randomizing Part

   Data randomizing part uses two kinds of function, which are called
   function FO and function FL.  Function FO calls another function,
   namely FI.  The key expansion part also uses function FI.  Function
   FI uses two S-boxes, namely S7, S9.  Each function is described as
   follows.

   Function FO takes two parameters.  One is a 32-bit width input data,
   namely FO_IN.  The other is an index of EK, namely k.  And FO returns
   a 32-bit width data, namely FO_OUT.



Ohta & Matsui                Informational