Content-type: text/html Manpage of TclDESjr

TclDESjr

Section: Tcl DES Library (n)
Updated: OCTOBER 2004
Index Return to Main Contents
 

NAME

TclDESjr - Tcl-based Data Encryption Standard library  

SYNOPSIS

package require tclDESjr ?0.8?

::des::createKeys key

::des::keyset oper value

::des::block keyset message encrypt [mode [iv]]

::des::stream keyset message encrypt mode iv [kbits]]

::des::encrypt keyset plaintext [mode [iv [kbits]]]

::des::decrypt keyset ciphertext [mode [iv [kbits]]]




 

DESCRIPTION

TclDESjr is a pure-Tcl implementation of the NIST Data Encryption Standard (DES). The package can perform encryption and decryption using the standard DES algorithm. All four DES modes are supported: Electronic Code Block (ECB), Cipher Block Chaining (CBC), Cipher Feedback (CFB), and Output Feedback (OFB).

This source code is being made publicly available and has been registered with the U.S. Dept. of Commerce Bureau of Industry and Security under export license exception TSU (Technology and Software Unrestricted) for export out of the United States. TclDESjr is licensed under the same Open Source license as Tcl (BSD). Details can be found in the TclDESjr source code.

The TclDESjr commands are contained within the namespace ::des so that working variables shared between the commands are isolated from the global namespace.  

COMMANDS

::des::createKeys key
The ::des::createKeys command generates the 16 subkeys used by the DES algorithm. The input key must be a binary string of 8 bytes in length. An error is generated if the key submitted if one of four DES weak keys. The output is a list of subkeys 16 elements in length. This command is used internally by the ::des::keyset command.
::des::keyset oper value
The ::des::keyset command creates or destroys a keyset created from a 64-bit DES key. The input oper is the operation to be performed. This will be either "create" (make a new keyset) or "destroy" (delete an existing keyset). An error is generated if oper is not "create" or "destroy". The meaning of the argument value depends of the operation performed. If the argument oper is "create", then value is the 64-bit (8 bytes) DES key. (Note: The lsb of each byte is ignored; odd parity is not required). The ::des::createKeys command is called to generate the keyset. If the argument oper is "destroy", then value is a handle to a keyset that was created previously. If the argument oper is "create", then the output is a handle to the keyset stored in the des namespace. If the argument oper is "destroy", then nothing is returned.
::des::block keyset message encrypt [mode [iv]]
The ::des::des command executes the DES algorithm for the block mode algorithms ECB and CBC. The input keyset must be a valid handle to a DES key set created through the ::des::keyset procedure. Message is a binary string that will either be encrypted or decrypted depending on the value of the encrypt flag. If encryption is being performed, the length of message is extended to an integral multiple of eight bytes. If decryption is being performed, the length of message must be an integral multiple of eight bytes. Encryption occurs if the encrypt flag in 1 (the default) and decryption occurs if the flag is 0. The mode flag determines the DES operation mode. The modes available are: 0 - Electronic Code Block (ECB, the default), 1 - Cipher Block Chaining (CBC). If the mode selected is CBC, the name of a variable, iv, containing a binary initialization vector string must be supplied. The binary string must be 8 bytes in length. The output is a binary string of the encrypted or decrypted form of message. The length of the output string is always an integral multiple of eight. The variable, iv, contains the feed-forward cipher block for the last cycle of the algorithm.
::des::stream keyset message encrypt mode iv [kbits]
The ::des::des command executes the DES algorithm for the stream mode algorithms CFB and OFB. The input keyset must be a valid handle to a DES key set created through the ::des::keyset procedure. Message is a binary string that will either be encrypted or decrypted depending on the value of the encrypt flag. Encryption occurs if the encrypt flag in 1 and decryption occurs if the flag is 0. The mode flag determines the DES operation mode. The modes available are: 0 - Output Feedback and 1 - Cipher Feedback. iv is initialization vector string used to initialize the algorithm. The binary string must be 8 bytes in length. The kbits parameter states the number of bits per data unit processed by the algorithm (the default is 64). The output is a binary string of the encrypted or decrypted form of message. The length of the output string will be equal to the length of the input string. The variable, iv, contains the feedback block for the last cycle of the algorithm. Note: A copy of the initial value of the initialization vector used for encryption must be retained in order to decrypt the message later. Subsequent calls with new message fragments should use the same initialization vector variable used in the first call.
::des::encrypt keyset plaintext [mode [iv [kbits]]]
The ::des::encrypt command is an encryption-only wrapper for the ::des::block and ::des::stream commands. The inputs keyset, iv, and kbits, are defined as described in the ::des::block and ::des::stream commands. The input plaintext is a binary string to be encrypted. If necessary, the length of plaintext is extended to an integral multiple of eight bytes. The value of mode can be ecb (the default), cbc, ofb, and cfb. The output is a binary string of the encrypted form of plaintext.
::des::decrypt keyset ciphertext [mode [iv [kbits]]]
The ::des::decrypt command is a decryption-only wrapper for the ::des::block and ::des::stream commands. The inputs keyset, iv, and kbits, are defined as described in the ::des::block and ::des::stream commands. The input ciphertext is a binary string to be decrypted. The length of ciphertext must be an integral multiple of eight bytes when ECB and CBC modes are used. The value of mode can be ecb (the default), cbc, ofb, and cfb. The output is a binary string of the decrypted form of ciphertext.

Stream Mode Message Size Restriction
Due to the nature of the OFB and CFB modes of DES, the message/cipher data is considered to be a stream of bits, not blocks of bytes. Since data is normally packed into 8-bit bytes, message fragments processed by ::des::stream must be an integral number of bytes. The value of kbits forces a message fragment to also satisfy the requirement that its length be an integral multiple of kbits in length. The table below lists the minimum size of a message for a given size of kbits:

kbits size message size kbits size message size
   1 bit       1 byte       33 bits    165 bytes
   2 bits      1 byte       34 bits    170 bytes
   3 bits      3 bytes      35 bits    175 bytes
   4 bits      1 byte       36 bits    180 bytes
   5 bits      5 bytes      37 bits    185 bytes
   6 bits      6 bytes      38 bits    190 bytes
   7 bits      7 bytes      39 bits    195 bytes
   8 bits      1 byte       40 bits      5 bytes
   9 bits     18 bytes      41 bits    246 bytes
  10 bits     20 bytes      42 bits    252 bytes
  11 bits     22 bytes      43 bits    258 bytes
  12 bits     24 bytes      44 bits    264 bytes
  13 bits     26 bytes      45 bits    270 bytes
  14 bits     28 bytes      46 bits    276 bytes
  15 bits     30 bytes      47 bits    282 bytes
  16 bits      2 bytes      48 bits      6 bytes
  17 bits     51 bytes      49 bits    343 bytes
  18 bits     54 bytes      50 bits    350 bytes
  19 bits     57 bytes      51 bits    357 bytes
  20 bits     60 bytes      52 bits    364 bytes
  21 bits     63 bytes      53 bits    371 bytes
  22 bits     66 bytes      54 bits    378 bytes
  23 bits     69 bytes      55 bits    385 bytes
  24 bits      3 bytes      56 bits      7 bytes
  25 bits    100 bytes      57 bits    456 bytes
  26 bits    104 bytes      58 bits    464 bytes
  27 bits    108 bytes      59 bits    472 bytes
  28 bits    112 bytes      60 bits    480 bytes
  29 bits    116 bytes      61 bits    488 bytes
  30 bits    120 bytes      62 bits    496 bytes
  31 bits    124 bytes      63 bits    504 bytes
  32 bits      4 bytes      64 bits      8 bytes

Note that the actual message length can be an integral multiple of the corresponding message lengths stated above.

 

AUTHOR

Mac A. Cody <maccody at comcast dot net>

 

SEE ALSO

binary(n)

 

KEYWORDS

DES, Tcl, package
 

Index

NAME
SYNOPSIS
DESCRIPTION
COMMANDS
AUTHOR
SEE ALSO
KEYWORDS

This document was created by man2html, using the manual pages.
Time: 03:03:55 GMT, October 26, 2004