summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--combox/combox.py (renamed from combox/file.py)116
-rw-r--r--combox/config.py82
-rw-r--r--combox/crypto.py84
-rw-r--r--tests/combox_tests.py (renamed from tests/test_config.py)14
-rw-r--r--tests/files/the-red-star.jpgbin87492 -> 0 bytes
-rw-r--r--tests/test_crypto.py52
-rw-r--r--tests/test_file.py47
7 files changed, 127 insertions, 268 deletions
diff --git a/combox/file.py b/combox/combox.py
index ec0372e..3f15dd5 100644
--- a/combox/file.py
+++ b/combox/combox.py
@@ -16,11 +16,123 @@
# along with Combox (see COPYING). If not, see
# <http://www.gnu.org/licenses/>.
+import base64
+import os
+import yaml
+import getpass
+import hashlib
+import sys
+import stat
+
+from Crypto.Cipher import AES
from os import path
from sys import exit
from glob import glob
+#### Start of combox config function
+
+def config_cb():
+ """
+ Configure combox, if not already configured.
+ """
+ # First whether combox is already configured.
+ config_dir = os.path.join(os.getenv('HOME'),'.combox/')
+ if not os.path.exists(config_dir):
+ # Create combox dir and configure.
+ os.mkdir(config_dir, 0700)
+ config_file_path = os.path.join(config_dir, 'config.yaml')
+ config_info = {}
+
+ config_info['combox_dir'] = raw_input('path to combox directory: ')
+ config_info['topsecret'] = hashlib.sha224(getpass.getpass('passphrase: ')).hexdigest()
+
+ no_nodes = int(raw_input('number of nodes: '))
+
+ nodes = {}
+ for i in range(no_nodes):
+ node_name = raw_input('node %d name: ' % i)
+ nodes[node_name] = {}
+ nodes[node_name]['path'] = raw_input('node %d path: ' % i)
+ nodes[node_name]['size'] = raw_input('node %d size (in mega bytes): ' % i)
+ nodes[node_name]['available'] = nodes[node_name]['size']
+
+ config_info['nodes_info'] = nodes
+ config_file = open(config_file_path, 'w')
+ yaml.dump(config_info, config_file, default_flow_style=False)
+ os.chmod(config_file_path,stat.S_IRUSR|stat.S_IWUSR)
+ else:
+ # should put something here later
+ pass
+
+#### End of combox config function
+
+
+
+
+#### Start of crypto functions.
+def pad(data):
+ """Pad data such that its length is a multiple of BLOCK_SIZE.
+ """
+
+ padding = (BLOCK_SIZE - (len(data) % BLOCK_SIZE)) * PAD_CHAR
+ data += padding
+
+ return data
+
+
+def encrypt(data, secret):
+ """Encrypt byestream and return cipher.
+ """
+ aes = AES.new(pad(secret))
+ cipher = base64.b64encode(aes.encrypt(pad(data)))
+
+ return cipher
+
+
+def decrypt(cipher, secret):
+ """Decrypt cipher and return data.
+ """
+ aes = AES.new(pad(secret))
+ data = aes.decrypt(base64.b64decode(cipher)).rstrip(PAD_CHAR)
+
+ return data
+
+def encrypt_shards(shards, secret):
+ """Encrypt the shards of data and return a list of ciphers.
+
+ shards: list of shards (string, bytes).
+ secret: top secret passphrase
+ """
+
+ ciphers = []
+ for shard in shards:
+ cipher = encrypt(shard, secret)
+ ciphers.append(cipher)
+
+ return ciphers
+
+
+def decrypt_shards(ciphers, secret):
+ """Decrypt the ciphered shards and return a list of shards.
+
+ shards: list of ciphered shards.
+ secret: top secret passphrase
+ """
+
+ shards = []
+ for cipher in ciphers:
+ shard = decrypt(cipher, secret)
+ shards.append(shard)
+
+ return shards
+
+#### End of crypto functions.
+
+
+
+#### Start of File related functions
+
def split_data(data, n):
"""Split data into `n' parts and return them as an array.
@@ -125,3 +237,7 @@ def read_shards(directory, shard_basename):
shards.append(shard_content)
return shards
+
+
+
+#### End of File related functions.
diff --git a/combox/config.py b/combox/config.py
deleted file mode 100644
index adaecf5..0000000
--- a/combox/config.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright (C) 2014 Combox author(s). See AUTHORS.
-#
-# This file is part of Combox.
-#
-# Combox is free software: you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Combox is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Combox (see COPYING). If not, see
-# <http://www.gnu.org/licenses/>.
-
-##################################################
-## YAML Config format
-##################################################
-##
-## combox_dir: path/to/combox/
-##
-## topsecret: dba0079f1cb3a3b56e102dd5e04fa2af
-##
-## nodes_info:
-## node_name:
-## path: path/to/shard1/dir/
-## size: 1000 # in MB
-## available: 500 # in MB
-## node name:
-## path: path/to/shard2/dir/
-## size: 2000
-## available: 1500
-## node name:
-## path: path/to/shard3/dir
-## size: 3000
-## available: 1500
-##
-##################################################
-
-import os
-import yaml
-import getpass
-import hashlib
-import sys
-import stat
-
-
-def config_cb():
- """
- Configure combox, if not already configured.
- """
- # First whether combox is already configured.
- config_dir = os.path.join(os.getenv('HOME'),'.combox/')
- if not os.path.exists(config_dir):
- # Create combox dir and configure.
- os.mkdir(config_dir, 0700)
- config_file_path = os.path.join(config_dir, 'config.yaml')
- config_info = {}
-
- config_info['combox_dir'] = raw_input('path to combox directory: ')
- config_info['topsecret'] = hashlib.sha224(getpass.getpass('passphrase: ')).hexdigest()
-
- no_nodes = int(raw_input('number of nodes: '))
-
- nodes = {}
- for i in range(no_nodes):
- node_name = raw_input('node %d name: ' % i)
- nodes[node_name] = {}
- nodes[node_name]['path'] = raw_input('node %d path: ' % i)
- nodes[node_name]['size'] = raw_input('node %d size (in mega bytes): ' % i)
- nodes[node_name]['available'] = nodes[node_name]['size']
-
- config_info['nodes_info'] = nodes
- config_file = open(config_file_path, 'w')
- yaml.dump(config_info, config_file, default_flow_style=False)
- os.chmod(config_file_path,stat.S_IRUSR|stat.S_IWUSR)
- else:
- # should put something here later
- pass
diff --git a/combox/crypto.py b/combox/crypto.py
deleted file mode 100644
index 3f17cc0..0000000
--- a/combox/crypto.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# Copyright (C) 2014 Combox author(s). See AUTHORS.
-#
-# This file is part of Combox.
-#
-# Combox is free software: you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Combox is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Combox (see COPYING). If not, see
-# <http://www.gnu.org/licenses/>.
-
-## Adapted from https://gist.github.com/sekondus/4322469
-
-import base64
-import os
-
-from Crypto.Cipher import AES
-
-BLOCK_SIZE = 32
-PAD_CHAR = '#'
-
-
-def pad(data):
- """Pad data such that its length is a multiple of BLOCK_SIZE.
- """
-
- padding = (BLOCK_SIZE - (len(data) % BLOCK_SIZE)) * PAD_CHAR
- data += padding
-
- return data
-
-
-def encrypt(data, secret):
- """Encrypt byestream and return cipher.
- """
- aes = AES.new(pad(secret))
- cipher = base64.b64encode(aes.encrypt(pad(data)))
-
- return cipher
-
-
-def decrypt(cipher, secret):
- """Decrypt cipher and return data.
- """
- aes = AES.new(pad(secret))
- data = aes.decrypt(base64.b64decode(cipher)).rstrip(PAD_CHAR)
-
- return data
-
-def encrypt_shards(shards, secret):
- """Encrypt the shards of data and return a list of ciphers.
-
- shards: list of shards (string, bytes).
- secret: top secret passphrase
- """
-
- ciphers = []
- for shard in shards:
- cipher = encrypt(shard, secret)
- ciphers.append(cipher)
-
- return ciphers
-
-
-def decrypt_shards(ciphers, secret):
- """Decrypt the ciphered shards and return a list of shards.
-
- shards: list of ciphered shards.
- secret: top secret passphrase
- """
-
- shards = []
- for cipher in ciphers:
- shard = decrypt(cipher, secret)
- shards.append(shard)
-
- return shards
diff --git a/tests/test_config.py b/tests/combox_tests.py
index 6806e1e..e4561b9 100644
--- a/tests/test_config.py
+++ b/tests/combox_tests.py
@@ -16,7 +16,15 @@
# along with Combox (see COPYING). If not, see
# <http://www.gnu.org/licenses/>.
-from config import config_cb
+from nose.tools import *
+import combox
+
+def setup():
+ print "SETUP!"
+
+def teardown():
+ print "TEAR DOWN!"
+
+def test_basic():
+ print "I RAN!"
-# test this function.
-config_cb()
diff --git a/tests/files/the-red-star.jpg b/tests/files/the-red-star.jpg
deleted file mode 100644
index 6ed5a4a..0000000
--- a/tests/files/the-red-star.jpg
+++ /dev/null
Binary files differ
diff --git a/tests/test_crypto.py b/tests/test_crypto.py
deleted file mode 100644
index 143cfdb..0000000
--- a/tests/test_crypto.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Copyright (C) 2014 Combox author(s). See AUTHORS.
-#
-# This file is part of Combox.
-#
-# Combox is free software: you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Combox is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Combox (see COPYING). If not, see
-# <http://www.gnu.org/licenses/>.
-
-from os import path
-
-from file import (split_data, glue_data, write_file,
- read_file, write_shards, read_shards)
-from crypto import encrypt, decrypt, encrypt_shards, decrypt_shards
-
-PASS = 'topsecret'
-### Read file, encrypt it to a cipher, write cipher to file, read
-### encrypted file, decrypt it, write decrypted data to file.
-f = path.abspath('tests/files/the-red-star.jpg')
-f_content = read_file(f)
-f_cipher = encrypt(f_content, PASS)
-f_encrypted = path.abspath('tests/files/the-red-star.cipher')
-write_file(f_encrypted, f_cipher)
-f_cipher = read_file(f_encrypted)
-f_content = decrypt(f_cipher, PASS)
-f = path.abspath('tests/files/the-red-star-decrypted.jpg')
-write_file(f, f_content)
-
-### Read file, split it, encrypt shards, write encrypted shards to
-### file, read encrypted shards from file, decrypt the encrypted
-### shards, glue the shards together, write glued data to file.
-f = path.abspath('tests/files/the-red-star.jpg')
-f_content = read_file(f)
-f_shards = split_data(f_content, 5)
-ciphered_shards = encrypt_shards(f_shards, PASS)
-f_path = path.dirname(f)
-f_basename = "%s.ciphered" % path.basename(f)
-write_shards(ciphered_shards, f_path, f_basename)
-ciphered_shards = read_shards(f_path, f_basename)
-f_parts = decrypt_shards(ciphered_shards, PASS)
-f_content = glue_data(f_parts)
-f = path.abspath('tests/files/the-red-star-from-ciphered-shards.jpg')
-write_file(f, f_content)
diff --git a/tests/test_file.py b/tests/test_file.py
deleted file mode 100644
index 590e36f..0000000
--- a/tests/test_file.py
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright (C) 2014 Combox author(s). See AUTHORS.
-#
-# This file is part of Combox.
-#
-# Combox is free software: you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Combox is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with Combox (see COPYING). If not, see
-# <http://www.gnu.org/licenses/>.
-
-from os import path
-
-from file import (split_data, glue_data, write_file,
- read_file, write_shards, read_shards)
-
-### Test to split, glue and create a copy of the image file from the
-### glued image file.
-f = path.abspath('tests/files/the-red-star.jpg')
-f_content = read_file(f)
-f_parts = split_data(f_content, 5)
-f_content = glue_data(f_parts)
-f_copy = path.abspath('tests/files/the-red-star-copy.jpg')
-write_file(f_copy, f_content)
-
-
-## read file and split it into N shards and write the shards to disk.
-SHARDS = 5
-f = path.abspath('tests/files/the-red-star.jpg')
-f_content = read_file(f)
-f_shards = split_data(f_content, SHARDS)
-f_path = path.dirname(f)
-f_basename = path.basename(f)
-write_shards(f_shards, f_path, f_basename)
-
-## read file shards, glue them together and write to disk.
-f_shards = read_shards(f_path, f_basename)
-f_content = glue_data(f_shards)
-f_copy = path.abspath('tests/files/the-red-star-glued.jpg')
-write_file(f_copy, f_content)