import logging
 import datetime
+import binascii
 import os
 import stat
 import json
         new_volume_handler = partial(new_volume_handler, self)
 
         index_fd.write('{"type": "python-delta-tar-index", version: "1" }\n')
-        index_fd.write('{"type": "BEGIN-FILE-LIST"}\n')
-        checksum = 'TODO' # TODO: checksum
+
+        s = '{"type": "BEGIN-FILE-LIST"}\n'
+        # calculate checksum and write into the stream
+        crc = binascii.crc32(s)
+        index_fd.write(s)
 
         # start creating the tarfile
         tarobj = tarfile.TarFile.open(tarfile_path,
             stat = self._stat_dict(path)
             stat['volume'] = vol_no
             stat['offset'] = tarobj.fileobj.tell() # TODO: check/fix this
-            index_fd.write(json.dumps(stat) + '\n')
+
+            s = json.dumps(stat) + '\n'
+            crc = binascii.crc32(s, crc) & 0xffffffff
+            index_fd.write(s)
 
             tarobj.add(path)
 
-        index_fd.write('{"type": "END-FILE-LIST"}\n')
-        index_fd.write('{"type": "file-list-checksum", "checksum": "%s"}\n' %\
-                        checksum)
+        s = '{"type": "END-FILE-LIST"}\n'
+        crc = binascii.crc32(s, crc) & 0xffffffff
+        index_fd.write(s)
+        index_fd.write('{"type": "file-list-checksum", "checksum": %d}\n' %\
+                        crc)
         index_fd.close()
         os.chdir(cwd)
         tarobj.close()
 
             if value:
                 assert value == self.md5sum(key)
 
+    def test_check_index_checksum(self):
+        '''
+        Creates a full backup and checks the index' checksum of files
+        '''
+        import binascii
+        import json
+        deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD,
+                            logger=self.consoleLogger)
+
+        # create first backup
+        deltatar.create_full_backup(
+            source_path="source_dir",
+            backup_path="backup_dir")
+
+
+        index_filename = deltatar.index_name_func(True)
+        index_path = os.path.join("backup_dir", index_filename)
+
+        f = open(index_path, 'r')
+        crc = None
+        checked = False
+        began_list = False
+        for l in f.readline():
+            if 'BEGIN-FILE-LIST' in l:
+                crc = binascii.crc32(l)
+                began_list = True
+            elif 'END-FILE-LIST' in l:
+                crc = binascii.crc32(l, crc) & 0xffffffff
+
+                # next line contains the crc
+                data = json.loads(f.readline())
+                assert data['type'] == 'file-list-checksum'
+                assert data['checksum'] == crc
+                checked = True
+                break
+            elif began_list:
+                crc = binascii.crc32(l, crc) & 0xffffffff
+
+
+
 
 class DeltaTar2Test(DeltaTarTest):
     '''
     MODE = '#gz'
 
 
-class DeltaTarBz2ConcatTest(DeltaTarTest):
-    '''
-    Same as DeltaTar but with specific bz2 concat stream mode
-    '''
-    MODE = '#bz2'
-
-
 class DeltaTarGzipAes128ConcatTest(DeltaTarTest):
     '''
     Same as DeltaTar but with specific gzip aes128 concat stream mode