Пример #1
0
        public async Task <Guid> Community(string name, KeysPair keys)
        {
            var exist = communities.SingleOrDefault(o => o.Name == name);

            if (exist != null)
            {
                return(exist.Id);
            }

            var community = new Community
            {
                Id       = Guid.NewGuid(),
                Name     = name,
                CreateAt = DateTimeOffset.Now,
                Address  = keys.PublicKey
            };

            var signer = new Signer(service);

            signer.Sign(community, keys);

            await publisher.Add(community);

            communities.Add(community);

            return(community.Id);
        }
Пример #2
0
        public async Task MessagesApi_Should_Return_Ok_When_Message_Is_Valid()
        {
            var title   = "tit";
            var content = "content123";

            var keyPairTest = new KeysPair()
            {
                PublicKey  = Convert.FromBase64String("BgIAAACkAABSU0ExAAgAAAEAAQDFz6K8OaO4J/HZYxt1Zi73N95LAvgR+7lMmBW/CpOC0FSswtAaNf+He1P8iVxwqsGQPEZIV6wuqRk29fUycUPrHBM6j3plKtE9Y6IMBoX4g/mu44XXChMbaDkl5EUcX+SY/8DzTrsqnghg7tpI0TffHh5fO6/snBi1HxqGH/OTsvu3J/vP86FRGBMzxPSQcq0sx66HBmQUC7i4WPJqnsRITiBu4z0vZr1rSYLr26OivEmwpHKgos78rbn+I3PjWe2CtNydhvJ2Qd4Lq09/dK72uWwfR9zc8J2LGdOVxAovGyva+EW/lQNa//dnTz6tOrla+H1v3tFEh0X89wz9zx/P"),
                PrivateKey = Convert.FromBase64String("BwIAAACkAABSU0EyAAgAAAEAAQDFz6K8OaO4J/HZYxt1Zi73N95LAvgR+7lMmBW/CpOC0FSswtAaNf+He1P8iVxwqsGQPEZIV6wuqRk29fUycUPrHBM6j3plKtE9Y6IMBoX4g/mu44XXChMbaDkl5EUcX+SY/8DzTrsqnghg7tpI0TffHh5fO6/snBi1HxqGH/OTsvu3J/vP86FRGBMzxPSQcq0sx66HBmQUC7i4WPJqnsRITiBu4z0vZr1rSYLr26OivEmwpHKgos78rbn+I3PjWe2CtNydhvJ2Qd4Lq09/dK72uWwfR9zc8J2LGdOVxAovGyva+EW/lQNa//dnTz6tOrla+H1v3tFEh0X89wz9zx/PTwh97VHN4SpiUwqQ63PC8Yw1kUKiWb5AxS2wfQ0BwrP0rFRtTbb1AAJyuUaYFiuj7prXxL+tC3iLr4aCVx59HtprbZU49ovWWuDiwYCjmdXGlN4LEAzf010z8eW23JuiJ2f0nWMbqQYYiC6sZA11ua9gA0PWQgF+Z3Wuu9Yyxd6rzVm5BqvcfkFy1FVeMv1mVBmHENZNiF6kXy+dlkWTwxXnFpLC7foqcrzLYvUR8s7044wmilyglQuhuAIl+QPxAl/jEm/chfB4gK+QJiJ2ehSqnFftmy2gVQ84IUGZQjj6q+BHPgVIwpeXlfPxV7q2HTDullOdF7cefTO3xiUF7iFtIyHfcDWskYu6SADj3CkLy8Duzq2O6SNt1Rj310zqHBXHgfTUVkrkU9MR5wbKw9gbLJnjtNsf+ajAKTdqORx1F7osMG9vGIGXkntUFL6VGOcz9DI/VkhsU5DPVUTUaAna9/hrSCwOzFrMJs5e2Xn9sK1fzPXsoV1vTJPt7pxSr8s8vm8r3r/2LyYcEJtXMXhArvgMvxjli6Y/SpwE4Td9RZnEu5gdmjvpAlRhB+wL+cFdjw2QHMyOG6cUwPfQbWsDXkA4OGGpKlDG+IF93WhoRGhqZ/aFivEN8Re9y7AiYP2XIVhsWAx5jQmPib+HQ6UCSyD9GnbE+sjD3Hql7rk5gzeJWOUKc9IcRPz/JQFMv9sNw6yf3tDPUtuhn/308u8O3l9aafihyEI616oZD36PNqq811JXnKmuNOALrIUSeeopTcwB+FvfwrWshaY2ss62fvucYFhJwZg3XuV8KDoCqGz5Srivmr/oC5RqKFKyGZ8CAjwmrGuKmI3EaBh92blnANSi4d2o00WBjpPE1xhqdFHFprc1mkootEzmg55x0t7nMGpA6HhVxtiyHvswRVtHY25+IJD8RyClYevjDcEbrtRmsbxKmnlitFAoVaP5VdlsW1+QZMJxDiqKtfVhjBITUev3qCzREeMhkAuKR2gyGqALXxAZRpU9Mx3hyccKO7dzmo1BjQJ01EX32UaS0ZZp1xikQ807BfjdPXUsdsDR6KdPvpCJLotccKe1xMIO4ExN1MVxXza+XR94/PpEuUbeTvN00DMiAFtCEDGz/x9kmAUaHxd6tZh8iFXaxRqDBOOoHgzv7wMtwTt4svlAWapCtWEi1epx8uvW/PQ8YIU=")
            };

            var toPublicKeyBase64  = "BgIAAACkAABSU0ExAAgAAAEAAQAF7p/n+6T+dUoRA0V+SQZBtK9C7KZYfFFM/ASeiSVk8zp6Y84OQ115boZcfLL5K/ySYcuvWs6PdjJoGc/y3fDt2ojEdiF33g0AlPkrI+3QjM6V0xtcIqsx/2itlwb8qLvMqsATIJ7wzQiRvta+jqpTtP7Y28FsFgag5djj+oFgcU5l2tbx83uHYncueLehjJYMtNK8T1WqRuEpBwWuDA6q+XX8sX+XdhVQ8EzJco+Rme5rXNTGqrTuFW9rFmzQwuDIwKPhoTpE6sJ4rsv4/LtM2lT6GjQg0PlIwJf48eYra4h+0KnEfK5+a/HmdLCk36I/LenvpHD7NVun0kOp9/mq";
            var toPrivateKeyBase64 = "BwIAAACkAABSU0EyAAgAAAEAAQAF7p/n+6T+dUoRA0V+SQZBtK9C7KZYfFFM/ASeiSVk8zp6Y84OQ115boZcfLL5K/ySYcuvWs6PdjJoGc/y3fDt2ojEdiF33g0AlPkrI+3QjM6V0xtcIqsx/2itlwb8qLvMqsATIJ7wzQiRvta+jqpTtP7Y28FsFgag5djj+oFgcU5l2tbx83uHYncueLehjJYMtNK8T1WqRuEpBwWuDA6q+XX8sX+XdhVQ8EzJco+Rme5rXNTGqrTuFW9rFmzQwuDIwKPhoTpE6sJ4rsv4/LtM2lT6GjQg0PlIwJf48eYra4h+0KnEfK5+a/HmdLCk36I/LenvpHD7NVun0kOp9/mqDxurj+u8E13h7bDdR14+nGD+A/wCAvxPMrhOnSsdR7FAZt+DKCS4M8AFtPePWtWh1MAO/hWRMVJ/+UwwpUOkO852CopqnqdaM0ixrLE+PIsgZhOoHVcELEbFis6oj5ivDMe2RGlkpUcaF2PzAT73KL0UmfCSqOudo1asHJDCiMirdZlflJboNTihNfhSx6pZ06q1lAnGWQG/mbIGgelb/qq6Tbosky4tnf2hhJrhI9QgvycQ6+JWTf/9S1Ovk0ww6vO2E9NeLJ92nTRk+tTF6v9YDImz5UFcNrWFLfFGaQXO5iyVC4HmMDglNj/FiQlPrG1HWU+6tREjrW0/tE5E2h0mXKa42wZKc6LGUvuOKWOoExsDzlW8KyWTXyfdJXvLhYsbBDzrc1h023G4MnY4fN8j5F7D8fhrPP9IhL0QZLvQUBXwl4h6IL+OC0tCATEm1xIZZXF0pkdJFevxwg6qgJ72UF4wqIwdoZgxuPdJaDATwVK4ymS/8ueNIE9mzKucEa1W79wO3HMVle5OUDlwOTzNmKwtk2zObHf1vbZPaEHAo9OeRo49iBX4RkldVoOSmTpiySN5tDyD0ftE3JnwYEGfzbCkaCmT36IG8HuI0e8qNInJGDG+pKMqqGXbpDZLfxkF7KesLmnQPimW0l3ih+9UpVRUPG4II+HhczxRRSk2jwtZdsT1hXpK0Gt7DKLc48rCxEEOsB9QjtfzBNL45Q9z4hC37/Qefz/pIqGLy7REqKqu9BNH1Rv7lUzoxj+0k6x33zgMJrDPktS29NQz1qfzyI3LDkVY2o+ttOQQNVJoomeIwQZGjy7YoG2ZMVWkJFJTHU3OE+J+xerhe9iusZk2ljFp2fAgYUl7ZAUM2q0sBkbhfHHwl9kDr9fuM5yoNTidJMJawmwVew/nAzzZLBptRi9fFqBpfuYPa2bfCSjFAelOnQTLlEqAb++PpAgALR/DJELSyOs90+Xry8vzF2WfvqOnwhI8tyeWhaCwETujoeCatJ9W20bSjGhmTU/pnMi4W8ow6kM+2yQ5ultj4ewQQ+B1NzHUR4mIOXBIQlgKSTlEPkJkhWL2EJVpLECmZSdmhXscp52IpQRYeXBUhwJXbX8QEO42Tf7MPfb97kWjzWZ2BdxVOAUyEJb67Vi3ZSX4f8qlZP5CvfcnJc4pqPPBYEKNT++90vPEBMra1Fg=";

            var mb      = new EncryptedMessageBuilder(new HashCash());
            var message = mb.AddContent(content)
                          .AddTitle(title)
                          .AddReciever(toPublicKeyBase64)
                          .AddSender(Convert.ToBase64String(keyPairTest.PublicKey))
                          .EncryptAndBuild(Convert.ToBase64String(keyPairTest.PrivateKey));

            var request = new HttpRequestMessage(HttpMethod.Post, "/api/messages")
            {
                Content = new StringContent(JsonConvert.SerializeObject(message), Encoding.UTF8, "application/json")
            };

            var response = await _client.SendAsync(request);

            Assert.True(response.IsSuccessStatusCode);
            Assert.True(response.StatusCode == System.Net.HttpStatusCode.OK);
        }
Пример #3
0
        public void Sign(BlockItem item, KeysPair keys)
        {
            var data = item.GetData();

            var signature = Sign(data, keys);

            item.Signature = signature;
            item.PublicKey = keys.PublicKey;
        }
Пример #4
0
        public void InitKeys()
        {
            miner   = CryptoService.Instance.GeneratePair();
            root    = CryptoService.Instance.GeneratePair();
            pedro   = CryptoService.Instance.GeneratePair();
            alicia  = CryptoService.Instance.GeneratePair();
            roberto = CryptoService.Instance.GeneratePair();
            camila  = CryptoService.Instance.GeneratePair();

            signer = new Signer(CryptoService.Instance);
        }
Пример #5
0
 public bool Equals(KeysPair other)
 {
     if (ReferenceEquals(null, other))
     {
         return(false);
     }
     if (ReferenceEquals(this, other))
     {
         return(true);
     }
     return(Equals(other.Key1, Key1) && Equals(other.Key2, Key2));
 }
        public void InitKeys()
        {
            miner = CryptoService.Instance.GeneratePair();
            root  = CryptoService.Instance.GeneratePair();
            nelo  = CryptoService.Instance.GeneratePair();

            signer = new Signer(CryptoService.Instance);

            cryptoVoteId = Guid.NewGuid();
            questionId   = Guid.NewGuid();
            neloId       = Guid.NewGuid();
        }
Пример #7
0
        public void InitKeys()
        {
            miner           = CryptoService.Instance.GeneratePair();
            camaraElectoral = CryptoService.Instance.GeneratePair();

            apoderadoFrenteDespertar   = CryptoService.Instance.GeneratePair();
            apoderadorFrenteDeTodos    = CryptoService.Instance.GeneratePair();
            apoderadoFIT               = CryptoService.Instance.GeneratePair();
            apoderadoJuntosPorElCambio = CryptoService.Instance.GeneratePair();
            apoderadoConsensoFederal   = CryptoService.Instance.GeneratePair();

            julio = CryptoService.Instance.GeneratePair();
            albin = CryptoService.Instance.GeneratePair();
            nelo  = CryptoService.Instance.GeneratePair();
            ana   = CryptoService.Instance.GeneratePair();

            sofia     = CryptoService.Instance.GeneratePair();
            maria     = CryptoService.Instance.GeneratePair();
            lucia     = CryptoService.Instance.GeneratePair();
            martina   = CryptoService.Instance.GeneratePair();
            catalina  = CryptoService.Instance.GeneratePair();
            elena     = CryptoService.Instance.GeneratePair();
            emilia    = CryptoService.Instance.GeneratePair();
            valentina = CryptoService.Instance.GeneratePair();
            paula     = CryptoService.Instance.GeneratePair();
            zoe       = CryptoService.Instance.GeneratePair();

            santiago = CryptoService.Instance.GeneratePair();
            mateo    = CryptoService.Instance.GeneratePair();
            juan     = CryptoService.Instance.GeneratePair();
            matias   = CryptoService.Instance.GeneratePair();
            nicolas  = CryptoService.Instance.GeneratePair();
            benjamin = CryptoService.Instance.GeneratePair();
            pedro    = CryptoService.Instance.GeneratePair();
            tomas    = CryptoService.Instance.GeneratePair();
            thiago   = CryptoService.Instance.GeneratePair();
            santino  = CryptoService.Instance.GeneratePair();

            signer = new Signer(CryptoService.Instance);

            communityId = Guid.NewGuid();
            eleccionId  = Guid.NewGuid();
            mesa0001Id  = Guid.NewGuid();
            mesa5468Id  = Guid.NewGuid();

            espertChoideId    = Guid.NewGuid();
            macriChoiceId     = Guid.NewGuid();
            fernandezChoiceId = Guid.NewGuid();
            lavagnaChoiceId   = Guid.NewGuid();
            delcanoChoiceId   = Guid.NewGuid();
        }
Пример #8
0
        public IActionResult CheckKeys([FromBody] KeysPairDto keys)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            KeysPair keysPair = new KeysPair();

            try
            {
                keysPair.PrivateKey = Convert.FromBase64String(keys.PrivateKey);
                keysPair.PublicKey  = Convert.FromBase64String(keys.PublicKey);
            }
            catch (FormatException ex)
            {
                return(BadRequest("Public or private key format is invalid."));
            }
            return(Ok(_keysValidator.VerifyKeys(keysPair)));
        }
        public void EncryptedMessageBuilder_Build_Should_Return_Encrypted_Message(KeysPair keyPairTest)
        {
            var title   = "tit";
            var content = "content123";

            var toPublicKeyBase64  = "BgIAAACkAABSU0ExAAgAAAEAAQAF7p/n+6T+dUoRA0V+SQZBtK9C7KZYfFFM/ASeiSVk8zp6Y84OQ115boZcfLL5K/ySYcuvWs6PdjJoGc/y3fDt2ojEdiF33g0AlPkrI+3QjM6V0xtcIqsx/2itlwb8qLvMqsATIJ7wzQiRvta+jqpTtP7Y28FsFgag5djj+oFgcU5l2tbx83uHYncueLehjJYMtNK8T1WqRuEpBwWuDA6q+XX8sX+XdhVQ8EzJco+Rme5rXNTGqrTuFW9rFmzQwuDIwKPhoTpE6sJ4rsv4/LtM2lT6GjQg0PlIwJf48eYra4h+0KnEfK5+a/HmdLCk36I/LenvpHD7NVun0kOp9/mq";
            var toPrivateKeyBase64 = "BwIAAACkAABSU0EyAAgAAAEAAQAF7p/n+6T+dUoRA0V+SQZBtK9C7KZYfFFM/ASeiSVk8zp6Y84OQ115boZcfLL5K/ySYcuvWs6PdjJoGc/y3fDt2ojEdiF33g0AlPkrI+3QjM6V0xtcIqsx/2itlwb8qLvMqsATIJ7wzQiRvta+jqpTtP7Y28FsFgag5djj+oFgcU5l2tbx83uHYncueLehjJYMtNK8T1WqRuEpBwWuDA6q+XX8sX+XdhVQ8EzJco+Rme5rXNTGqrTuFW9rFmzQwuDIwKPhoTpE6sJ4rsv4/LtM2lT6GjQg0PlIwJf48eYra4h+0KnEfK5+a/HmdLCk36I/LenvpHD7NVun0kOp9/mqDxurj+u8E13h7bDdR14+nGD+A/wCAvxPMrhOnSsdR7FAZt+DKCS4M8AFtPePWtWh1MAO/hWRMVJ/+UwwpUOkO852CopqnqdaM0ixrLE+PIsgZhOoHVcELEbFis6oj5ivDMe2RGlkpUcaF2PzAT73KL0UmfCSqOudo1asHJDCiMirdZlflJboNTihNfhSx6pZ06q1lAnGWQG/mbIGgelb/qq6Tbosky4tnf2hhJrhI9QgvycQ6+JWTf/9S1Ovk0ww6vO2E9NeLJ92nTRk+tTF6v9YDImz5UFcNrWFLfFGaQXO5iyVC4HmMDglNj/FiQlPrG1HWU+6tREjrW0/tE5E2h0mXKa42wZKc6LGUvuOKWOoExsDzlW8KyWTXyfdJXvLhYsbBDzrc1h023G4MnY4fN8j5F7D8fhrPP9IhL0QZLvQUBXwl4h6IL+OC0tCATEm1xIZZXF0pkdJFevxwg6qgJ72UF4wqIwdoZgxuPdJaDATwVK4ymS/8ueNIE9mzKucEa1W79wO3HMVle5OUDlwOTzNmKwtk2zObHf1vbZPaEHAo9OeRo49iBX4RkldVoOSmTpiySN5tDyD0ftE3JnwYEGfzbCkaCmT36IG8HuI0e8qNInJGDG+pKMqqGXbpDZLfxkF7KesLmnQPimW0l3ih+9UpVRUPG4II+HhczxRRSk2jwtZdsT1hXpK0Gt7DKLc48rCxEEOsB9QjtfzBNL45Q9z4hC37/Qefz/pIqGLy7REqKqu9BNH1Rv7lUzoxj+0k6x33zgMJrDPktS29NQz1qfzyI3LDkVY2o+ttOQQNVJoomeIwQZGjy7YoG2ZMVWkJFJTHU3OE+J+xerhe9iusZk2ljFp2fAgYUl7ZAUM2q0sBkbhfHHwl9kDr9fuM5yoNTidJMJawmwVew/nAzzZLBptRi9fFqBpfuYPa2bfCSjFAelOnQTLlEqAb++PpAgALR/DJELSyOs90+Xry8vzF2WfvqOnwhI8tyeWhaCwETujoeCatJ9W20bSjGhmTU/pnMi4W8ow6kM+2yQ5ultj4ewQQ+B1NzHUR4mIOXBIQlgKSTlEPkJkhWL2EJVpLECmZSdmhXscp52IpQRYeXBUhwJXbX8QEO42Tf7MPfb97kWjzWZ2BdxVOAUyEJb67Vi3ZSX4f8qlZP5CvfcnJc4pqPPBYEKNT++90vPEBMra1Fg=";

            var mb  = new EncryptedMessageBuilder(new HashCash());
            var msg = mb.AddContent(content)
                      .AddTitle(title)
                      .AddReciever(toPublicKeyBase64)
                      .AddSender(Convert.ToBase64String(keyPairTest.PublicKey))
                      .EncryptAndBuild(Convert.ToBase64String(keyPairTest.PrivateKey));

            Assert.True(!string.IsNullOrEmpty(msg.Id));
            Assert.True(!string.IsNullOrEmpty(msg.Title));
            Assert.True(title != msg.Title);
            Assert.True(!string.IsNullOrEmpty(msg.Content));
            Assert.True(content != msg.Content);
            Assert.True(toPublicKeyBase64 == msg.To);
            Assert.True(msg.Timestamp > 0);
        }
        public void MessageDecryptor_Decrypt_Should_Throw_Exception_When_Try_Use_Wrong_Private_Key()
        {
            var title       = "tit";
            var content     = "content123";
            var keyPairTest = new KeysPair()
            {
                PublicKey  = Convert.FromBase64String("BgIAAACkAABSU0ExAAgAAAEAAQDFz6K8OaO4J/HZYxt1Zi73N95LAvgR+7lMmBW/CpOC0FSswtAaNf+He1P8iVxwqsGQPEZIV6wuqRk29fUycUPrHBM6j3plKtE9Y6IMBoX4g/mu44XXChMbaDkl5EUcX+SY/8DzTrsqnghg7tpI0TffHh5fO6/snBi1HxqGH/OTsvu3J/vP86FRGBMzxPSQcq0sx66HBmQUC7i4WPJqnsRITiBu4z0vZr1rSYLr26OivEmwpHKgos78rbn+I3PjWe2CtNydhvJ2Qd4Lq09/dK72uWwfR9zc8J2LGdOVxAovGyva+EW/lQNa//dnTz6tOrla+H1v3tFEh0X89wz9zx/P"),
                PrivateKey = Convert.FromBase64String("BwIAAACkAABSU0EyAAgAAAEAAQDFz6K8OaO4J/HZYxt1Zi73N95LAvgR+7lMmBW/CpOC0FSswtAaNf+He1P8iVxwqsGQPEZIV6wuqRk29fUycUPrHBM6j3plKtE9Y6IMBoX4g/mu44XXChMbaDkl5EUcX+SY/8DzTrsqnghg7tpI0TffHh5fO6/snBi1HxqGH/OTsvu3J/vP86FRGBMzxPSQcq0sx66HBmQUC7i4WPJqnsRITiBu4z0vZr1rSYLr26OivEmwpHKgos78rbn+I3PjWe2CtNydhvJ2Qd4Lq09/dK72uWwfR9zc8J2LGdOVxAovGyva+EW/lQNa//dnTz6tOrla+H1v3tFEh0X89wz9zx/PTwh97VHN4SpiUwqQ63PC8Yw1kUKiWb5AxS2wfQ0BwrP0rFRtTbb1AAJyuUaYFiuj7prXxL+tC3iLr4aCVx59HtprbZU49ovWWuDiwYCjmdXGlN4LEAzf010z8eW23JuiJ2f0nWMbqQYYiC6sZA11ua9gA0PWQgF+Z3Wuu9Yyxd6rzVm5BqvcfkFy1FVeMv1mVBmHENZNiF6kXy+dlkWTwxXnFpLC7foqcrzLYvUR8s7044wmilyglQuhuAIl+QPxAl/jEm/chfB4gK+QJiJ2ehSqnFftmy2gVQ84IUGZQjj6q+BHPgVIwpeXlfPxV7q2HTDullOdF7cefTO3xiUF7iFtIyHfcDWskYu6SADj3CkLy8Duzq2O6SNt1Rj310zqHBXHgfTUVkrkU9MR5wbKw9gbLJnjtNsf+ajAKTdqORx1F7osMG9vGIGXkntUFL6VGOcz9DI/VkhsU5DPVUTUaAna9/hrSCwOzFrMJs5e2Xn9sK1fzPXsoV1vTJPt7pxSr8s8vm8r3r/2LyYcEJtXMXhArvgMvxjli6Y/SpwE4Td9RZnEu5gdmjvpAlRhB+wL+cFdjw2QHMyOG6cUwPfQbWsDXkA4OGGpKlDG+IF93WhoRGhqZ/aFivEN8Re9y7AiYP2XIVhsWAx5jQmPib+HQ6UCSyD9GnbE+sjD3Hql7rk5gzeJWOUKc9IcRPz/JQFMv9sNw6yf3tDPUtuhn/308u8O3l9aafihyEI616oZD36PNqq811JXnKmuNOALrIUSeeopTcwB+FvfwrWshaY2ss62fvucYFhJwZg3XuV8KDoCqGz5Srivmr/oC5RqKFKyGZ8CAjwmrGuKmI3EaBh92blnANSi4d2o00WBjpPE1xhqdFHFprc1mkootEzmg55x0t7nMGpA6HhVxtiyHvswRVtHY25+IJD8RyClYevjDcEbrtRmsbxKmnlitFAoVaP5VdlsW1+QZMJxDiqKtfVhjBITUev3qCzREeMhkAuKR2gyGqALXxAZRpU9Mx3hyccKO7dzmo1BjQJ01EX32UaS0ZZp1xikQ807BfjdPXUsdsDR6KdPvpCJLotccKe1xMIO4ExN1MVxXza+XR94/PpEuUbeTvN00DMiAFtCEDGz/x9kmAUaHxd6tZh8iFXaxRqDBOOoHgzv7wMtwTt4svlAWapCtWEi1epx8uvW/PQ8YIU=")
            };
            var toPublicKeyBase64         = "BgIAAACkAABSU0ExAAgAAAEAAQAF7p/n+6T+dUoRA0V+SQZBtK9C7KZYfFFM/ASeiSVk8zp6Y84OQ115boZcfLL5K/ySYcuvWs6PdjJoGc/y3fDt2ojEdiF33g0AlPkrI+3QjM6V0xtcIqsx/2itlwb8qLvMqsATIJ7wzQiRvta+jqpTtP7Y28FsFgag5djj+oFgcU5l2tbx83uHYncueLehjJYMtNK8T1WqRuEpBwWuDA6q+XX8sX+XdhVQ8EzJco+Rme5rXNTGqrTuFW9rFmzQwuDIwKPhoTpE6sJ4rsv4/LtM2lT6GjQg0PlIwJf48eYra4h+0KnEfK5+a/HmdLCk36I/LenvpHD7NVun0kOp9/mq";
            var invalidToPrivateKeyBase64 = "BwIAAACkAABSU0EyAAgAAAEAAQDFz6K8OaO4J/HZYxt1Zi73N95LAvgR+7lMmBW/CpOC0FSswtAaNf+He1P8iVxwqsGQPEZIV6wuqRk29fUycUPrHBM6j3plKtE9Y6IMBoX4g/mu44XXChMbaDkl5EUcX+SY/8DzTrsqnghg7tpI0TffHh5fO6/snBi1HxqGH/OTsvu3J/vP86FRGBMzxPSQcq0sx66HBmQUC7i4WPJqnsRITiBu4z0vZr1rSYLr26OivEmwpHKgos78rbn+I3PjWe2CtNydhvJ2Qd4Lq09/dK72uWwfR9zc8J2LGdOVxAovGyva+EW/lQNa//dnTz6tOrla+H1v3tFEh0X89wz9zx/PTwh97VHN4SpiUwqQ63PC8Yw1kUKiWb5AxS2wfQ0BwrP0rFRtTbb1AAJyuUaYFiuj7prXxL+tC3iLr4aCVx59HtprbZU49ovWWuDiwYCjmdXGlN4LEAzf010z8eW23JuiJ2f0nWMbqQYYiC6sZA11ua9gA0PWQgF+Z3Wuu9Yyxd6rzVm5BqvcfkFy1FVeMv1mVBmHENZNiF6kXy+dlkWTwxXnFpLC7foqcrzLYvUR8s7044wmilyglQuhuAIl+QPxAl/jEm/chfB4gK+QJiJ2ehSqnFftmy2gVQ84IUGZQjj6q+BHPgVIwpeXlfPxV7q2HTDullOdF7cefTO3xiUF7iFtIyHfcDWskYu6SADj3CkLy8Duzq2O6SNt1Rj310zqHBXHgfTUVkrkU9MR5wbKw9gbLJnjtNsf+ajAKTdqORx1F7osMG9vGIGXkntUFL6VGOcz9DI/VkhsU5DPVUTUaAna9/hrSCwOzFrMJs5e2Xn9sK1fzPXsoV1vTJPt7pxSr8s8vm8r3r/2LyYcEJtXMXhArvgMvxjli6Y/SpwE4Td9RZnEu5gdmjvpAlRhB+wL+cFdjw2QHMyOG6cUwPfQbWsDXkA4OGGpKlDG+IF93WhoRGhqZ/aFivEN8Re9y7AiYP2XIVhsWAx5jQmPib+HQ6UCSyD9GnbE+sjD3Hql7rk5gzeJWOUKc9IcRPz/JQFMv9sNw6yf3tDPUtuhn/308u8O3l9aafihyEI616oZD36PNqq811JXnKmuNOALrIUSeeopTcwB+FvfwrWshaY2ss62fvucYFhJwZg3XuV8KDoCqGz5Srivmr/oC5RqKFKyGZ8CAjwmrGuKmI3EaBh92blnANSi4d2o00WBjpPE1xhqdFHFprc1mkootEzmg55x0t7nMGpA6HhVxtiyHvswRVtHY25+IJD8RyClYevjDcEbrtRmsbxKmnlitFAoVaP5VdlsW1+QZMJxDiqKtfVhjBITUev3qCzREeMhkAuKR2gyGqALXxAZRpU9Mx3hyccKO7dzmo1BjQJ01EX32UaS0ZZp1xikQ807BfjdPXUsdsDR6KdPvpCJLotccKe1xMIO4ExN1MVxXza+XR94/PpEuUbeTvN00DMiAFtCEDGz/x9kmAUaHxd6tZh8iFXaxRqDBOOoHgzv7wMtwTt4svlAWapCtWEi1epx8uvW/PQ8YIU=";

            var mb  = new EncryptedMessageBuilder(new HashCash());
            var msg = mb.AddContent(content)
                      .AddTitle(title)
                      .AddReciever(toPublicKeyBase64)
                      .AddSender(Convert.ToBase64String(keyPairTest.PublicKey))
                      .EncryptAndBuild(Convert.ToBase64String(keyPairTest.PrivateKey));

            var md = new MessageDecryptor();

            Assert.ThrowsAny <Exception>(() => { md.Decrypt(msg, invalidToPrivateKeyBase64, true); });
        }
Пример #11
0
        static void Main(string[] args)
        {
            var owner = new KeysPair(
                Base58.Decode("5eGEt2wuDrvEt1d7zUDdqZEF9u2sYiVXg6jJEk5G1ytJ"),
                Base58.Decode("QXuwUXRhANuouMkHTc2tbcZhkcucShZQKEhs7XSfseSd6Rq8q2G3sSZc1Q1z5jdj4Nz8dQuieiiyDVLiKWDmtJVp"));

            Console.WriteLine("Leyendo White Paper");
            var content    = File.ReadAllText("white-paper.md");
            var whitePaper = new Document(content);

            Console.WriteLine("Inicializando Firmador");
            var signer = new Signer(CryptoService.Instance);

            Console.WriteLine("Firmando White Paper");
            signer.Sign(whitePaper, owner);

            Console.WriteLine("Construyendo bloque Génesis");
            var block = new Block(Array.Empty <byte>(), 0);

            block.Documents.Add(whitePaper);

            byte dificulty = 3;

            Console.WriteLine($"Minando bloque Génesis con una dificultad de {dificulty}");
            var miner = new Miner(owner.PublicKey);

            miner.Mine(block, dificulty);

            Console.WriteLine("Serializando bloque Génesis");
            var json = JsonSerializer.Serialize(block, JsonDefaultSettings.Options);

            Console.WriteLine("Guardando bloque minado");
            File.WriteAllText("genesis.block", json, Encoding.UTF8);

            Console.WriteLine("Listo ;)");
        }
Пример #12
0
        public async Task <Guid> Member(Guid communityId, string name, byte[] address, KeysPair keys)
        {
            var exist = members.SingleOrDefault(o => o.CommunityId == communityId && o.Name == name);

            if (exist != null)
            {
                return(exist.Id);
            }

            var member = new Member
            {
                Id          = Guid.NewGuid(),
                CommunityId = communityId,
                Name        = name
            };

            member.Address = new byte[keys.PublicKey.Length];
            Buffer.BlockCopy(address, 0, member.Address, 0, keys.PublicKey.Length);

            var signer = new Signer(service);

            member.Signature = signer.Sign(member.GetData(), keys);
            member.PublicKey = new byte[keys.PublicKey.Length];
            Buffer.BlockCopy(keys.PublicKey, 0, member.PublicKey, 0, keys.PublicKey.Length);

            await publisher.Add(member);

            members.Add(member);

            return(member.Id);
        }
Пример #13
0
        public async Task <Guid> Question(Guid communityId, string name, Choice[] choices, byte type, KeysPair keys)
        {
            var exist = questions.SingleOrDefault(o => o.CommunityId == communityId && o.Name == name);

            if (exist != null)
            {
                return(exist.Id);
            }

            var question = new Question
            {
                Id          = Guid.NewGuid(),
                CommunityId = communityId,
                Name        = name,
                Type        = type,
                EndTime     = DateTimeOffset.Now.AddMonths(1).ToUnixTimeMilliseconds(),
                Choices     = choices
            };

            var signer = new Signer(service);

            question.Signature = signer.Sign(question.GetData(), keys);
            question.PublicKey = new byte[keys.PublicKey.Length];
            Buffer.BlockCopy(keys.PublicKey, 0, question.PublicKey, 0, keys.PublicKey.Length);

            await publisher.Add(question);

            questions.Add(question);

            return(question.Id);
        }
Пример #14
0
 public byte[] Sign(byte[] data, KeysPair keys)
 {
     return(Sign(data, keys.PrivateKey));
 }
Пример #15
0
        public async Task <Guid> Fiscal(Guid questionId, Guid choiceId, byte[] fiscalAddress, KeysPair guardianKey)
        {
            var exist = fiscals.SingleOrDefault(o => o.QuestionId == questionId && o.ChoiceId == choiceId && o.Address == fiscalAddress);

            if (exist != null)
            {
                return(exist.Id);
            }

            var fiscal = new Fiscal
            {
                Id         = Guid.NewGuid(),
                QuestionId = questionId,
                ChoiceId   = choiceId,
                Address    = fiscalAddress
            };
            var signer = new Signer(service);

            signer.Sign(fiscal, guardianKey);

            await publisher.Add(fiscal);

            fiscals.Add(fiscal);

            return(fiscal.Id);
        }
Пример #16
0
        public async Task <Guid> Urn(Guid questionId, string name, byte[][] authorities, KeysPair keys)
        {
            var exist = urns.SingleOrDefault(o => o.QuestionId == questionId && o.Name == name);

            if (exist != null)
            {
                return(exist.Id);
            }

            var urn = new Urn
            {
                Id          = Guid.NewGuid(),
                QuestionId  = questionId,
                Name        = name,
                Authorities = authorities
            };
            var signer = new Signer(service);

            urn.Signature = signer.Sign(urn.GetData(), keys);
            urn.PublicKey = new byte[keys.PublicKey.Length];
            Buffer.BlockCopy(keys.PublicKey, 0, urn.PublicKey, 0, keys.PublicKey.Length);

            await publisher.Add(urn);

            urns.Add(urn);

            return(urn.Id);
        }
Пример #17
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Creando datos de ejemplo");

            var crypto = new CryptoSecp256k1();
            var nelo   = crypto.GeneratePair(Base58.Decode("132AcYZtp4XAxufsdNaPzTQ9oK11gnxP6Sw8UxzV1rTn"));           // Tablet en emulador: me
            var martin = crypto.GeneratePair(Base58.Decode("4x6pChtv9EUNQ27otESf9GyL7PWerKF7z475ESGusnK4"));           // Tablet en emulador: martin
            var romina = crypto.GeneratePair(Base58.Decode("13SF2nG7CYsGqY2y1xKP4X318vVbRbZhFMsGySHDDcRd"));           // Tablet en emulador: gonzalo
            var juana  = crypto.GeneratePair(Base58.Decode("14V8igLr1ftDVGtgwrCUCAacdz43mzu1L2ZeumrEEkD1"));           // Tablet en emulador: juana
            var alicia = crypto.GeneratePair(Base58.Decode("13MKf75enRiqyHnsiZAbz7pi94qUpDaGk29NaNFhkezZ"));           // Tablet en emulador: alicia

            var silvio           = Base58.Decode("QCWderiVdAVDLTxipfHnRY7gmpAU8sdC9pd5NQmkd8eDjMyPC2haiVjZDqaEi7xDrAQzk91FMRrT82TGu1GwWaCZ");
            var tabletNeloNexus7 = Base58.Decode("NP9ajvEU6bWzN3CMdz1JCa2G34jVsi7ss7tzJCuJK52fbmXRzgky811Upko8tEjt4eSBaCsWKN7DwYYEdYLVSkxp");
            var salva            = Base58.Decode("Me65oa1KXyURvatDrNBeuRBxWqWSrsC9aYNSFMFftNq291JfaZBUFnR4TjzwCdDzN154N8tioaBxCHsUC3b4wvfc");

            var publisher = args.Length == 0 ? new ConsoleAdapter()
                                : args[0] == "web" ? new WebApiAdapter(args[1])
                                : args[0] == "file" ? (IPublisher) new FileAdapter()
                                : throw new ArgumentException($"El parámetro {args[0]} no es válido");

            var factory = new Factory(crypto, publisher);

            factory.Load();

            var cryptoVoteId = await factory.Community("Crypto Vote", nelo);

            Task.WaitAll(new Task[]
            {
                factory.Member(cryptoVoteId, "Nelo", nelo.PublicKey, nelo),
                factory.Member(cryptoVoteId, "Martin", martin.PublicKey, nelo),
                factory.Member(cryptoVoteId, "Silvio", silvio, nelo),
                factory.Member(cryptoVoteId, "Neluz", tabletNeloNexus7, nelo),
                factory.Member(cryptoVoteId, "Salva", salva, nelo)
            });

            var tasks = new List <Task>();

            tasks.Add(factory.Question(cryptoVoteId, "El nodo debe correr en un container de Docker", new[]
            {
                new Choice {
                    Id = Guid.NewGuid(), Color = 0x673ab7, Text = "Si"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0xe91e63, Text = "No"
                },
            }, QuestionType.DirectVote, nelo));
            tasks.Add(factory.Question(cryptoVoteId, "Método de Encriptación para la Firma", new[]
            {
                new Choice {
                    Id = Guid.NewGuid(), Color = 0x673ab7, Text = "secp256k1"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0xe91e63, Text = "RSA"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0xff5722, Text = "YAK"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0x4caf50, Text = "ElGamal"
                },
            }, QuestionType.DirectVote, nelo));
            tasks.Add(factory.Question(cryptoVoteId, "¿Cómo se dan de alta las Organizaciones?", new[]
            {
                new Choice {
                    Id = Guid.NewGuid(), Color = 0x673ab7, Text = "Cualquiera puede registrar una organización"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0xe91e63, Text = "Solo el dueño de la Blockchain puede"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0xff5722, Text = "Cualquier otra Organizaciones"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0x4caf50, Text = "Cualquier que pague"
                },
            }, QuestionType.DirectVote, nelo));
            tasks.Add(factory.Question(cryptoVoteId, "¿Quién se dan de alta los temas a votar?", new[]
            {
                new Choice {
                    Id = Guid.NewGuid(), Color = 0x673ab7, Text = "Cualquier miembro de una organización"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0xe91e63, Text = "Solo el dueño de la organización"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0x4caf50, Text = "Cualquier que pague"
                },
            }, QuestionType.DirectVote, nelo));
            Task.WaitAll(tasks.ToArray());

            var eantId = await factory.Community("EANT", martin);

            Task.WaitAll(new Task[]
            {
                factory.Member(eantId, "Martin", martin.PublicKey, martin),
                factory.Member(eantId, "Gustavo", juana.PublicKey, martin),
                factory.Member(eantId, "Silvio", silvio, martin),
                factory.Member(eantId, "Romina", romina.PublicKey, martin),
            });

            await factory.Question(eantId, "Nuevo Curso 2019 Q1", new[]
            {
                new Choice {
                    Id = Guid.NewGuid(), Color = 0x673ab7, Text = "Blockchain"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0xe91e63, Text = "Bitcoin"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0xff5722, Text = "Smart Contract"
                },
                new Choice {
                    Id = Guid.NewGuid(), Color = 0x4caf50, Text = "Arduino Intermedio"
                },
            }, QuestionType.DirectVote, martin);

            /* ELECCIONES NACIONALES */
            var      cne = crypto.GeneratePair();
            KeysPair apoderadoFrenteDespertar   = crypto.GeneratePair(),
                     apoderadorFrenteDeTodos    = crypto.GeneratePair(),
                     apoderadoFIT               = crypto.GeneratePair(),
                     apoderadoJuntosPorElCambio = crypto.GeneratePair(),
                     apoderadoConsensoFederal   = crypto.GeneratePair();

            Guid espertChoideId    = Guid.NewGuid(),
                 macriChoiceId     = Guid.NewGuid(),
                 fernandezChoiceId = Guid.NewGuid(),
                 lavagnaChoiceId   = Guid.NewGuid(),
                 delcanoChoiceId   = Guid.NewGuid();

            var argentinaId = await factory.Community("Argentina", cne);

            var eleccionesNacionalesId = await factory.Question(argentinaId, "Elecciones Nacionales 2019", new[]
            {
                new Choice {
                    Id = espertChoideId, Color = 0xf05c15, Text = "Espert, José Luis", GuardianAddress = apoderadoFrenteDespertar.PublicKey
                },
                new Choice {
                    Id = macriChoiceId, Color = 0xffd204, Text = "Macri, Mauricio", GuardianAddress = apoderadoJuntosPorElCambio.PublicKey
                },
                new Choice {
                    Id = fernandezChoiceId, Color = 0x59b6eb, Text = "Fernandez, Alberto", GuardianAddress = apoderadorFrenteDeTodos.PublicKey
                },
                new Choice {
                    Id = lavagnaChoiceId, Color = 0xa900fd, Text = "Lavagna, Roberto", GuardianAddress = apoderadoConsensoFederal.PublicKey
                },
                new Choice {
                    Id = delcanoChoiceId, Color = 0xfe0500, Text = "Del Caño, Nicolás", GuardianAddress = apoderadoFIT.PublicKey
                }
            }, QuestionType.Recount, cne);

            Task.WaitAll(new[]
            {
                factory.Urn(eleccionesNacionalesId, "5468", new[] { tabletNeloNexus7 }, cne),
                factory.Urn(eleccionesNacionalesId, "1234", new[] { nelo.PublicKey }, cne),
                factory.Urn(eleccionesNacionalesId, "4567", new[] { silvio }, cne),

                factory.Fiscal(eleccionesNacionalesId, espertChoideId, romina.PublicKey, apoderadoFrenteDespertar),
                factory.Fiscal(eleccionesNacionalesId, fernandezChoiceId, alicia.PublicKey, apoderadorFrenteDeTodos),
                factory.Fiscal(eleccionesNacionalesId, delcanoChoiceId, martin.PublicKey, apoderadoFIT),
                factory.Fiscal(eleccionesNacionalesId, macriChoiceId, romina.PublicKey, apoderadoJuntosPorElCambio),
                factory.Fiscal(eleccionesNacionalesId, lavagnaChoiceId, juana.PublicKey, apoderadoConsensoFederal),
            });

            Console.WriteLine($"nelo: {Base58.Encode(nelo.PublicKey)}");
            Console.WriteLine($"martin: {Base58.Encode(martin.PublicKey)}");
            Console.WriteLine($"silvio: {Base58.Encode(silvio)}");
            Console.WriteLine($"romina: {Base58.Encode(romina.PublicKey)}");
            Console.WriteLine($"juana: {Base58.Encode(juana.PublicKey)}");
            Console.WriteLine($"alicia: {Base58.Encode(alicia.PublicKey)}");
        }
        public void KeysValidator_Validate_Should_Return_False_When_Public_Or_Private_Keys_Are_Invalid(KeysPair keysPairTest)
        {
            var kv = new KeysValidator();

            var result = kv.VerifyKeys(keysPairTest);

            Assert.False(result);
        }
        public void KeysValidator_Validate_Should_Return_True_When_Public_And_Private_Keys_Are_Valid(KeysPair keysPairTest)
        {
            var kv = new KeysValidator();

            var result = kv.VerifyKeys(keysPairTest);

            Assert.True(result);
        }