Esempio n. 1
0
        public IActionResult CreateMessage(CreateMessageModel model)
        {
            if (ModelState.IsValid)
            {
                var email = new Message
                {
                    EmailSender   = User.Identity.Name,
                    EmailReceiver = model.EmailReceiver,
                    Text          = model.Text,
                    AttachedFile  = model.File
                };

                var rsaEncryption    = new RSAEncryption(email.EmailReceiver);
                var digitalSignature = new DigitalSignature(email.EmailSender);

                var encryptedMessage = _messageEncryptionService.EncryptData(email, rsaEncryption, digitalSignature);

                if (email.AttachedFile != null)
                {
                    _fileEncryptionService.EncryptFile(email.AttachedFile, encryptedMessage, rsaEncryption, digitalSignature);
                }

                return(RedirectToAction(nameof(MessageSentSuccessfully)));
            }

            return(View());
        }
Esempio n. 2
0
        public ChatTopic UploadChatTopic(Chat tag,
                                         HypertextFormatType formatType,
                                         string hypertext,

                                         int miningLimit,
                                         TimeSpan miningTime,
                                         DigitalSignature digitalSignature)
        {
            lock (this.ThisLock)
            {
                var uploadItem = new UploadItem();
                uploadItem.Type             = "ChatTopic";
                uploadItem.ChatTopic        = new ChatTopic(tag, DateTime.UtcNow, formatType, hypertext, digitalSignature);
                uploadItem.MiningLimit      = miningLimit;
                uploadItem.MiningTime       = miningTime;
                uploadItem.DigitalSignature = digitalSignature;

                _settings.UploadItems.RemoveAll((target) =>
                {
                    return(target.Type == uploadItem.Type &&
                           target.ChatTopic.Tag == uploadItem.ChatTopic.Tag &&
                           target.DigitalSignature == digitalSignature);
                });

                _settings.UploadItems.Add(uploadItem);

                return(uploadItem.ChatTopic);
            }
        }
Esempio n. 3
0
        public void TestBasicSigningAndVerification()
        {
            var encryptionManager = new EncryptionManager(new KeyStore(new KeyStoreRepository(new DataContext())));
            var hashManager       = new HashManager();

            var cryptoService        = new CryptographyService.CryptographyService(encryptionManager, hashManager);
            var wrappedCryptoService = new CryptoServiceWrapper <FabricSigning>(cryptoService, null);

            var signingContent = GenerateSampleFabricSignContent();
            var signingOutcome = wrappedCryptoService.SignContent(signingContent);

            var signature = new DigitalSignature <FabricSigning>()
            {
                OriginalContent    = signingContent,
                SignedContent      = signingOutcome.Signature,
                SignatoryReference = signingOutcome.SignatoryReference
            };

            var signOutcome = wrappedCryptoService.VerifySignature(signature);

            Assert.IsTrue(signOutcome.SignatoryMatchedToSignature);
            Assert.IsTrue(signOutcome.SignedContentMatchesToSignature);

            // This represents application side verification of signed content. Helpful to identify what in content has changed
            Assert.IsTrue(signOutcome.ExpectedContent?.Agreements?.FirstOrDefault().Description == signOutcome.SignedContent?.Agreements?.FirstOrDefault().Description);
        }
Esempio n. 4
0
        public WikiDocument UploadWikiDocument(Wiki tag,
                                               IEnumerable <WikiPage> wikiPages,

                                               int miningLimit,
                                               TimeSpan miningTime,
                                               DigitalSignature digitalSignature)
        {
            lock (this.ThisLock)
            {
                var uploadItem = new UploadItem();
                uploadItem.Type             = "WikiDocument";
                uploadItem.WikiDocument     = new WikiDocument(tag, DateTime.UtcNow, wikiPages, digitalSignature);
                uploadItem.MiningLimit      = miningLimit;
                uploadItem.MiningTime       = miningTime;
                uploadItem.DigitalSignature = digitalSignature;

                _settings.UploadItems.RemoveAll((target) =>
                {
                    return(target.Type == uploadItem.Type &&
                           target.WikiDocument.Tag == uploadItem.WikiDocument.Tag &&
                           target.DigitalSignature == digitalSignature);
                });

                _settings.UploadItems.Add(uploadItem);

                return(uploadItem.WikiDocument);
            }
        }
Esempio n. 5
0
        public Task Upload(Tag tag, ChatMessage chatMessage, DigitalSignature digitalSignature, TimeSpan miningTime, CancellationToken token)
        {
            if (tag == null)
            {
                throw new ArgumentNullException(nameof(tag));
            }
            if (chatMessage == null)
            {
                throw new ArgumentNullException(nameof(chatMessage));
            }
            if (digitalSignature == null)
            {
                throw new ArgumentNullException(nameof(digitalSignature));
            }

            return(_coreManager.VolatileSetStream(ContentConverter.ToStream(chatMessage), TimeSpan.FromDays(360), token)
                   .ContinueWith(task =>
            {
                MulticastMetadata multicastMetadata;

                try
                {
                    var miner = new Miner(CashAlgorithm.Version1, -1, miningTime);
                    multicastMetadata = new MulticastMetadata("ChatMessage", tag, DateTime.UtcNow, task.Result, digitalSignature, miner, token);
                }
                catch (MinerException)
                {
                    return;
                }

                _coreManager.UploadMetadata(multicastMetadata);
            }));
        }
Esempio n. 6
0
        public byte[] CreateSignature(byte[] data, string signCertCN)
        {
            X509Certificate2 certificateSign = CertManager.GetCertificateFromStorage(StoreName.My,
                                                                                     StoreLocation.LocalMachine, signCertCN);

            return(DigitalSignature.Create(data, HashAlgorithm.SHA1, certificateSign));
        }
Esempio n. 7
0
        public VerificationResult <T> VerifySignature(DigitalSignature <T> signature)
        {
            var serializedOriginalContent = JsonConvert.SerializeObject(signature.OriginalContent);

            var mappedSigniture = new DigitalSignature <string>
            {
                SignatoryReference = signature.SignatoryReference,
                SignedContent      = signature.SignedContent,
                OriginalContent    = serializedOriginalContent
            };

            var serverVerification = cryptoService.VerifySignature(mappedSigniture);

            var expectedContent = JsonConvert.DeserializeObject <T>(serverVerification.ExpectedContent);
            var signedContent   = JsonConvert.DeserializeObject <T>(serverVerification.SignedContent);

            return(new VerificationResult <T>
            {
                CreatedDateTime = serverVerification.CreatedDateTime,
                IpAddress = serverVerification.IpAddress,
                SignatoryEmailAddress = serverVerification.SignatoryEmailAddress,
                SignatoryMatchedToSignature = serverVerification.SignatoryMatchedToSignature,
                SignedContentMatchesToSignature = serverVerification.SignedContentMatchesToSignature,
                SignedContent = signedContent,
                ExpectedContent = expectedContent
            });
        }
Esempio n. 8
0
        public bool Verify()
        {
            if (!DigitalSignature.Verify(Hash, Inputs.First().PublicKey, Signature))
            {
                return(false);
            }

            if (Outputs.Sum(a => a.Amount) > Inputs.Sum(b => b.Amount))
            {
                return(false);
            }

            var isVerified = true;

            Inputs.ForEach(a =>
            {
                var utxo = Transaction.CollectUTXO(BlocksController.blockChain, a.PublicKey);
                if (utxo.Values.Where(b => b.Outputs.Any(c => c.PublicKey.Equals(a.PublicKey) && b.Hash.Equals(a.TxHash))).Count() != 1)
                {
                    isVerified = false;
                }
            });
            if (!isVerified)
            {
                return(false);
            }

            return(true);
        }
Esempio n. 9
0
        private void _okButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;

            string           name    = _nameTextBox.Text;
            string           comment = string.IsNullOrWhiteSpace(_commentTextBox.Text) ? null : _commentTextBox.Text;
            var              digitalSignatureComboBoxItem = _signatureComboBox.SelectedItem as DigitalSignatureComboBoxItem;
            DigitalSignature digitalSignature             = digitalSignatureComboBoxItem == null ? null : digitalSignatureComboBoxItem.Value;

            var now = DateTime.UtcNow;

            foreach (var box in _boxes)
            {
                lock (box.ThisLock)
                {
                    if (!_nameTextBox.IsReadOnly)
                    {
                        box.Name = name;
                    }

                    box.Comment      = comment;
                    box.CreationTime = now;

                    if (digitalSignature == null)
                    {
                        box.CreateCertificate(null);
                    }
                    else
                    {
                        box.CreateCertificate(digitalSignature);
                    }
                }
            }
        }
        public static void Run()
        {
            // ExStart:1
            //Source directory
            string sourceDir = RunExamples.Get_SourceDirectory();

            //Output directory
            string outputDir = RunExamples.Get_OutputDirectory();

            Workbook workbook = new Workbook(sourceDir + "sourceFile.xlsx");
            string   password = "******";
            string   pfx      = "pfxFile";

            DigitalSignature signature = new DigitalSignature(File.ReadAllBytes(pfx), password, "testXAdES", DateTime.Now);

            signature.XAdESType = XAdESType.XAdES;
            DigitalSignatureCollection dsCollection = new DigitalSignatureCollection();

            dsCollection.Add(signature);

            workbook.SetDigitalSignature(dsCollection);

            workbook.Save(outputDir + "XAdESSignatureSupport_out.xlsx");
            // ExEnd:1

            Console.WriteLine("XAdESSignatureSupport executed successfully.");
        }
        public static void Run()
        {
            // ExStart:AssignAndValidateDigitalSignatures
            // The path to the documents directory.
            string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            // dsc is signature collection contains one or more signature needed to sign
            DigitalSignatureCollection dsc = new DigitalSignatureCollection();

            // Cert must contain private key, it can be contructed from cert file or windows certificate collection. aa is password of cert
            X509Certificate2 cert = new X509Certificate2(dataDir + "mykey2.pfx", "aa");
            DigitalSignature ds   = new DigitalSignature(cert, "test for sign", DateTime.Now);

            dsc.Add(ds);
            Workbook wb = new Workbook();

            // wb.SetDigitalSignature signs all signatures in dsc
            wb.SetDigitalSignature(dsc);
            wb.Save(dataDir + @"newfile_out.xlsx");

            // open the file
            wb = new Workbook(dataDir + @"newfile_out.xlsx");
            System.Console.WriteLine(wb.IsDigitallySigned);

            // Get digitalSignature collection from workbook
            dsc = wb.GetDigitalSignature();
            foreach (DigitalSignature dst in dsc)
            {
                System.Console.WriteLine(dst.Comments); //test for sign -OK
                System.Console.WriteLine(dst.SignTime); //11/25/2010 1:22:01 PM -OK
                System.Console.WriteLine(dst.IsValid);  //True -OK
            }
            // ExEnd:AssignAndValidateDigitalSignatures
        }
Esempio n. 12
0
        public bool Verify()
        {
            try
            {
                if (PublicKey == null || Sign == null)
                {
                    return(false);
                }

                var rew = new Reward()
                {
                    Achivement = Achivement,
                    Coin       = Coin,
                    Exp        = Exp,
                    SkillPoint = SkillPoint,
                    PublicKey  = PublicKey,
                };

                var json = Util.SerializeJsonBinary(rew, false);

                var ds = DigitalSignature.FromKey(Util.FromBase58(Achivement.PublicPub));
                return(ds.Verify(json, Util.FromBase58(Sign)));
            }
            catch { }

            return(false);
        }
Esempio n. 13
0
        public IActionResult Post([FromBody] WebhookRequest webhookRequest, [FromHeader(Name = "DigitalSignature")] string digitalSignature)
        {
            Console.WriteLine($"Received webhook: {webhookRequest.Type}, payload: {webhookRequest.Payload}");

            // It is important to get body from request object to calculate hash
            // Conversion back from WebhookRequest object may result in different string that will fail validation
            Request.Body.Position = 0;
            using var reader      = new StreamReader(Request.Body);
            var body = reader.ReadToEnd();

            var verified = DigitalSignature.Verify(digitalSignature, body, _authProfile.ClearBankPublicKey);

            if (!verified)
            {
                return(BadRequest("Incorrect signature"));
            }

            // In production system you should put that webhook into the internal queue for processing
            // Don't do heavy processing here and respond to webhook as quick as possible

            var result = new WebhookResponse {
                Nonce = webhookRequest.Nonce
            };

            var response  = JsonSerializer.Serialize(result);
            var signature = DigitalSignature.Generate(response, _authProfile.ClientPrivateKey);

            Request.HttpContext.Response.Headers.Add("DigitalSignature", signature);

            return(Content(response));
        }
Esempio n. 14
0
        public void Test_AmoebaConverter_Seed()
        {
            var seed = new Seed();

            seed.Name = "aaaa.zip";
            seed.Keywords.AddRange(new KeywordCollection
            {
                "bbbb",
                "cccc",
                "dddd",
            });
            seed.CreationTime         = DateTime.Now;
            seed.Length               = 10000;
            seed.Comment              = "eeee";
            seed.Rank                 = 1;
            seed.Key                  = new Key(new byte[32], HashAlgorithm.Sha256);
            seed.CompressionAlgorithm = CompressionAlgorithm.Xz;
            seed.CryptoAlgorithm      = CryptoAlgorithm.Aes256;
            seed.CryptoKey            = new byte[32 + 32];

            DigitalSignature digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.Rsa2048_Sha256);

            seed.CreateCertificate(digitalSignature);

            var stringSeed = AmoebaConverter.ToSeedString(seed);
            var seed2      = AmoebaConverter.FromSeedString(stringSeed);

            Assert.AreEqual(seed, seed2, "AmoebaConverter #2");
        }
Esempio n. 15
0
        public void Test_AmoebaConverter_Box()
        {
            var box = new Box();

            box.Name         = "Box";
            box.Comment      = "Comment";
            box.CreationTime = DateTime.Now;
            box.Boxes.Add(new Box()
            {
                Name = "Box"
            });
            box.Seeds.Add(new Seed()
            {
                Name = "Seed"
            });

            DigitalSignature digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.EcDsaP521_Sha256);

            box.CreateCertificate(digitalSignature);

            Box box2;

            using (var streamBox = AmoebaConverter.ToBoxStream(box))
            {
                box2 = AmoebaConverter.FromBoxStream(streamBox);
            }

            Assert.AreEqual(box, box2, "AmoebaConverter #3");
        }
Esempio n. 16
0
        public bool ResetPinCode(SecureString pin)
        {
            try
            {
                X509Certificate2 certificate = CertManager.GetCertificateFromStorage(StoreName.My, StoreLocation.LocalMachine, username);

                X509Certificate2 certificateSign = CertManager.GetCertificateFromStorage(StoreName.My, StoreLocation.LocalMachine, username + "Sign");

                // hash klijentskog PINa
                byte[] hash = DigitalSignature.CreateHash(new System.Net.NetworkCredential(string.Empty, pin).Password, "SHA1");

                /// Create a signature using SHA1 hash algorithm
                byte[] signature = DigitalSignature.Create(new System.Net.NetworkCredential(string.Empty, pin).Password, "SHA1", certificateSign);

                Console.WriteLine("Delete all cert files and press any key");
                Console.ReadKey();

                return(ResetPinCode(signature, certificate));
            }
            catch (Exception e)
            {
                Console.WriteLine("[ResetPinCode] ERROR = {0}", e.Message);
                return(false);
            }
        }
Esempio n. 17
0
        public void Upload(string filePath,
                           string name,
                           IEnumerable <string> keywords,
                           string comment,
                           DigitalSignature digitalSignature,
                           int priority)
        {
            lock (this.ThisLock)
            {
                UploadItem item = new UploadItem();

                item.State                = UploadState.ComputeHash;
                item.Type                 = UploadType.Upload;
                item.Rank                 = 1;
                item.FilePath             = filePath;
                item.CompressionAlgorithm = CompressionAlgorithm.Xz;
                item.CryptoAlgorithm      = CryptoAlgorithm.Aes256;
                item.CorrectionAlgorithm  = CorrectionAlgorithm.ReedSolomon8;
                item.HashAlgorithm        = HashAlgorithm.Sha256;
                item.DigitalSignature     = digitalSignature;
                item.Seed                 = new Seed();
                item.Seed.Name            = name;
                item.Seed.Keywords.AddRange(keywords);
                item.Seed.CreationTime = DateTime.UtcNow;
                item.Seed.Comment      = comment;
                item.BlockLength       = 1024 * 1024 * 1;
                item.Priority          = priority;

                _settings.UploadItems.Add(item);
                _ids.Add(_id, item);

                _id++;
            }
        }
Esempio n. 18
0
        private void DCGenerateCertificateButton_Click(object sender, RoutedEventArgs e)
        {
            //Create a RSAWrapper object using the dropdown box selection.
            RSAWrapper envelopeRsaAlgorithm = new RSAWrapper(DCEnvelopeRsaDropdown.SelectedItem.ToString());
            //Create a CipherMode object using the dropdown box selection.
            CipherMode cipherMode = HelperExtensions.StringToCipherMode(DCEnvelopeCipherDropdown.SelectedItem.ToString());
            //Create a SymmetricAlgorithmWrapper object using the dropdown box selection and the CipherMode object.
            SymmetricAlgorithmWrapper symmetricAlgorithmType = HelperExtensions.StringToSymAlg(DCEnvelopeSymDropdown.SelectedItem.ToString(), cipherMode, DCEnvelopeCipherDropdown.SelectedItem.ToString());

            //Create a DigitalEnvelope object using the dropdown box selection, the SymmetricAlgorithmWrapper object and the RSAWrapper object.
            DigitalEnvelope digitalEnvelope = new DigitalEnvelope(symmetricAlgorithmType, envelopeRsaAlgorithm, DCInputTextBox.Text);
            //Decrypt the envelope.
            DigitalEnvelopeEncrypted result = digitalEnvelope.CreateEnvelope();

            //Create a HashAlgorithmName object using the dropdown box selection.
            HashAlgorithmName hashAlgorithmName = HelperExtensions.StringToHashAlgorithm(DCSignatureHashDropdown.SelectedItem.ToString());
            //Create a RSAWrapper object using the dropdown box selection and the HashAlgorithmName object.
            RSAWrapper rsaAlgorithm = new RSAWrapper(DCSignatureRsaDropdown.SelectedItem.ToString(), hashAlgorithmName);
            //Create a DigitalSignature object using the RSAWrapper object and the encrypted envelope data.
            DigitalSignature digitalSignature = new DigitalSignature(rsaAlgorithm, result.EncryptedDataKeyPair());

            //Create a signature for the encrypted envelope data.
            digitalSignature.CreateSignature();
            DCInputTextBlock.Text = "Certificate generated successfully!";
        }
Esempio n. 19
0
        //Authenticate the signature file.
        private void DSAuthenticateButton_Click(object sender, RoutedEventArgs e)
        {
            //Create a DigitalSignature object that will load all the necessary properties from saved files.
            DigitalSignature digitalSignature = new DigitalSignature(DSInputTextBox.Text, DSInputSignatureTextBox.Text, DSInputPublicKeyTextBox.Text);

            DSInputTextBlock.Text = digitalSignature.AuthenticateSignature() ? "Signature valid!" : "Signature invalid!";
        }
Esempio n. 20
0
        public void Share(string filePath,
                          string name,
                          IEnumerable <string> keywords,
                          string comment,
                          DigitalSignature digitalSignature,
                          int priority)
        {
            if (_disposed)
            {
                throw new ObjectDisposedException(this.GetType().FullName);
            }
            if (!_isLoaded)
            {
                throw new AmoebaManagerException("AmoebaManager is not loaded.");
            }

            lock (this.ThisLock)
            {
                _uploadManager.Share(filePath,
                                     name,
                                     keywords,
                                     comment,
                                     digitalSignature,
                                     priority);
            }
        }
Esempio n. 21
0
        public void HashAlgorithmTests(int keySize, string hashAlgorithm)
        {
            var ds = new DigitalSignature(keySize, hashAlgorithm);

            ds.AssignNewKey();

            byte[] hash;
            switch (hashAlgorithm)
            {
            case "SHA1":
                hash = Hash.Create(HashType.SHA1, "Hello world", string.Empty);
                break;

            case "SHA256":
                hash = Hash.Create(HashType.SHA256, "Hello world", string.Empty);
                break;

            case "SHA384":
                hash = Hash.Create(HashType.SHA384, "Hello world", string.Empty);
                break;

            case "SHA512":
                hash = Hash.Create(HashType.SHA512, "Hello world", string.Empty);
                break;

            default:
                throw new ArgumentException("hashAlgorithm");
            }
            var signature = ds.SignData(hash);
            var result    = ds.VerifySignature(hash, signature);

            Assert.IsTrue(result);
        }
        public void MulticastUpload(Tag tag,
            Message message,

            int miningLimit,
            TimeSpan miningTime,
            DigitalSignature digitalSignature)
        {
            if (tag == null) throw new ArgumentNullException(nameof(tag));
            if (message == null) throw new ArgumentNullException(nameof(message));
            if (digitalSignature == null) throw new ArgumentNullException(nameof(digitalSignature));

            lock (_thisLock)
            {
                var item = new BackgroundUploadItem();

                item.State = BackgroundUploadState.Encoding;
                item.Tag = tag;
                item.Message = message;
                item.Scheme = "Multicast";
                item.Type = "Message";
                item.CreationTime = DateTime.UtcNow;
                item.Depth = 1;
                item.BlockLength = 1024 * 1024 * 1;
                item.CorrectionAlgorithm = CorrectionAlgorithm.ReedSolomon8;
                item.HashAlgorithm = HashAlgorithm.Sha256;
                item.MiningLimit = miningLimit;
                item.MiningTime = miningTime;
                item.DigitalSignature = digitalSignature;

                _settings.UploadItems.Add(item);
            }
        }
Esempio n. 23
0
    private DigitalSignature method_1(Interface9 A_0, bool A_1)
    {
        int num = 1;

        this.digitalSignature_0 = new DigitalSignature(DigitalSignatureType.XmlDsig);
        this.digitalSignature_0.SignedXmlResult = A_1;
        while (this.class393_0.method_9(BookmarkStart.b("琦䀨䰪䌬丮䔰䘲䜴制", num)))
        {
            string str = this.class393_0.method_1();
            if (str != null)
            {
                if (str != BookmarkStart.b("琦䀨䰪䌬䨮唰稲嬴儶嘸", num))
                {
                    if (!(str == BookmarkStart.b("氦䰨刪搬䄮地尲", num)))
                    {
                        if (!(str == BookmarkStart.b("栦䬨䄪䠬䰮䔰", num)))
                        {
                            goto Label_0084;
                        }
                        this.method_4();
                    }
                    else
                    {
                        this.method_2();
                    }
                }
                else
                {
                    this.method_7();
                }
                continue;
            }
Label_0084:
            this.method_15();
        }
        bool flag = A_1;
        SHA1 sha  = new SHA1CryptoServiceProvider();

        foreach (Class731 class2 in this.digitalSignature_0.References)
        {
            if (class2.method_6())
            {
                Stream stream = A_0.imethod_0(class2);
                foreach (Class557 class3 in class2.method_5())
                {
                    stream = class3.method_0(stream);
                }
                stream.Position = 0L;
                bool flag2 = Convert.ToBase64String(sha.ComputeHash(stream)) == class2.method_3();
                class2.method_8(flag2);
                flag &= flag2;
            }
            else
            {
                class2.method_8(A_1);
            }
        }
        this.digitalSignature_0.method_2(flag);
        return(this.digitalSignature_0);
    }
        public async Task <IActionResult> Update(int id, [FromBody] CreateUpdateDigitalSignature update)
        {
            if (!ModelState.IsValid)
            {
                return(new BadRequestObjectResult(new ErrorsResponse(ModelState)));
            }

            var username  = User.FindFirst(c => c.Type == JwtRegisteredClaimNames.Sub).Value;
            var signature = new DigitalSignature
            {
                Id       = id,
                Title    = update.title,
                UserName = update.userName,
                FileName = update.fileName,
                imgData  = update.imgData
            };

            try {
                await Task.Run(() => _context.SaveChanges(() => _signatures.Update(signature)));

                return(Ok());
            }
            catch (NotFoundException)
            {
                return(NotFound());
            }
        }
Esempio n. 25
0
        public async Task <ActionResult <string> > Call([FromBody] ApiRequest request)
        {
            var requestMessage = new HttpRequestMessage(HttpMethod.Post, "v1/test");

            requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _authProfile.ApiToken);

            // It is important to sign exactly same payload that is going to be send in the http request
            // Conversion from object to JSON in different places may result in different strings and request will fail digital signature validation
            var requestAsString = JsonSerializer.Serialize(request);

            requestMessage.Content = new StringContent(requestAsString, Encoding.UTF8, "application/json");
            requestMessage.Headers.Add("DigitalSignature", DigitalSignature.Generate(requestAsString, _authProfile.ClientPrivateKey));

            // X-Request-Id - unique string that identifies the request. Do not reuse the same in 24 hour period.
            // If your request result in server error, use the same X-Request-Id for retries
            requestMessage.Headers.Add("X-Request-Id", Guid.NewGuid().ToString("N"));

            using var client = new HttpClient { BaseAddress = new Uri(_authProfile.ApiUrl) };
            var response = await client.SendAsync(requestMessage);

            // You should save X-Correlation-Id for future reference
            // If you have any questions about your request our support will ask you to provide X-Request-Id and X-Correlation-Id
            response.Headers.TryGetValues("X-Correlation-Id", out var headers);
            var correlationId = headers?.First();
            var body          = await response.Content.ReadAsStringAsync();

            return($"Body: {body}, correlation id: {correlationId}");
        }
        public static void Run()
        {
            // ExStart:AssignAndValidateDigitalSignatures
            // The path to the documents directory.
            string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            // dsc is signature collection contains one or more signature needed to sign
            DigitalSignatureCollection dsc = new DigitalSignatureCollection();

            // Cert must contain private key, it can be contructed from cert file or windows certificate collection. aa is password of cert
            X509Certificate2 cert = new X509Certificate2(dataDir + "mykey2.pfx", "aa");
            DigitalSignature ds = new DigitalSignature(cert, "test for sign", DateTime.Now);
            dsc.Add(ds);
            Workbook wb = new Workbook();

            // wb.SetDigitalSignature signs all signatures in dsc
            wb.SetDigitalSignature(dsc);
            wb.Save(dataDir + @"newfile_out.xlsx");

            // open the file
            wb = new Workbook(dataDir + @"newfile_out.xlsx");
            System.Console.WriteLine(wb.IsDigitallySigned);

            // Get digitalSignature collection from workbook
            dsc = wb.GetDigitalSignature();
            foreach (DigitalSignature dst in dsc)
            {
                System.Console.WriteLine(dst.Comments); //test for sign -OK
                System.Console.WriteLine(dst.SignTime); //11/25/2010 1:22:01 PM -OK
                System.Console.WriteLine(dst.IsValid); //True -OK
            }
            // ExEnd:AssignAndValidateDigitalSignatures
        }
Esempio n. 27
0
        internal virtual DigitalSignature CreateDigitalSignature()
        {
            // TODO: Instantiate an appropriate concrete class.
            DigitalSignature target = null;

            return(target);
        }
Esempio n. 28
0
        static void Main(string[] args)
        {
            // 公開鍵と秘密鍵を自動生成
            var ds = DigitalSignature.Generate();

            // 送金データを作成
            var txA = Encoding.UTF8.GetBytes("アドレスAからアドレスBに50枚送ります");

            // 送金データの署名を作成(秘密鍵で署名)
            var signA = ds.Sign(txA);

            // --- 誰かが受け取ったとする ---

            // 検証用のデジタル署名インスタンスを作成
            var ds2 = DigitalSignature.FromKey(ds.PublicKey);

            // 送金データの検証(公開鍵で検証)
            var res = ds2.Verify(txA, signA);

            Console.WriteLine($"検証結果: {res}"); // true

            // ためしに改ざん送金データを作成
            var txZ = Encoding.UTF8.GetBytes("アドレスAからアドレスZに100枚送ります");

            // これは失敗
            res = ds2.Verify(txZ, signA);
            Console.WriteLine($"検証結果: {res}"); // false
            Console.ReadLine();
        }
Esempio n. 29
0
 public override void CreateCertificate(DigitalSignature digitalSignature)
 {
     lock (this.ThisLock)
     {
         base.CreateCertificate(digitalSignature);
     }
 }
Esempio n. 30
0
        public void SaveAndLoadKeys()
        {
            var ds = new DigitalSignature();

            ds.AssignNewKey();

            ds.SavePublicKey(out var exponent1, out var modulus1);
            ds.SavePrivateKey(out var exponent2, out var modulus2, out var p, out var q, out var dp, out var dq, out var inverseQ, out var d);

            var signature1 = ds.SignData(_hash);
            var result1    = ds.VerifySignature(_hash, signature1);

            Assert.IsTrue(result1);


            var sut = new DigitalSignature();

            sut.LoadPublicKey(exponent1, modulus1);
            sut.LoadPrivateKey(exponent2, modulus2, p, q, dp, dq, inverseQ, d);

            var signature2 = ds.SignData(_hash);
            var result2    = ds.VerifySignature(_hash, signature2);

            Assert.IsTrue(result2);

            Assert.AreEqual(signature1, signature2);
        }
Esempio n. 31
0
        public static void Run()
        {
            //Source directory
            string sourceDir = RunExamples.Get_SourceDirectory();

            //Output directory
            string outputDir = RunExamples.Get_OutputDirectory();

            // Create workbook object from excel file
            Workbook wb = new Workbook(sourceDir + "sampleDigitallySignVbaProjectWithCertificate.xlsm");

            // Please use System.Security.Cryptography.X509Certificates namespace for X509Certificate2 class
            X509Certificate2 cert = new X509Certificate2(sourceDir + "sampleDigitallySignVbaProjectWithCertificate.pfx", "1234");

            // Create a Digital Signature
            DigitalSignature ds = new DigitalSignature(cert, "Signing Digital Signature using Aspose.Cells", DateTime.Now);

            // Sign VBA Code Project with Digital Signature
            wb.VbaProject.Sign(ds);

            // Save the workbook
            wb.Save(outputDir + "outputDigitallySignVbaProjectWithCertificate.xlsm");

            Console.WriteLine("DigitallySignVbaProjectWithCertificate executed successfully.");
        }
Esempio n. 32
0
        public Profile UploadProfile(
            int cost,
            ExchangePublicKey exchangePublicKey,
            IEnumerable <string> trustSignatures,
            IEnumerable <string> deleteSignatures,
            IEnumerable <Wiki> wikis,
            IEnumerable <Chat> chats,

            DigitalSignature digitalSignature)
        {
            lock (this.ThisLock)
            {
                var uploadItem = new UploadItem();
                uploadItem.Type             = "Profile";
                uploadItem.Profile          = new Profile(DateTime.UtcNow, cost, exchangePublicKey, trustSignatures, deleteSignatures, wikis, chats, digitalSignature);
                uploadItem.DigitalSignature = digitalSignature;

                _settings.UploadItems.RemoveAll((target) =>
                {
                    return(target.Type == uploadItem.Type &&
                           target.DigitalSignature == digitalSignature);
                });

                _settings.UploadItems.Add(uploadItem);

                return(uploadItem.Profile);
            }
        }
Esempio n. 33
0
        public SecureConnection(SecureConnectionVersion version, SecureConnectionType type, Connection connection, DigitalSignature digitalSignature, BufferManager bufferManager)
        {
            _type = type;
            _connection = connection;
            _digitalSignature = digitalSignature;
            _bufferManager = bufferManager;

            _myVersion = version;
        }
        public void Test_DigitalSigunature()
        {
            foreach (var a in new DigitalSignatureAlgorithm[] { DigitalSignatureAlgorithm.Rsa2048_Sha256, DigitalSignatureAlgorithm.EcDsaP521_Sha256 })
            {
                DigitalSignature sigunature = new DigitalSignature("123", a);

                using (var streamSigunature = DigitalSignatureConverter.ToDigitalSignatureStream(sigunature))
                {
                    var sigunature2 = DigitalSignatureConverter.FromDigitalSignatureStream(streamSigunature);

                    Assert.AreEqual(sigunature, sigunature2, "AmoebaConverter #4");
                }
            }
        }
        public void Test_AmoebaConverter_Box()
        {
            var box = new Box();
            box.Name = "Box";
            box.Comment = "Comment";
            box.CreationTime = DateTime.Now;
            box.Boxes.Add(new Box() { Name = "Box" });
            box.Seeds.Add(new Seed() { Name = "Seed" });

            DigitalSignature digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.EcDsaP521_Sha256);
            box.CreateCertificate(digitalSignature);

            Box box2;

            using (var streamBox = AmoebaConverter.ToBoxStream(box))
            {
                box2 = AmoebaConverter.FromBoxStream(streamBox);
            }

            Assert.AreEqual(box, box2, "AmoebaConverter #3");
        }
        public static void Run()
        {
            // ExStart:1
            // The path to the documents directory.
            string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

            // Create workbook object from excel file
            Workbook wb = new Workbook(dataDir + "Book1.xlsm");

            // Please use System.Security.Cryptography.X509Certificates namespace for X509Certificate2 class
            X509Certificate2 cert = new X509Certificate2(dataDir + "SampleCert.pfx", "1234");

            // Create a Digital Signature
            DigitalSignature ds = new DigitalSignature(cert, "Signing Digital Signature using Aspose.Cells", DateTime.Now);

            // Sign VBA Code Project with Digital Signature
            wb.VbaProject.Sign(ds);

            // Save the workbook
            wb.Save(dataDir + "DigitallySigned_out.xlsm");
            // ExEnd:1
        }
Esempio n. 37
0
        public void Upload(string filePath,
            string name,
            IEnumerable<string> keywords,
            DigitalSignature digitalSignature,
            int priority)
        {
            lock (_thisLock)
            {
                var item = new UploadItem();

                item.State = UploadState.ComputeHash;
                item.Type = UploadType.Upload;
                item.Name = name;
                item.Keywords.AddRange(keywords);
                item.CreationTime = DateTime.UtcNow;
                item.Depth = 1;
                item.FilePath = filePath;
                item.CompressionAlgorithm = CompressionAlgorithm.Xz;
                item.CryptoAlgorithm = CryptoAlgorithm.Aes256;
                item.CorrectionAlgorithm = CorrectionAlgorithm.ReedSolomon8;
                item.HashAlgorithm = HashAlgorithm.Sha256;
                item.DigitalSignature = digitalSignature;
                item.BlockLength = 1024 * 1024 * 1;
                item.Priority = priority;

                _settings.UploadItems.Add(item);
                _idManager.Add(item);
            }
        }
Esempio n. 38
0
        public void Share(string filePath,
            string name,
            IEnumerable<string> keywords,
            DigitalSignature digitalSignature,
            int priority)
        {
            lock (_thisLock)
            {
                if (_settings.UploadItems
                    .Where(n => n.Type == UploadType.Share)
                    .Any(n => n.FilePath == filePath)) return;

                if (_cacheManager.Contains(filePath)) return;

                var item = new UploadItem();

                item.State = UploadState.ComputeHash;
                item.Type = UploadType.Share;
                item.Name = name;
                item.CreationTime = DateTime.UtcNow;
                item.Keywords.AddRange(keywords);
                item.Depth = 1;
                item.FilePath = filePath;
                item.CompressionAlgorithm = CompressionAlgorithm.Xz;
                item.CryptoAlgorithm = CryptoAlgorithm.Aes256;
                item.CorrectionAlgorithm = CorrectionAlgorithm.ReedSolomon8;
                item.HashAlgorithm = HashAlgorithm.Sha256;
                item.DigitalSignature = digitalSignature;
                item.BlockLength = 1024 * 1024 * 1;
                item.Priority = priority;

                _settings.UploadItems.Add(item);

                int id = _idManager.Add(item);
                _shareIdLink.Add(filePath, id);
            }
        }
Esempio n. 39
0
        public void Share(string filePath,
            string name,
            IEnumerable<string> keywords,
            string comment,
            DigitalSignature digitalSignature,
            int priority)
        {
            lock (this.ThisLock)
            {
                UploadItem item = new UploadItem();

                item.State = UploadState.ComputeHash;
                item.Type = UploadType.Share;
                item.Rank = 1;
                item.FilePath = filePath;
                item.CompressionAlgorithm = CompressionAlgorithm.Xz;
                item.CryptoAlgorithm = CryptoAlgorithm.Aes256;
                item.CorrectionAlgorithm = CorrectionAlgorithm.ReedSolomon8;
                item.HashAlgorithm = HashAlgorithm.Sha256;
                item.DigitalSignature = digitalSignature;
                item.Seed = new Seed();
                item.Seed.Name = name;
                item.Seed.Keywords.AddRange(keywords);
                item.Seed.CreationTime = DateTime.UtcNow;
                item.Seed.Comment = comment;
                item.BlockLength = 1024 * 1024 * 1;
                item.Priority = priority;

                _settings.UploadItems.Add(item);
                _ids.Add(_id, item);

                List<int> idList = null;

                if (!_shareLink.TryGetValue(filePath, out idList))
                {
                    idList = new List<int>();
                    _shareLink[filePath] = idList;
                }

                idList.Add(_id);

                _id++;
            }
        }
 public static Stream ToDigitalSignatureStream(DigitalSignature item)
 {
     return Converter.ToDigitalSignatureStream(item);
 }
        public void Test_ConnectionManager()
        {
            for (int i = 0; i < 4; i++)
            {
                TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 60000));
                listener.Start();
                var listenerAcceptSocket = listener.BeginAcceptSocket(null, null);

                TcpClient client = new TcpClient();
                client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 60000));

                var server = listener.EndAcceptSocket(listenerAcceptSocket);
                listener.Stop();

                var tcpClient = new BaseConnection(new SocketCap(client.Client), null, Test_Library_Net_Outopos.MaxReceiveCount, _bufferManager);
                var tcpServer = new BaseConnection(new SocketCap(server), null, Test_Library_Net_Outopos.MaxReceiveCount, _bufferManager);

                List<ConnectionManager> connectionManagers = new List<ConnectionManager>();

                {
                    ConnectionManager serverConnectionManager;
                    ConnectionManager clientConnectionManager;

                    Node serverNode = null;
                    Node clientNode = null;

                    byte[] serverSessionId = null;
                    byte[] clientSessionId = null;

                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var uris = new string[] { "net.tcp://localhost:9000", "net.tcp://localhost:9001", "net.tcp://localhost:9002" };

                        serverNode = new Node(id, uris);
                    }

                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var uris = new string[] { "net.tcp://localhost:9000", "net.tcp://localhost:9001", "net.tcp://localhost:9002" };

                        clientNode = new Node(id, uris);
                    }

                    {
                        serverSessionId = new byte[32];
                        _random.NextBytes(serverSessionId);
                    }

                    {
                        clientSessionId = new byte[32];
                        _random.NextBytes(clientSessionId);
                    }

                    serverConnectionManager = new ConnectionManager(tcpServer, serverSessionId, serverNode, ConnectDirection.In, _bufferManager);
                    clientConnectionManager = new ConnectionManager(tcpClient, clientSessionId, clientNode, ConnectDirection.Out, _bufferManager);

                    Thread serverThread = new Thread(new ThreadStart(() =>
                    {
                        serverConnectionManager.Connect();
                    }));

                    Thread clientThread = new Thread(new ThreadStart(() =>
                    {
                        clientConnectionManager.Connect();
                    }));

                    serverThread.Start();
                    clientThread.Start();

                    serverThread.Join();
                    clientThread.Join();

                    Assert.IsTrue(CollectionUtilities.Equals(serverConnectionManager.SesstionId, clientSessionId), "ConnectionManager SessionId #1");
                    Assert.IsTrue(CollectionUtilities.Equals(clientConnectionManager.SesstionId, serverSessionId), "ConnectionManager SessionId #2");

                    Assert.AreEqual(serverConnectionManager.Node, clientNode, "ConnectionManager Node #1");
                    Assert.AreEqual(clientConnectionManager.Node, serverNode, "ConnectionManager Node #2");

                    connectionManagers.Add(serverConnectionManager);
                    connectionManagers.Add(clientConnectionManager);
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullNodesEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullNodesEvent += (object sender, PullNodesEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    List<Node> nodes = new List<Node>();

                    for (int j = 0; j < 32; j++)
                    {
                        Node node = null;

                        {
                            var id = new byte[32];
                            _random.NextBytes(id);
                            var uris = new string[] { "net.tcp://localhost:9000", "net.tcp://localhost:9001", "net.tcp://localhost:9002" };

                            node = new Node(id, uris);
                        }

                        nodes.Add(node);
                    }

                    senderConnection.PushNodes(nodes);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(nodes, item.Nodes), "ConnectionManager #1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBlocksLinkEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBlocksLinkEvent += (object sender, PullBlocksLinkEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var keys = new List<Key>();

                    for (int j = 0; j < 32; j++)
                    {
                        Key key = null;

                        {
                            var id = new byte[32];
                            _random.NextBytes(id);

                            key = new Key(id, HashAlgorithm.Sha256);
                        }

                        keys.Add(key);
                    }

                    senderConnection.PushBlocksLink(keys);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(keys, item.Keys), "ConnectionManager #2");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBlocksRequestEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBlocksRequestEvent += (object sender, PullBlocksRequestEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var keys = new List<Key>();

                    for (int j = 0; j < 32; j++)
                    {
                        Key key = null;

                        {
                            var id = new byte[32];
                            _random.NextBytes(id);

                            key = new Key(id, HashAlgorithm.Sha256);
                        }

                        keys.Add(key);
                    }

                    senderConnection.PushBlocksRequest(keys);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(keys, item.Keys), "ConnectionManager #3");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBlockEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBlockEvent += (object sender, PullBlockEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var buffer = _bufferManager.TakeBuffer(1024 * 1024 * 8);
                    var key = new Key(Sha256.ComputeHash(buffer), HashAlgorithm.Sha256);

                    senderConnection.PushBlock(key, new ArraySegment<byte>(buffer, 0, 1024 * 1024 * 4));

                    var item = queue.Dequeue();
                    Assert.AreEqual(key, item.Key, "ConnectionManager #4.1");
                    Assert.IsTrue(CollectionUtilities.Equals(buffer, 0, item.Value.Array, item.Value.Offset, 1024 * 1024 * 4), "ConnectionManager #4.2");

                    _bufferManager.ReturnBuffer(buffer);
                    _bufferManager.ReturnBuffer(item.Value.Array);
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBroadcastMetadatasRequestEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBroadcastMetadatasRequestEvent += (object sender, PullBroadcastMetadatasRequestEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.EcDsaP521_Sha256);

                    var signatures = new SignatureCollection();

                    for (int j = 0; j < 32; j++)
                    {
                        signatures.Add(digitalSignature.ToString());
                    }

                    senderConnection.PushBroadcastMetadatasRequest(signatures);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(signatures, item.Signatures), "ConnectionManager #5.1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBroadcastMetadatasEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBroadcastMetadatasEvent += (object sender, PullBroadcastMetadatasEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.EcDsaP521_Sha256);

                    var metadatas1 = new List<ProfileMetadata>();

                    for (int j = 0; j < 4; j++)
                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var key = new Key(id, HashAlgorithm.Sha256);
                        var metadata = new ProfileMetadata(DateTime.UtcNow, key, digitalSignature);

                        metadatas1.Add(metadata);
                    }

                    senderConnection.PushBroadcastMetadatas(metadatas1);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(metadatas1, item.ProfileMetadatas), "ConnectionManager #6.1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullUnicastMetadatasRequestEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullUnicastMetadatasRequestEvent += (object sender, PullUnicastMetadatasRequestEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.EcDsaP521_Sha256);

                    var signatures = new SignatureCollection();

                    for (int j = 0; j < 32; j++)
                    {
                        signatures.Add(digitalSignature.ToString());
                    }

                    senderConnection.PushUnicastMetadatasRequest(signatures);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(signatures, item.Signatures), "ConnectionManager #7.1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullUnicastMetadatasEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullUnicastMetadatasEvent += (object sender, PullUnicastMetadatasEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.EcDsaP521_Sha256);

                    var metadatas1 = new List<SignatureMessageMetadata>();

                    for (int j = 0; j < 4; j++)
                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var key = new Key(id, HashAlgorithm.Sha256);
                        var miner = new Miner(CashAlgorithm.Version1, -1, TimeSpan.Zero);
                        var metadata = new SignatureMessageMetadata(digitalSignature.ToString(), DateTime.UtcNow, key, miner, digitalSignature);

                        metadatas1.Add(metadata);
                    }

                    senderConnection.PushUnicastMetadatas(metadatas1);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(metadatas1, item.SignatureMessageMetadatas), "ConnectionManager #8.1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullMulticastMetadatasRequestEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullMulticastMetadatasRequestEvent += (object sender, PullMulticastMetadatasRequestEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var wikis = new WikiCollection();
                    var chats = new ChatCollection();

                    for (int j = 0; j < 32; j++)
                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var key = new Key(id, HashAlgorithm.Sha256);

                        wikis.Add(new Wiki(RandomString.GetValue(256), id));
                    }

                    for (int j = 0; j < 32; j++)
                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var key = new Key(id, HashAlgorithm.Sha256);

                        chats.Add(new Chat(RandomString.GetValue(256), id));
                    }

                    senderConnection.PushMulticastMetadatasRequest(wikis, chats);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(wikis, item.Wikis), "ConnectionManager #9.1");
                    Assert.IsTrue(CollectionUtilities.Equals(chats, item.Chats), "ConnectionManager #9.2");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullMulticastMetadatasEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullMulticastMetadatasEvent += (object sender, PullMulticastMetadatasEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.EcDsaP521_Sha256);

                    var metadatas1 = new List<WikiDocumentMetadata>();
                    var metadatas2 = new List<ChatTopicMetadata>();
                    var metadatas3 = new List<ChatMessageMetadata>();

                    for (int j = 0; j < 4; j++)
                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var key = new Key(id, HashAlgorithm.Sha256);
                        var tag = new Wiki("oooo", new byte[32]);
                        var miner = new Miner(CashAlgorithm.Version1, -1, TimeSpan.Zero);
                        var metadata = new WikiDocumentMetadata(tag, DateTime.UtcNow, key, miner, digitalSignature);

                        metadatas1.Add(metadata);
                    }

                    for (int j = 0; j < 4; j++)
                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var key = new Key(id, HashAlgorithm.Sha256);
                        var tag = new Chat("oooo", new byte[32]);
                        var miner = new Miner(CashAlgorithm.Version1, -1, TimeSpan.Zero);
                        var metadata = new ChatTopicMetadata(tag, DateTime.UtcNow, key, miner, digitalSignature);

                        metadatas2.Add(metadata);
                    }

                    for (int j = 0; j < 4; j++)
                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var key = new Key(id, HashAlgorithm.Sha256);
                        var tag = new Chat("oooo", new byte[32]);
                        var miner = new Miner(CashAlgorithm.Version1, -1, TimeSpan.Zero);
                        var metadata = new ChatMessageMetadata(tag, DateTime.UtcNow, key, miner, digitalSignature);

                        metadatas3.Add(metadata);
                    }

                    senderConnection.PushMulticastMetadatas(metadatas1, metadatas2, metadatas3);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(metadatas1, item.WikiDocumentMetadatas), "ConnectionManager #10.1");
                    Assert.IsTrue(CollectionUtilities.Equals(metadatas2, item.ChatTopicMetadatas), "ConnectionManager #10.2");
                    Assert.IsTrue(CollectionUtilities.Equals(metadatas3, item.ChatMessageMetadatas), "ConnectionManager #10.3");
                }

                foreach (var connectionManager in connectionManagers)
                {
                    connectionManager.Dispose();
                }

                client.Close();
                server.Close();
            }
        }
        public void Test_AmoebaConverter_Seed()
        {
            var seed = new Seed();
            seed.Name = "aaaa.zip";
            seed.Keywords.AddRange(new KeywordCollection
            {
                "bbbb",
                "cccc",
                "dddd",
            });
            seed.CreationTime = DateTime.Now;
            seed.Length = 10000;
            seed.Comment = "eeee";
            seed.Rank = 1;
            seed.Key = new Key(new byte[32], HashAlgorithm.Sha256);
            seed.CompressionAlgorithm = CompressionAlgorithm.Xz;
            seed.CryptoAlgorithm = CryptoAlgorithm.Aes256;
            seed.CryptoKey = new byte[32 + 32];

            DigitalSignature digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.Rsa2048_Sha256);
            seed.CreateCertificate(digitalSignature);

            var stringSeed = AmoebaConverter.ToSeedString(seed);
            var seed2 = AmoebaConverter.FromSeedString(stringSeed);

            Assert.AreEqual(seed, seed2, "AmoebaConverter #2");
        }
        public void Test_Seed()
        {
            foreach (var a in new DigitalSignatureAlgorithm[] { DigitalSignatureAlgorithm.Rsa2048_Sha256, DigitalSignatureAlgorithm.EcDsaP521_Sha256 })
            {
                var seed = new Seed();
                seed.Name = "aaaa.zip";
                seed.Keywords.AddRange(new KeywordCollection
                {
                    "bbbb",
                    "cccc",
                    "dddd",
                });
                seed.CreationTime = DateTime.Now;
                seed.Length = 10000;
                seed.Comment = "eeee";
                seed.Rank = 1;
                seed.Key = new Key(new byte[32], HashAlgorithm.Sha256);
                seed.CompressionAlgorithm = CompressionAlgorithm.Xz;
                seed.CryptoAlgorithm = CryptoAlgorithm.Aes256;
                seed.CryptoKey = new byte[32 + 32];

                DigitalSignature digitalSignature = new DigitalSignature("123", a);
                seed.CreateCertificate(digitalSignature);

                var seed2 = seed.Clone();

                Assert.AreEqual(seed, seed2, "Seed #1");

                Seed seed3;

                using (var seedStream = seed.Export(_bufferManager))
                {
                    seed3 = Seed.Import(seedStream, _bufferManager);
                }

                Assert.AreEqual(seed, seed3, "Seed #2");
                Assert.IsTrue(seed3.VerifyCertificate(), "Seed #3");
            }
        }
        public void Test_Link()
        {
            DigitalSignature digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.EcDsaP521_Sha256);

            var link = new Link();
            link.TrustSignatures.Add(digitalSignature.ToString());
            link.TrustSignatures.Add(digitalSignature.ToString());
            link.TrustSignatures.Add(digitalSignature.ToString());

            var link2 = link.Clone();

            Assert.AreEqual(link, link2, "Link #1");

            Link link3;

            using (var linkStream = link.Export(_bufferManager))
            {
                link3 = Link.Import(linkStream, _bufferManager);
            }

            Assert.AreEqual(link, link3, "Link #2");
        }
        public void Test_ConnectionManager()
        {
            for (int i = 0; i < 4; i++)
            {
                TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 60000));
                listener.Start();
                var listenerAcceptSocket = listener.BeginAcceptSocket(null, null);

                TcpClient client = new TcpClient();
                client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 60000));

                var server = listener.EndAcceptSocket(listenerAcceptSocket);
                listener.Stop();

                var tcpClient = new BaseConnection(new SocketCap(client.Client), null, Test_Library_Net_Amoeba.MaxReceiveCount, _bufferManager);
                var tcpServer = new BaseConnection(new SocketCap(server), null, Test_Library_Net_Amoeba.MaxReceiveCount, _bufferManager);

                List<ConnectionManager> connectionManagers = new List<ConnectionManager>();

                {
                    ConnectionManager serverConnectionManager;
                    ConnectionManager clientConnectionManager;

                    Node serverNode = null;
                    Node clientNode = null;

                    byte[] serverSessionId = null;
                    byte[] clientSessionId = null;

                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var uris = new string[] { "net.tcp://localhost:9000", "net.tcp://localhost:9001", "net.tcp://localhost:9002" };

                        serverNode = new Node(id, uris);
                    }

                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var uris = new string[] { "net.tcp://localhost:9000", "net.tcp://localhost:9001", "net.tcp://localhost:9002" };

                        clientNode = new Node(id, uris);
                    }

                    {
                        serverSessionId = new byte[32];
                        _random.NextBytes(serverSessionId);
                    }

                    {
                        clientSessionId = new byte[32];
                        _random.NextBytes(clientSessionId);
                    }

                    serverConnectionManager = new ConnectionManager(tcpServer, serverSessionId, serverNode, ConnectDirection.In, _bufferManager);
                    clientConnectionManager = new ConnectionManager(tcpClient, clientSessionId, clientNode, ConnectDirection.Out, _bufferManager);

                    Thread serverThread = new Thread(new ThreadStart(() =>
                    {
                        serverConnectionManager.Connect();
                    }));

                    Thread clientThread = new Thread(new ThreadStart(() =>
                    {
                        clientConnectionManager.Connect();
                    }));

                    serverThread.Start();
                    clientThread.Start();

                    serverThread.Join();
                    clientThread.Join();

                    Assert.IsTrue(CollectionUtilities.Equals(serverConnectionManager.SesstionId, clientSessionId), "ConnectionManager SessionId #1");
                    Assert.IsTrue(CollectionUtilities.Equals(clientConnectionManager.SesstionId, serverSessionId), "ConnectionManager SessionId #2");

                    Assert.AreEqual(serverConnectionManager.Node, clientNode, "ConnectionManager Node #1");
                    Assert.AreEqual(clientConnectionManager.Node, serverNode, "ConnectionManager Node #2");

                    connectionManagers.Add(serverConnectionManager);
                    connectionManagers.Add(clientConnectionManager);
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullNodesEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullNodesEvent += (object sender, PullNodesEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    List<Node> nodes = new List<Node>();

                    for (int j = 0; j < 32; j++)
                    {
                        Node node = null;

                        {
                            var id = new byte[32];
                            _random.NextBytes(id);
                            var uris = new string[] { "net.tcp://localhost:9000", "net.tcp://localhost:9001", "net.tcp://localhost:9002" };

                            node = new Node(id, uris);
                        }

                        nodes.Add(node);
                    }

                    senderConnection.PushNodes(nodes);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(nodes, item.Nodes), "ConnectionManager #1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBlocksLinkEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBlocksLinkEvent += (object sender, PullBlocksLinkEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var keys = new List<Key>();

                    for (int j = 0; j < 32; j++)
                    {
                        Key key = null;

                        {
                            var id = new byte[32];
                            _random.NextBytes(id);

                            key = new Key(id, HashAlgorithm.Sha256);
                        }

                        keys.Add(key);
                    }

                    senderConnection.PushBlocksLink(keys);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(keys, item.Keys), "ConnectionManager #2");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBlocksRequestEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBlocksRequestEvent += (object sender, PullBlocksRequestEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var keys = new List<Key>();

                    for (int j = 0; j < 32; j++)
                    {
                        Key key = null;

                        {
                            var id = new byte[32];
                            _random.NextBytes(id);

                            key = new Key(id, HashAlgorithm.Sha256);
                        }

                        keys.Add(key);
                    }

                    senderConnection.PushBlocksRequest(keys);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(keys, item.Keys), "ConnectionManager #3");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBlockEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBlockEvent += (object sender, PullBlockEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var buffer = _bufferManager.TakeBuffer(1024 * 1024 * 8);
                    var key = new Key(Sha256.ComputeHash(buffer), HashAlgorithm.Sha256);

                    senderConnection.PushBlock(key, new ArraySegment<byte>(buffer, 0, 1024 * 1024 * 4));

                    var item = queue.Dequeue();
                    Assert.AreEqual(key, item.Key, "ConnectionManager #4.1");
                    Assert.IsTrue(CollectionUtilities.Equals(buffer, 0, item.Value.Array, item.Value.Offset, 1024 * 1024 * 4), "ConnectionManager #4.2");

                    _bufferManager.ReturnBuffer(buffer);
                    _bufferManager.ReturnBuffer(item.Value.Array);
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullSeedsRequestEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullSeedsRequestEvent += (object sender, PullSeedsRequestEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.EcDsaP521_Sha256);

                    var signatures = new SignatureCollection();

                    for (int j = 0; j < 32; j++)
                    {
                        signatures.Add(digitalSignature.ToString());
                    }

                    senderConnection.PushSeedsRequest(signatures);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(signatures, item.Signatures), "ConnectionManager #5");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullSeedsEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullSeedsEvent += (object sender, PullSeedsEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    List<Seed> seeds = new List<Seed>();

                    for (int j = 0; j < 32; j++)
                    {
                        var seed = new Seed();
                        seed.Name = "aaaa.zip";
                        seed.Keywords.AddRange(new KeywordCollection
                        {
                            "bbbb",
                            "cccc",
                            "dddd",
                        });
                        seed.CreationTime = DateTime.Now;
                        seed.Length = 10000;
                        seed.Comment = "eeee";
                        seed.Rank = 1;
                        seed.Key = new Key(new byte[32], HashAlgorithm.Sha256);
                        seed.CompressionAlgorithm = CompressionAlgorithm.Xz;
                        seed.CryptoAlgorithm = CryptoAlgorithm.Aes256;
                        seed.CryptoKey = new byte[32 + 32];

                        seeds.Add(seed);
                    }

                    senderConnection.PushSeeds(seeds);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtilities.Equals(seeds, item.Seeds), "ConnectionManager #6");
                }

                foreach (var connectionManager in connectionManagers)
                {
                    connectionManager.Dispose();
                }

                client.Close();
                server.Close();
            }
        }
        public void Test_Box()
        {
            var box = new Box();
            box.Name = "Box";
            box.Comment = "Comment";
            box.CreationTime = DateTime.Now;
            box.Seeds.Add(new Seed() { Name = "Seed" });
            box.Boxes.Add(new Box() { Name = "Box" });

            DigitalSignature digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.EcDsaP521_Sha256);
            box.CreateCertificate(digitalSignature);

            var box2 = box.Clone();

            Assert.AreEqual(box, box2, "Box #1");

            Box box3;

            using (var boxStream = box.Export(_bufferManager))
            {
                box3 = Box.Import(boxStream, _bufferManager);
            }

            Assert.AreEqual(box, box3, "Box #2");
            Assert.IsTrue(box3.VerifyCertificate(), "Box #3");

            {
                var parentBox = new Box();
                var childBox = parentBox;

                for (int i = 0; i < 256; i++)
                {
                    var tempBox = new Box();
                    childBox.Boxes.Add(tempBox);
                    childBox = tempBox;
                }

                using (var binaryBox = parentBox.Export(_bufferManager))
                {

                }
            }

            {
                var parentBox = new Box();
                var childBox = parentBox;

                for (int i = 0; i < 256 + 1; i++)
                {
                    var tempBox = new Box();
                    childBox.Boxes.Add(tempBox);
                    childBox = tempBox;
                }

                Assert.Throws<ArgumentException>(() =>
                {
                    using (var binaryBox = parentBox.Export(_bufferManager))
                    {

                    }
                });
            }

            {
                var parentBox = new T_Box();
                var childBox = parentBox;

                for (int i = 0; i < 256; i++)
                {
                    var tempBox = new T_Box();
                    childBox.D_Boxes.Add(tempBox);
                    childBox = tempBox;
                }

                using (var binaryBox = parentBox.Export(_bufferManager))
                {
                    Box.Import(binaryBox, _bufferManager);
                }
            }

            {
                var parentBox = new T_Box();
                var childBox = parentBox;

                for (int i = 0; i < 256 + 1; i++)
                {
                    var tempBox = new T_Box();
                    childBox.D_Boxes.Add(tempBox);
                    childBox = tempBox;
                }

                Assert.Throws<ArgumentException>(() =>
                {
                    using (var binaryBox = parentBox.Export(_bufferManager))
                    {
                        Box.Import(binaryBox, _bufferManager);
                    }
                });
            }
        }
 public DigitalSignatureComboBoxItem(DigitalSignature digitalSignature)
 {
     this.Value = digitalSignature;
 }
        private void _okButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;

            _digitalSignature = _signatureComboBox.SelectedItem as DigitalSignature;
        }
        public void Test_Metadata()
        {
            foreach (var a in new DigitalSignatureAlgorithm[] { DigitalSignatureAlgorithm.Rsa2048_Sha256, DigitalSignatureAlgorithm.EcDsaP521_Sha256 })
            {
                var id = new byte[32];
                _random.NextBytes(id);
                var key = new Key(id, HashAlgorithm.Sha256);
                var tag = new Chat("oooo", new byte[32]);
                var miner = new Miner(CashAlgorithm.Version1, -1, TimeSpan.Zero);
                var digitalSignature = new DigitalSignature("123", a);
                var metadata = new ChatMessageMetadata(tag, DateTime.UtcNow, key, miner, digitalSignature);

                ChatMessageMetadata metadata2;
                {
                    var ds = new DataContractSerializer(typeof(ChatMessageMetadata));

                    using (BufferStream stream = new BufferStream(BufferManager.Instance))
                    {
                        using (WrapperStream wrapperStream = new WrapperStream(stream, true))
                        using (XmlDictionaryWriter xmlDictionaryWriter = XmlDictionaryWriter.CreateBinaryWriter(wrapperStream))
                        {
                            ds.WriteObject(xmlDictionaryWriter, metadata);
                        }

                        stream.Position = 0;

                        using (XmlDictionaryReader xmlDictionaryReader = XmlDictionaryReader.CreateBinaryReader(stream, XmlDictionaryReaderQuotas.Max))
                        {
                            metadata2 = (ChatMessageMetadata)ds.ReadObject(xmlDictionaryReader);
                        }
                    }
                }

                Assert.AreEqual(metadata, metadata2, "Metadata #1");

                ChatMessageMetadata metadata3;

                using (var metadataStream = metadata.Export(_bufferManager))
                {
                    metadata3 = ChatMessageMetadata.Import(metadataStream, _bufferManager);
                }

                Assert.AreEqual(metadata, metadata3, "Metadata #2");
                Assert.IsTrue(metadata3.VerifyCertificate(), "Metadata #3");
            }
        }
Esempio n. 50
0
        public void Upload(string filePath,
            string name,
            IEnumerable<string> keywords,
            DigitalSignature digitalSignature,
            int priority)
        {
            this.Check();

            lock (this.ThisLock)
            {
                _uploadManager.Upload(filePath,
                    name,
                    keywords,
                    digitalSignature,
                    priority);
            }
        }
Esempio n. 51
0
        public static string GetSignature(DigitalSignature digitalSignature)
        {
            if (digitalSignature == null || digitalSignature.Nickname == null || digitalSignature.PublicKey == null) return null;

            try
            {
                if (digitalSignature.DigitalSignatureAlgorithm == DigitalSignatureAlgorithm.EcDsaP521_Sha256
                    || digitalSignature.DigitalSignatureAlgorithm == DigitalSignatureAlgorithm.Rsa2048_Sha256)
                {
                    using (BufferStream bufferStream = new BufferStream(_bufferManager))
                    {
                        Signature.WriteString(bufferStream, digitalSignature.Nickname);
                        bufferStream.Write(digitalSignature.PublicKey, 0, digitalSignature.PublicKey.Length);
                        bufferStream.Seek(0, SeekOrigin.Begin);

                        var signature = digitalSignature.Nickname + "@" + NetworkConverter.ToBase64UrlString(Sha256.ComputeHash(bufferStream));
                        return _signatureCache.GetValue(signature, digitalSignature);
                    }
                }

                return null;
            }
            catch (Exception)
            {
                return null;
            }
        }
Esempio n. 52
0
        public void MulticastUpload(Tag tag,
            Message message,

            int miningLimit,
            TimeSpan miningTime,
            DigitalSignature digitalSignature)
        {
            this.Check();

            lock (this.ThisLock)
            {
                _backgroundUploadManager.MulticastUpload(tag, message, miningLimit, miningTime, digitalSignature);
            }
        }
        private void _okButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;

            var digitalSignatureComboBoxItem = _signatureComboBox.SelectedItem as DigitalSignatureComboBoxItem;
            DigitalSignature digitalSignature = digitalSignatureComboBoxItem == null ? null : digitalSignatureComboBoxItem.Value;

            _digitalSignature = digitalSignature;
        }
Esempio n. 54
0
        public void Upload(Profile profile, DigitalSignature digitalSignature)
        {
            this.Check();

            lock (this.ThisLock)
            {
                _backgroundUploadManager.Upload(profile, digitalSignature);
            }
        }
Esempio n. 55
0
        public void UnicastUpload(string signature,
            Message message,

            ExchangePublicKey exchangePublicKey,
            DigitalSignature digitalSignature)
        {
            this.Check();

            lock (this.ThisLock)
            {
                _backgroundUploadManager.UnicastUpload(signature, message, exchangePublicKey, digitalSignature);
            }
        }
        public void Test_ConnectionManager()
        {
            for (int i = 0; i < 4; i++)
            {
                TcpListener listener = new TcpListener(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 60000));
                listener.Start();
                var listenerAcceptSocket = listener.BeginAcceptSocket(null, null);

                TcpClient client = new TcpClient();
                client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 60000));

                var server = listener.EndAcceptSocket(listenerAcceptSocket);
                listener.Stop();

                var tcpClient = new BaseConnection(new SocketCap(client.Client), null, Test_Library_Net_Amoeba.MaxReceiveCount, _bufferManager);
                var tcpServer = new BaseConnection(new SocketCap(server), null, Test_Library_Net_Amoeba.MaxReceiveCount, _bufferManager);

                List<ConnectionManager> connectionManagers = new List<ConnectionManager>();

                {
                    ConnectionManager serverConnectionManager;
                    ConnectionManager clientConnectionManager;

                    Node serverNode = null;
                    Node clientNode = null;

                    byte[] serverSessionId = null;
                    byte[] clientSessionId = null;

                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var uris = new string[] { "tcp:localhost:9000", "tcp:localhost:9001", "tcp:localhost:9002" };

                        serverNode = new Node(id, uris);
                    }

                    {
                        var id = new byte[32];
                        _random.NextBytes(id);
                        var uris = new string[] { "tcp:localhost:9000", "tcp:localhost:9001", "tcp:localhost:9002" };

                        clientNode = new Node(id, uris);
                    }

                    {
                        serverSessionId = new byte[32];
                        _random.NextBytes(serverSessionId);
                    }

                    {
                        clientSessionId = new byte[32];
                        _random.NextBytes(clientSessionId);
                    }

                    serverConnectionManager = new ConnectionManager(tcpServer, serverSessionId, serverNode, ConnectDirection.In, _bufferManager);
                    clientConnectionManager = new ConnectionManager(tcpClient, clientSessionId, clientNode, ConnectDirection.Out, _bufferManager);

                    var serverTask = Task.Run(() => serverConnectionManager.Connect());
                    var clientTask = Task.Run(() => clientConnectionManager.Connect());

                    Task.WaitAll(serverTask, clientTask);

                    Assert.IsTrue(CollectionUtils.Equals(serverConnectionManager.SesstionId, clientSessionId), "ConnectionManager SessionId #1");
                    Assert.IsTrue(CollectionUtils.Equals(clientConnectionManager.SesstionId, serverSessionId), "ConnectionManager SessionId #2");

                    Assert.AreEqual(serverConnectionManager.Node, clientNode, "ConnectionManager Node #1");
                    Assert.AreEqual(clientConnectionManager.Node, serverNode, "ConnectionManager Node #2");

                    connectionManagers.Add(serverConnectionManager);
                    connectionManagers.Add(clientConnectionManager);
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullNodesEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullNodesEvent += (object sender, PullNodesEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    List<Node> nodes = new List<Node>();

                    for (int j = 0; j < 32; j++)
                    {
                        Node node = null;

                        {
                            var id = new byte[32];
                            _random.NextBytes(id);
                            var uris = new string[] { "net.tcp://localhost:9000", "net.tcp://localhost:9001", "net.tcp://localhost:9002" };

                            node = new Node(id, uris);
                        }

                        nodes.Add(node);
                    }

                    senderConnection.PushNodes(nodes);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtils.Equals(nodes, item.Nodes), "ConnectionManager #1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBlocksLinkEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBlocksLinkEvent += (object sender, PullBlocksLinkEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var keys = new List<Key>();

                    for (int j = 0; j < 32; j++)
                    {
                        Key key = null;

                        {
                            var id = new byte[32];
                            _random.NextBytes(id);

                            key = new Key(HashAlgorithm.Sha256, id);
                        }

                        keys.Add(key);
                    }

                    senderConnection.PushBlocksLink(keys);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtils.Equals(keys, item.Keys), "ConnectionManager #2");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBlocksRequestEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBlocksRequestEvent += (object sender, PullBlocksRequestEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var keys = new List<Key>();

                    for (int j = 0; j < 32; j++)
                    {
                        Key key = null;

                        {
                            var id = new byte[32];
                            _random.NextBytes(id);

                            key = new Key(HashAlgorithm.Sha256, id);
                        }

                        keys.Add(key);
                    }

                    senderConnection.PushBlocksRequest(keys);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtils.Equals(keys, item.Keys), "ConnectionManager #3");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBlockEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBlockEvent += (object sender, PullBlockEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var buffer = _bufferManager.TakeBuffer(1024 * 1024 * 8);
                    var key = new Key(HashAlgorithm.Sha256, Sha256.ComputeHash(buffer));

                    senderConnection.PushBlock(key, new ArraySegment<byte>(buffer, 0, 1024 * 1024 * 4));

                    var item = queue.Dequeue();
                    Assert.AreEqual(key, item.Key, "ConnectionManager #4.1");
                    Assert.IsTrue(CollectionUtils.Equals(buffer, 0, item.Value.Array, item.Value.Offset, 1024 * 1024 * 4), "ConnectionManager #4.2");

                    _bufferManager.ReturnBuffer(buffer);
                    _bufferManager.ReturnBuffer(item.Value.Array);
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBroadcastMetadatasRequestEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBroadcastMetadatasRequestEvent += (object sender, PullBroadcastMetadatasRequestEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.Rsa2048_Sha256);

                    var signatures = new SignatureCollection();

                    for (int j = 0; j < 32; j++)
                    {
                        signatures.Add(digitalSignature.ToString());
                    }

                    senderConnection.PushBroadcastMetadatasRequest(signatures);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtils.Equals(signatures, item.Signatures), "ConnectionManager #5.1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullBroadcastMetadatasEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullBroadcastMetadatasEvent += (object sender, PullBroadcastMetadatasEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.Rsa2048_Sha256);

                    var metadatas1 = new List<BroadcastMetadata>();

                    for (int j = 0; j < 4; j++)
                    {
                        var key = new Key(HashAlgorithm.Sha256, new byte[32]);
                        var metadata = new Metadata(1, key, CompressionAlgorithm.Xz, CryptoAlgorithm.Aes256, new byte[32 + 32]);
                        var broadcastMetadata = new BroadcastMetadata("Type", DateTime.UtcNow, metadata, digitalSignature);

                        metadatas1.Add(broadcastMetadata);
                    }

                    senderConnection.PushBroadcastMetadatas(metadatas1);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtils.Equals(metadatas1, item.BroadcastMetadatas), "ConnectionManager #6.1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullUnicastMetadatasRequestEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullUnicastMetadatasRequestEvent += (object sender, PullUnicastMetadatasRequestEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.Rsa2048_Sha256);

                    var signatures = new SignatureCollection();

                    for (int j = 0; j < 32; j++)
                    {
                        signatures.Add(digitalSignature.ToString());
                    }

                    senderConnection.PushUnicastMetadatasRequest(signatures);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtils.Equals(signatures, item.Signatures), "ConnectionManager #7.1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullUnicastMetadatasEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullUnicastMetadatasEvent += (object sender, PullUnicastMetadatasEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.Rsa2048_Sha256);

                    var metadatas1 = new List<UnicastMetadata>();

                    for (int j = 0; j < 4; j++)
                    {
                        var key = new Key(HashAlgorithm.Sha256, new byte[32]);
                        var metadata = new Metadata(1, key, CompressionAlgorithm.Xz, CryptoAlgorithm.Aes256, new byte[32 + 32]);
                        var unicastMetadata = new UnicastMetadata("Type", digitalSignature.ToString(), DateTime.UtcNow, metadata, digitalSignature);

                        metadatas1.Add(unicastMetadata);
                    }

                    senderConnection.PushUnicastMetadatas(metadatas1);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtils.Equals(metadatas1, item.UnicastMetadatas), "ConnectionManager #8.1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullMulticastMetadatasRequestEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullMulticastMetadatasRequestEvent += (object sender, PullMulticastMetadatasRequestEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var tags = new TagCollection();

                    for (int j = 0; j < 32; j++)
                    {
                        var id = new byte[32];
                        _random.NextBytes(id);

                        tags.Add(new Tag(RandomString.GetValue(256), id));
                    }

                    senderConnection.PushMulticastMetadatasRequest(tags);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtils.Equals(tags, item.Tags), "ConnectionManager #9.1");
                }

                connectionManagers.Randomize();

                {
                    var queue = new WaitQueue<PullMulticastMetadatasEventArgs>();

                    var receiverConnection = connectionManagers[0];
                    var senderConnection = connectionManagers[1];

                    receiverConnection.PullMulticastMetadatasEvent += (object sender, PullMulticastMetadatasEventArgs e) =>
                    {
                        queue.Enqueue(e);
                    };

                    var digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.Rsa2048_Sha256);

                    var metadatas1 = new List<MulticastMetadata>();

                    for (int j = 0; j < 4; j++)
                    {
                        var key = new Key(HashAlgorithm.Sha256, new byte[32]);
                        var metadata = new Metadata(1, key, CompressionAlgorithm.Xz, CryptoAlgorithm.Aes256, new byte[32 + 32]);
                        var tag = new Tag("oooo", new byte[32]);
                        var miner = new Miner(CashAlgorithm.Version1, -1, TimeSpan.Zero);
                        var multicastMetadata = new MulticastMetadata("Type", tag, DateTime.UtcNow, metadata, miner, digitalSignature);

                        metadatas1.Add(multicastMetadata);
                    }

                    senderConnection.PushMulticastMetadatas(metadatas1);

                    var item = queue.Dequeue();
                    Assert.IsTrue(CollectionUtils.Equals(metadatas1, item.MulticastMetadatas), "ConnectionManager #10.1");
                }

                foreach (var connectionManager in connectionManagers)
                {
                    connectionManager.Dispose();
                }

                client.Close();
                server.Close();
            }
        }
Esempio n. 57
0
        public void Upload(Link link, DigitalSignature digitalSignature)
        {
            this.Check();

            lock (this.ThisLock)
            {
                _backgroundUploadManager.Upload(link, digitalSignature);
            }
        }
        public void Test_Link()
        {
            DigitalSignature digitalSignature = new DigitalSignature("123", DigitalSignatureAlgorithm.Rsa2048_Sha256);

            var signatures = new List<string>();
            signatures.Add(digitalSignature.ToString());
            signatures.Add(digitalSignature.ToString());
            signatures.Add(digitalSignature.ToString());

            var link = new Link(signatures, signatures);

            Link link2;

            using (var linkStream = link.Export(_bufferManager))
            {
                link2 = Link.Import(linkStream, _bufferManager);
            }

            Assert.AreEqual(link, link2, "Link #1");
        }
Esempio n. 59
0
        public void Upload(Store store, DigitalSignature digitalSignature)
        {
            this.Check();

            lock (this.ThisLock)
            {
                _backgroundUploadManager.Upload(store, digitalSignature);
            }
        }
 public SignatureListViewItem(DigitalSignature signatureItem)
 {
     this.Value = signatureItem;
 }