Ejemplo n.º 1
0
        public ChunkData(byte[] id, byte[] data, byte[][] dependencies, byte[][] signatures, ChunkRepository source)
        {
            if (id == null)
                throw new ArgumentNullException ("id");
            if (data == null)
                throw new ArgumentNullException ("data");
            if (dependencies == null)
                throw new ArgumentNullException ("dependencies");
            for (int n = 0; n != dependencies.Length; n++) {
                if (dependencies [n] == null) {
                    throw new ArgumentNullException (string.Format ("dependencies[{0}]", n));
                }
            }
            if (source == null)
                throw new ArgumentNullException ("source");
            if (signatures == null)
                throw new ArgumentNullException ("signatures");
            for (int n = 0; n != signatures.Length; n++) {
                if (signatures [n] == null) {
                    throw new ArgumentNullException (string.Format ("signatures[{0}]", n));
                }
            }

            this.id = id;
            this.data = data;
            this.dependencies = dependencies;
            this.source = source;
            this.signatures = signatures;
        }
Ejemplo n.º 2
0
        public bool Login(byte[] userID, string password, string pepper)
        {
            if (userStorage.LoggedInUsers.Contains(userID))
            {
                throw new InvalidOperationException(string.Format("User [0x{0}] is already logged in.", userID.ToHexadecimal()));
            }
            bool v = userStorage.Login(userID, password, pepper);

            if (v)
            {
                foreach (var ur in userStorage.GetUserRepositories(userID))
                {
                    byte[] repoInfo = userStorage.GetRawRepositoryInfo(ur);
                    System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer(typeof(ChunkRepositoryConfiguration));
                    ChunkRepositoryConfiguration           cri  = (ChunkRepositoryConfiguration)xmls.Deserialize(new MemoryStream(repoInfo, false));
                    DatabasePath dbp = GetRepositoryPath(cri.ID);
                    if (dataStorage.ContainsKey(ur))
                    {
                        foreach (var sk in userStorage.GetUserRepository(ur).SymmetricKeys)
                        {
                            if (!dataStorage [ur].LencryptedData.ContainsKey(sk.Key))
                            {
                                dataStorage [ur].LencryptedData.Add(sk.Key, new AESEncryptingKeyValueStorage(
                                                                        new LevelDBKeyValueStorage(dbp.CreatePath("Encrypted").CreatePath(sk.Key.ToHexadecimal()))
                                                                        , sk.Value));
                            }
                        }
                    }
                    else
                    {
                        SortedDictionary <byte[], KeyValueStorage <byte[]> > EncryptedData = new SortedDictionary <byte[], KeyValueStorage <byte[]> > ();
                        foreach (var sk in userStorage.GetUserRepository(ur).SymmetricKeys)
                        {
                            KeyValueStorageConfiguration ESC = new KeyValueStorageConfiguration();
                            ESC.Type = cri.Data.Type;
                            ESC.Path = sk.Key.ToHexadecimal();
                            EncryptedData.Add(sk.Key, new AESEncryptingKeyValueStorage(
                                                  ESC.OpenStorage <byte[]> (dbp.CreatePath("Encrypted")), sk.Value));
                        }
                        ChunkRepository cr = new ChunkRepository(
                            cri.Data.OpenStorage <byte[]> (dbp),
                            cri.TopLevels.OpenStorage <byte[][]> (dbp),
                            cri.Dependencies.OpenStorage <byte[][]> (dbp),
                            cri.Meta.OpenStorage <byte[]> (dbp),
                            cri.MetaTopLevels.OpenStorage <byte[][]> (dbp),
                            cri.MetaDependencies.OpenStorage <byte[][]> (dbp),
                            cri.Signatures.OpenStorage <byte[][]> (dbp),
                            cri.ChunkSymmetricKeys.OpenStorage <byte[][]> (dbp),
                            cri.Index.OpenStorage <byte[]> (dbp),
                            EncryptedData);
                        dataStorage.Add(cr.ID, cr);
                    }
                    //encryptedStorageManager.Add (ur, new EncryptedStorageManager (cr, userStorage));
                }
            }
            return(v);
        }
Ejemplo n.º 3
0
 public ChunkAgent(ServiceAgentMode serviceAgentMode, ObjectBusSession objectBusSession, Action flush, ChunkRepository repository)
     : base(serviceAgentMode, objectBusSession, flush, false)
 {
     if (repository == null)
         throw new ArgumentNullException ("repository");
     this.repository = repository;
     objectBusSession.RegisterType (typeof(TopLevelChunksRequestMessage), RequestTopLevelChunkDeltaMessageReceived);
     //			objectBusSession.RegisterType (typeof(BD2.Chunk.Daemon.Common.PollChunksRequestMessage), );
     //			objectBusSession.RegisterType (typeof(BD2.Chunk.Daemon.Common.PollNewChunksRequestMessage), );
     //			objectBusSession.RegisterType (typeof(BD2.Chunk.Daemon.Common.PushChunksRequestMessage), );
     //this.repository.Enumerate ();
 }
Ejemplo n.º 4
0
        public ChunkData(byte[] id, byte[] data, byte[][] dependencies, byte[][] signatures, ChunkRepository source)
        {
            if (id == null)
            {
                throw new ArgumentNullException("id");
            }
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            if (dependencies == null)
            {
                throw new ArgumentNullException("dependencies");
            }
            for (int n = 0; n != dependencies.Length; n++)
            {
                if (dependencies [n] == null)
                {
                    throw new ArgumentNullException(string.Format("dependencies[{0}]", n));
                }
            }
            if (source == null)
            {
                throw new ArgumentNullException("source");
            }
            if (signatures == null)
            {
                throw new ArgumentNullException("signatures");
            }
            for (int n = 0; n != signatures.Length; n++)
            {
                if (signatures [n] == null)
                {
                    throw new ArgumentNullException(string.Format("signatures[{0}]", n));
                }
            }

            this.id           = id;
            this.data         = data;
            this.dependencies = dependencies;
            this.source       = source;
            this.signatures   = signatures;
        }
Ejemplo n.º 5
0
 public void AddChunkRepository(ChunkRepository chunkRepository)
 {
     crs.Add(chunkRepository);
     if (chunkRepository == null)
     {
         throw new ArgumentNullException("chunkRepository");
     }
     foreach (var user in userRepository.LoggedInUsers)
     {
         GenericUserRepositoryCollection userreps      = userRepository.GetUserRepository(user);
         RSAEncryptingKeyValueStorage    symmetricKeys = userreps.SymmetricKeys;
         foreach (var sk in symmetricKeys)
         {
             if (!permanentStorage.ContainsKey(sk.Key))
             {
                 permanentStorage.Add(sk.Key, new AESEncryptingKeyValueStorage(chunkRepository.LencryptedData [sk.Key], sk.Value));
             }
         }
     }
 }
Ejemplo n.º 6
0
        void LoadRepository(ChunkRepository cr)
        {
            SortedDictionary <byte[], byte[]> pendingData = new SortedDictionary <byte[], byte[]> (ByteSequenceComparer.Shared);

            foreach (var d in cr.Ldata)
            {
                pendingData.Add(d.Key, d.Value);
            }

            while (pendingData.Count != 0)
            {
                foreach (var tup in new SortedDictionary <byte[], byte[]>(pendingData, BD2.Core.ByteSequenceComparer.Shared))
                {
                    //Console.WriteLine ("Testing object");
                    byte[]   nchunk = tup.Key;
                    byte[][] deps   = cr.LdataDependencies.Get(nchunk);
                    if (deps == null)
                    {
                        throw new InvalidDataException();
                    }
                    Console.WriteLine("dependency count = {0}", deps.Length);
                    foreach (byte[] dep in deps)
                    {
                        if (pendingData.ContainsKey(dep))
                        {
                            Console.WriteLine("Found an unloaded dependency, skipping...");
                            nchunk = null;
                        }
                    }
                    if (nchunk == null)
                    {
                        continue;
                    }
                    Console.WriteLine("All the dependencies are loaded, proceeding...");
                    byte[] chunkData = tup.Value;
                    LoadChunk(nchunk, chunkData);
                    pendingData.Remove(nchunk);
                }
            }
        }
Ejemplo n.º 7
0
        public static SortedSet <byte[]> CreateSmallestDependencyCollection(ChunkRepository repo, SortedSet <byte[]> chunks, int extraPasses = 4)
        {
            SortedSet <byte[]> removables = new SortedSet <byte[]> (ByteSequenceComparer.Shared);
            SortedSet <byte[]> resolved   = new SortedSet <byte[]> (chunks, ByteSequenceComparer.Shared);
            SortedSet <byte[]> results    = new SortedSet <byte[]> (chunks, ByteSequenceComparer.Shared);

            foreach (byte[] chunk in chunks)
            {
                removables.UnionWith(repo.ldataDependencies.Get(chunk));
            }
            for (int n = 0; n != extraPasses; n++)
            {
                foreach (byte[] chunk in removables)
                {
                    if (!resolved.Contains(chunk))
                    {
                        removables.UnionWith(repo.ldataDependencies.Get(chunk));
                        resolved.Add(chunk);
                    }
                }
            }
            results.ExceptWith(removables);
            return(results);
        }
Ejemplo n.º 8
0
 public ChunkAgentOptions(ChunkRepository repository)
 {
     if (repository == null)
         throw new ArgumentNullException ("repository");
     this.repository = repository;
 }
Ejemplo n.º 9
0
 public static ServiceAgent CreateAgent(ServiceAgentMode serviceAgentMode, ObjectBusSession objectBusSession, Action flush, ChunkRepository repository)
 {
     if (repository == null)
         throw new ArgumentNullException ("repository");
     return new ChunkAgent (serviceAgentMode, objectBusSession, flush, repository);
 }
Ejemplo n.º 10
0
        void LoadUserStorageBase(byte[] userID, byte[] ur)
        {
            Log.WriteLine ("Database.LoadUserStorageBase()");

            {
                byte[] repoInfo = userStorage.GetRawRepositoryInfo (ur);
                Log.WriteLine ("Raw Repository info:{0}", repoInfo.ToHexadecimal ());
                System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer (typeof(ChunkRepositoryConfiguration));
                ChunkRepositoryConfiguration cri = (ChunkRepositoryConfiguration)xmls.Deserialize (new MemoryStream (repoInfo, false));
                Log.WriteLine ("Repository info id:{0}", cri.ID);
                DatabasePath dbp = GetRepositoryPath (cri.ID);
                if (dataStorage.ContainsKey (ur)) {
                    Log.WriteLine ("repo {0} is already loaded. loading encrypted parts with new keys.", ur);
                    foreach (var sk in userStorage.GetUserStorage (userID).SymmetricKeys) {
                        if (!dataStorage [ur].LencryptedData.ContainsKey (sk.Key)) {
                            Log.WriteLine ("loading key {0}", sk.Key.ToHexadecimal ());
                            KeyValueStorageConfiguration ESC = new KeyValueStorageConfiguration ();
                            ESC.Type = cri.Data.Type;
                            ESC.Path = sk.Key.ToHexadecimal ();
                            dataStorage [ur].LencryptedData.Add (sk.Key, new AESEncryptingKeyValueStorage (ESC.OpenStorage<byte[]> (dbp.CreatePath ("Encrypted")), sk.Value));
                        }
                    }
                } else {
                    SortedDictionary<byte[], KeyValueStorage<byte[]>> EncryptedData = new SortedDictionary<byte[], KeyValueStorage<byte[]>> ();
                    foreach (var sk in userStorage.GetUserStorage (userID).SymmetricKeys) {
                        KeyValueStorageConfiguration ESC = new KeyValueStorageConfiguration ();
                        ESC.Type = cri.Data.Type;
                        ESC.Path = sk.Key.ToHexadecimal ();
                        EncryptedData.Add (sk.Key, new AESEncryptingKeyValueStorage (ESC.OpenStorage<byte[]> (dbp.CreatePath ("Encrypted")), sk.Value));
                    }
                    ChunkRepository cr = new ChunkRepository (cri.ID, cri.Data.OpenStorage<byte[]> (dbp), cri.TopLevels.OpenStorage<byte[][]> (dbp), cri.Dependencies.OpenStorage<byte[][]> (dbp), cri.Meta.OpenStorage<byte[]> (dbp), cri.MetaTopLevels.OpenStorage<byte[][]> (dbp), cri.MetaDependencies.OpenStorage<byte[][]> (dbp), cri.Signatures.OpenStorage<byte[][]> (dbp), cri.ChunkSymmetricKeys.OpenStorage<byte[][]> (dbp), cri.Index.OpenStorage<byte[]> (dbp), cri.InternalMeta.OpenStorage<byte[]> (dbp), EncryptedData);
                    dataStorage.Add (cr.ID, cr);
                    ChunkRepositoryAdded (this, new ChunkRepositoryAddedEventArgs (cr));
                }
                //encryptedStorageManager.Add (ur, new EncryptedStorageManager (cr, userStorage));
            }
            {
                byte[] cus = userStorage.GetCommonStorage ();
                Log.WriteLine ("Common storage id is {0}", cus.ToHexadecimal ());
                if (!dataStorage.ContainsKey (cus)) {
                    Log.WriteLine ("and we don't have it.");
                    Log.WriteLine ("we only have:");
                    foreach (var t in dataStorage)
                        Log.WriteLine ("    ID: {0}", t.Key.ToHexadecimal ());
                    throw new NotImplementedException ();
                    byte[] repoInfo = userStorage.GetRawRepositoryInfo (ur);
                    SortedDictionary<byte[], KeyValueStorage<byte[]>> EncryptedData = new SortedDictionary<byte[], KeyValueStorage<byte[]>> ();
                    System.Xml.Serialization.XmlSerializer xmls = new System.Xml.Serialization.XmlSerializer (typeof(ChunkRepositoryConfiguration));
                    ChunkRepositoryConfiguration cri = (ChunkRepositoryConfiguration)xmls.Deserialize (new MemoryStream (repoInfo, false));
                    DatabasePath dbp = GetRepositoryPath (cri.ID);
                    KeyValueStorageConfiguration ESC = new KeyValueStorageConfiguration ();
                    ESC.Type = cri.Data.Type;
                    ESC.Path = cus.ToHexadecimal ();
                    byte[] ak = null;
                    EncryptedData.Add (cus, new AESEncryptingKeyValueStorage (ESC.OpenStorage<byte[]> (dbp.CreatePath ("Encrypted")), ak));
                    ChunkRepository cr = new ChunkRepository (cri.ID, cri.Data.OpenStorage<byte[]> (dbp), cri.TopLevels.OpenStorage<byte[][]> (dbp), cri.Dependencies.OpenStorage<byte[][]> (dbp), cri.Meta.OpenStorage<byte[]> (dbp), cri.MetaTopLevels.OpenStorage<byte[][]> (dbp), cri.MetaDependencies.OpenStorage<byte[][]> (dbp), cri.Signatures.OpenStorage<byte[][]> (dbp), cri.ChunkSymmetricKeys.OpenStorage<byte[][]> (dbp), cri.Index.OpenStorage<byte[]> (dbp), cri.InternalMeta.OpenStorage<byte[]> (dbp), EncryptedData);
                    dataStorage.Add (cr.ID, cr);
                    ChunkRepositoryAdded (this, new ChunkRepositoryAddedEventArgs (cr));
                }
            }
        }
Ejemplo n.º 11
0
 void LoadRepository(ChunkRepository cr)
 {
     Log.WriteLine ("Database.LoadRepository()");
     SortedSet<byte[]> pendingData = new SortedSet<byte[]> (ByteSequenceComparer.Shared);
     var e = cr.Ldata.EnumerateKeys ();
     while (e.MoveNext ())
         pendingData.Add (e.Current);
     while (pendingData.Count != 0)
         foreach (var nchunk in new SortedSet<byte[]>(pendingData, ByteSequenceComparer.Shared)) {
             //Log.WriteLine ("Testing object");
             byte[][] deps = cr.LdataDependencies.Get (nchunk);
             if (deps == null)
                 throw new InvalidDataException ();
             Log.WriteLine ("dependency count = {0}", deps.Length);
             if (pendingData.Overlaps (deps)) {
                 Log.WriteLine ("Found an unloaded dependency, skipping...");
                 continue;
             }
             Log.WriteLine ("All the dependencies are loaded, proceeding...");
             LoadChunk (nchunk, cr);
             pendingData.Remove (nchunk);
         }
 }
Ejemplo n.º 12
0
 ChunkHeaderv1 LoadChunk(byte[] chunkID, ChunkRepository cr)
 {
     Log.WriteLine ("Database.LoadChunk()");
     foreach (var f in frontends)
         f.Value.AddDataObjects (chunkID, cr);
     return null;
 }
Ejemplo n.º 13
0
 public static SortedSet<byte[]> CreateSmallestDependencyCollection(ChunkRepository repo, SortedSet<byte[]> chunks, int extraPasses = 4)
 {
     SortedSet<byte[]> removables = new SortedSet<byte[]> (ByteSequenceComparer.Shared);
     SortedSet<byte[]> resolved = new SortedSet<byte[]> (chunks, ByteSequenceComparer.Shared);
     SortedSet<byte[]> results = new SortedSet<byte[]> (chunks, ByteSequenceComparer.Shared);
     foreach (byte[] chunk in chunks) {
         removables.UnionWith (repo.ldataDependencies.Get (chunk));
     }
     for (int n = 0; n != extraPasses; n++) {
         foreach (byte[] chunk in removables) {
             if (!resolved.Contains (chunk)) {
                 removables.UnionWith (repo.ldataDependencies.Get (chunk));
                 resolved.Add (chunk);
             }
         }
     }
     results.ExceptWith (removables);
     return results;
 }
Ejemplo n.º 14
0
 public ChunkRepositoryAddedEventArgs(ChunkRepository chunkRepository)
 {
     if (chunkRepository == null)
         throw new ArgumentNullException ("chunkRepository");
     this.chunkRepository = chunkRepository;
 }
Ejemplo n.º 15
0
Archivo: Main.cs Proyecto: vebin/BD2
 static void OpenLevelDBRepository(string[] commandParts)
 {
     string nick = commandParts [2];
     string path = commandParts [3];
     ChunkRepository LRepo = new ChunkRepository (path);
     lock (repositories)
         repositories.Add (nick, LRepo);
 }