Content-type: text/html Manpage of TclDES

TclDES

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

NAME

TclDES - Tcl-based Data Encryption Standard library  

SYNOPSIS

package require tclDES ?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

TclDES is a pure-Tcl implementation of the NIST Data Encryption Standard (DES). The package can perform encryption and decryption using either the standard DES algorithm or the triple-DES (3DES) 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. TclDES is licensed under the same Open Source license as Tcl (BSD). Details can be found in the TclDES source code.

The TclDES 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 or 48 subkeys used by the DES and 3DES algorithms, respectively. The input key must be a binary string of 8 bytes in length if 16 subkeys are to be created. The binary string must be 24 bytes in length if 48 subkeys are to be created. The output is a list of subkeys either 16 or 24 elements in length. An error is generated if any of the keys submitted are one of four DES weak keys. 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 or a 192-bit 3DES 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 or the 192-bit (24 bytes) 3DES 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::block command executes the DES/3DES 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. Depending upon the nature of the key set, either the standard DES or the 3DES algorithm will be executed. 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::stream command executes the DES/3DES 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. Depending upon the nature of the key set, either the standard DES or the 3DES algorithm will be executed. 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 (the default) 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 the name of a variable containing an 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. 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 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/3DES, 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 length 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, 3DES, Tcl, package
 

Index

NAME
SYNOPSIS
DESCRIPTION
COMMANDS
AUTHOR
SEE ALSO
KEYWORDS

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