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); }
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); }
public void Sign(BlockItem item, KeysPair keys) { var data = item.GetData(); var signature = Sign(data, keys); item.Signature = signature; item.PublicKey = keys.PublicKey; }
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); }
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(); }
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(); }
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); }); }
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 ;)"); }
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); }
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); }
public byte[] Sign(byte[] data, KeysPair keys) { return(Sign(data, keys.PrivateKey)); }
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); }
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); }
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); }