1
# -*- coding: utf-8 -*-
5
# ===================================================================
6
# The contents of this file are dedicated to the public domain. To
7
# the extent that dedication to the public domain is not available,
8
# everyone is granted a worldwide, perpetual, royalty-free,
9
# non-exclusive license to exercise all rights associated with the
10
# contents of this file for any purpose whatsoever.
11
# No rights are reserved.
13
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
15
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
16
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
17
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
18
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
# ===================================================================
24
XOR is one the simplest stream ciphers. Encryption and decryption are
25
performed by XOR-ing data with a keystream made by contatenating
28
Do not use it for real applications!
30
:undocumented: __revision__, __package__
35
from Crypto.Cipher import _XOR
38
"""XOR cipher object"""
40
def __init__(self, key, *args, **kwargs):
41
"""Initialize a XOR cipher object
43
See also `new()` at the module level."""
44
self._cipher = _XOR.new(key, *args, **kwargs)
45
self.block_size = self._cipher.block_size
46
self.key_size = self._cipher.key_size
48
def encrypt(self, plaintext):
49
"""Encrypt a piece of data.
52
plaintext : byte string
53
The piece of data to encrypt. It can be of any size.
54
:Return: the encrypted data (byte string, as long as the
57
return self._cipher.encrypt(plaintext)
59
def decrypt(self, ciphertext):
60
"""Decrypt a piece of data.
63
ciphertext : byte string
64
The piece of data to decrypt. It can be of any size.
65
:Return: the decrypted data (byte string, as long as the
68
return self._cipher.decrypt(ciphertext)
70
def new(key, *args, **kwargs):
71
"""Create a new XOR cipher
75
The secret key to use in the symmetric cipher.
76
Its length may vary from 1 to 32 bytes.
78
:Return: an `XORCipher` object
80
return XORCipher(key, *args, **kwargs)
82
#: Size of a data block (in bytes)
84
#: Size of a key (in bytes)
85
key_size = xrange(1,32+1)