Package Cryptodome :: Package Cipher :: Module ARC2

Module ARC2

RC2 symmetric cipher

RC2 (Rivest's Cipher version 2) is a symmetric block cipher designed by Ron Rivest in 1987. The cipher started as a proprietary design, that was reverse engineered and anonymously posted on Usenet in 1996. For this reason, the algorithm was first called Alleged RC2 (ARC2), since the company that owned RC2 (RSA Data Inc.) did not confirm whether the details leaked into public domain were really correct.

The company eventually published its full specification in RFC2268.

RC2 has a fixed data block size of 8 bytes. Length of its keys can vary from 8 to 128 bits. One particular property of RC2 is that the actual cryptographic strength of the key (effective key length) can be reduced via a parameter.

Even though RC2 is not cryptographically broken, it has not been analyzed as thoroughly as AES, which is also faster than RC2.

Use AES, not ARC2. This module is only provided for legacy purposes.

As an example, encryption can be done as follows:

>>> from Cryptodome.Cipher import ARC2
>>>
>>> key = b'Sixteen byte key'
>>> cipher = ARC2.new(key, ARC2.MODE_CFB)
>>> msg = cipher.iv + cipher.encrypt(b'Attack at dawn')
Functions
 
new(key, mode, *args, **kwargs)
Create a new RC2 cipher
Variables
  MODE_ECB = 1
Electronic Code Book (ECB). See Cryptodome.Cipher._mode_ecb.EcbMode.
  MODE_CBC = 2
Cipher-Block Chaining (CBC). See Cryptodome.Cipher._mode_cbc.CbcMode.
  MODE_CFB = 3
Cipher FeedBack (CFB). See Cryptodome.Cipher._mode_cfb.CfbMode.
  MODE_OFB = 5
Output FeedBack (OFB). See Cryptodome.Cipher._mode_ofb.OfbMode.
  MODE_CTR = 6
CounTer Mode (CTR). See Cryptodome.Cipher._mode_ctr.CtrMode.
  MODE_OPENPGP = 7
OpenPGP Mode. See Cryptodome.Cipher._mode_openpgp.OpenPgpMode.
  MODE_EAX = 9
EAX Mode. See Cryptodome.Cipher._mode_eax.EaxMode.
  block_size = 8
Size of a data block (in bytes)
  key_size = xrange(5, 129)
Size of a key (in bytes)
Function Details

new(key, mode, *args, **kwargs)

 

Create a new RC2 cipher

Parameters:
  • key (byte string) - The secret key to use in the symmetric cipher. Its length can vary from 5 to 128 bytes.
  • mode (a MODE_* constant) - The chaining mode to use for encryption or decryption.
  • iv (byte string) - (Only MODE_CBC, MODE_CFB, MODE_OFB, MODE_OPENPGP).

    The initialization vector to use for encryption or decryption.

    For MODE_OPENPGP, IV must be 8 bytes long for encryption and 10 bytes for decryption (in the latter case, it is actually the encrypted IV which was prefixed to the ciphertext).

    For all other modes, it must be 8 bytes long.

    If not provided, a random byte string will be generated (you must read it back via the iv attribute of the cipher).

  • nonce (byte string) - (Only MODE_EAX and MODE_CTR). A value that must never be reused for any other encryption done with this key.

    For MODE_CTR, its length must be in the range [0..7].

    For MODE_EAX, there are no restrictions, but it is recommended to use at least 16 bytes.

    If not provided for MODE_EAX, a random byte string will be generated (you must read it back via the nonce attribute of the cipher).

  • mac_len (integer) - (Only MODE_EAX). Length of the authentication tag, in bytes. It must be no larger than 8 (which is the default).
  • segment_size (integer) - (Only MODE_CFB). The number of bits the plaintext and ciphertext are segmented in. It must be a multiple of 8. If not specified, it will be assumed to be 8.
  • initial_value (integer) - (Only MODE_CTR). The initial value for the counter within the counter block. By default it is 0.
  • effective_keylen (integer) - Maximum cryptographic strength of the key, in bits. It can vary from 40 to 1024. The default value is 1024.
Returns:

an RC2 cipher object, of the applicable mode: