using System; using System.Security.Cryptography; using Autofac; using FitConnect; using FitConnect.Encryption; using FitConnect.Models; using FluentAssertions; using Microsoft.Extensions.Logging; using MockContainer; using Newtonsoft.Json; using NUnit.Framework; namespace SenderTest; public class JweTest { private IContainer _container = null!; private ILogger<JweTest> _logger = null!; private Sender _sender = null!; private MockSettings _settings = null!; [SetUp] public void SetUp() { _logger = LoggerFactory.Create(cfg => cfg.AddConsole()) .CreateLogger<JweTest>(); _sender = new Sender( FitConnectEnvironment.Testing, "", "", _logger); _container = Container.Create(); _settings = _container.Resolve<MockSettings>(); } [Test] public void TestJwe() { // Arrange var engine = new FitEncryption(_container.Resolve<KeySet>(), _logger) { PublicKeyEncryption = _settings.PublicKeyEncryption, PrivateKeyDecryption = _settings.PrivateKeyDecryption }; // Act var dummyText = JsonConvert.SerializeObject(new { Title = "Value", Content = "content" }); Console.WriteLine(dummyText); var cypher = engine.Encrypt(dummyText); Console.WriteLine(cypher); var plain = engine.Decrypt(cypher); Console.WriteLine(plain.plainText); // Assert plain.plainText.Should().Be(dummyText); } [Test] public void TestJwe_withBytes() { // Arrange var engine = new FitEncryption(_container.Resolve<KeySet>(), _logger) { PublicKeyEncryption = _settings.PublicKeyEncryption, PrivateKeyDecryption = _settings.PrivateKeyDecryption }; // Act var plainBytes = RandomNumberGenerator.GetBytes(8192); var cypher = engine.Encrypt(plainBytes); var plain = engine.Decrypt(cypher); // Assert plain.plainBytes.Should().BeEquivalentTo(plainBytes); } [Test] public void TestMetaData() { // Arrange var encryptionEngine = new FitEncryption(_container.Resolve<KeySet>(), _logger) { PublicKeyEncryption = _settings.PublicKeyEncryption }; var decryptEngine = new FitEncryption(_container.Resolve<KeySet>(), _logger) { PrivateKeyDecryption = _settings.PrivateKeyDecryption }; var metaData = "{\"attachments\":[{\"attachmentId\":\"5d055f43-4ad6-4202-822a-f946c3be29a6\",\"description\":\"Just a test\",\"filename\":\"RandomBytes\",\"hash\":{\"content\":\"8b1042900c2039f65fe6c4cb1bca31e2a7a04b61d3ca7d9ae9fc4077068b82ad5512fa298385b025db70551113b762064444b87737e45e657a71be5b88b06e59\",\"type\":0},\"mimeType\":\"application/pdf\",\"purpose\":0}],\"data\":{\"hash\":null,\"submissionSchema\":{\"mimeType\":0,\"schemaUri\":\"urn:de:fim:leika:leistung:99400048079000\"}}}"; // Act var encrypted = encryptionEngine.Encrypt(metaData); var plain = decryptEngine.Decrypt(encrypted); // Assert plain.plainText.Should().Be(metaData); } [Test] public void TestJwe_withBytes2() { // Arrange var engine = new FitEncryption(_container.Resolve<KeySet>(), _logger) { PublicKeyEncryption = _settings.PublicKeyEncryption, PrivateKeyDecryption = _settings.PrivateKeyDecryption }; // Act var plainBytes = RandomNumberGenerator.GetBytes(512); var cypher = engine.Encrypt(Convert.ToBase64String(plainBytes)); var plain = engine.Decrypt(cypher); // Assert plain.plainText.Should().BeEquivalentTo(Convert.ToBase64String(plainBytes)); } [TestCase( "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwia2lkIjoidnI3Y1dLR2wtZzRXYV9DUkdvd05oQVlXX2dRYi1ha01iaWlneE4wRWtESSIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJ6aXAiOiJERUYifQ.R5TmfiDyi7dZhYz9NxduhqZc6GrfAERrDVGNLts6eHhU2SVMTAja1O9Rywrf_thPvbjQslM6ukXB8iI3hI6oWN2EY9SqUjKRto3zL2jdmdcXzfwxJFm1BnObMjYl9Jwy2ogEwLldXQhLAwMxVJWJbf31mZCgnVYC6DbPTEi-GLIkLDEn7Tj5y9iak3TjaE0hIxMk546Dda-q6I9QQ7YlDGV8m0Ijjh21yu2_B9H3Uh9LgIyrTN1Jw2saJRKVJgrtoV6e8WRaj5sDXarLNz6R2LhEtIjYjVioZvjBt1EeXADjcR9m1j3qG8V1f9boVocRTivvvaRvWd2NTH5yFGunDXr40oUmXXWXK1SfKsty85AAjlLOv5ZJsU1vhquA2XDgDVDJ7Nm1qC_9VeW2yCD01Ewh9sGiKscMqP1CbLxyVPfbuViVIe4g0h7Krlb6mZe9L7Sk18cLyFuCre7nYfB5ZToKnSkd8C5-ExMHfrcp9MJ196X6_n7YFKrc-Lzg7tvCRBG-6DFIQ1iqnme6crMN15qwo9VddOJOFXV815vNVyFXLhJAvr85q78aqyaE90qgY2QDNXyZXziTbXLurISL8i_Mdzt0J7cUyrvQLZaK0_pMJJvZOg3LvNalTGdJjUHUFwPxTbe-DRWZuPT81KVNyNa8EKkqox1Ohm_56riMFyU.Od1O-XCSw2Xa8wBN.mHWq8eodcIDXKWjMDDqcNkunVLT0EvjvAWq28gc6aOfKN0zeT0SQczxl0jqcWlziHXE8KmDL7CDYhOZT4rv--lN6wDNj998.YjJfxro1W_ERT7jOvI06yA")] [TestCase( "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwia2lkIjoidnI3Y1dLR2wtZzRXYV9DUkdvd05oQVlXX2dRYi1ha01iaWlneE4wRWtESSIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJ6aXAiOiJERUYifQ.NWLSv3Yq3IK2oNVgbDoVpcJ-i3iunOOWQhoULQRa5Haf4g2E9dJOgq7jPqUl347jRB6pkyj09PL9b2R5PUai5Z6KraW6vCOQM4zeA_Z3SAjONO2XNNDQZpA2TvsxrEXqG_89ck8rMOHnkFJBUrQp4jnwFeIswQQTtErdbsTXTyYdkuJk9j18-yrZM0px9FkbB3u5Fqn8Nu5GGRAVGBw_u73QbNbfgmZINgn-2WHCAdqAW5U776XnGSYxf4qIUcwzA8JjFOUU-0l3KqgvMTsN-f0XcHEGDqvxOWCVsgvibfMZ8rnAowirX6z8tIWrVCvqE-5jOX9gXe-xXMYTAi-a0xU2f1ZrJGcfoMoUL8-kePytbU4JdudNgx_F60WGqVI3wnLAj7V_u0mFumsaR6QjrasInNS7Dqi_Rg3T9wZFpa4_dUOx1j6z_r5Z7_GVV4fypli_prWJeN_34iazEfshYw33QngNMKYjNSvGb9JxYabZyTrOJImJsK503Ad_3sTAi4AENsKAnesz1GUCxkz-hONKEX9QfG3rxqt0PPXmX6Dm5NdbyWdUBSWu47eSv0sSH2xoj0Oov0c_c8JzdvkV82eNQRwyqezjSCq6NwmHtIJL_j4b79tqHWhWauXo24xsYLIA8qNpLIH9UfXEJwG33KQlmiCK-k8IHFWB0-_BzVk.m5zCt2SccAkr4hXF.ROdp1qpWiU_wYDyEjtgZp9XFcqL-Jb7r7u7LPhdWJ7nSSIRJM_UYxBUFiF3XOFL22r_67ml8slap7ylN5TGRQxtbtm-Yq_T2y9Df33SozoFY-2pIZg9mzUxN0hbGil5REbmleYyRfY7NsMDkZjWDXlOoQeI7ZjmnXBEEdtOam2-ccOW94rJE-xy7HdwZMdPgakSz9-KPtDPJQMRyMi1C9wUZ_R1FND4sSmjlUmLgJ-dywdIRK35bQMu5WEjlo9JoWxu8Aw8C-vjF5zXXNSMsn3W2YC1T3O9eGBNcVdA1-R_IgkC8lJqL_uwKMQuk5tB2bSO3wdjweVxszouvy3TzHWot75f6rTWbw1NphtSN3G3YUDnBIbnFG0-kU7gLCf3fvmIsL8mf0vopAN83Cwx9hJA.IU6vJRAhYR30TizHP07neQ")] [TestCase( "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwia2lkIjoidnI3Y1dLR2wtZzRXYV9DUkdvd05oQVlXX2dRYi1ha01iaWlneE4wRWtESSIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJ6aXAiOiJERUYifQ.srb2oytHYxTqcaLZiGNQX4QJqBOiEPZAgO4sZJdBA-koWu6-wliPy7YyqYc8-bCMAbiwp9XOoR8wRKK7pnaIsU66k9zCp1FjVcjkE420URdwagzPqqKoxcyr7wNIcAWjA8iMfXB1KlxVHbt4nryspoGwSvLMj7CxBkzOcAUw9naNV0B-RjNrtdpt7scYyBVlCjl9Rj4Qy1W1BGviU5VHYkLJa7NXQ34amTyXBRoTtxhAP3HIu8DXTnbWhyToU25THWswSOy7rNaLOqfsXLp0ecfpoVKXXjDjMjhcCo7o6QJO1Jc6IBKdj7OGhIHCJOQAZ0jE9XchZXR9oxIDlG4qV-JKKhldRtfkJdmIZ4Vx-jhMweaqu2LQy0ZA3F3JrtvjKhTiJFQrg-JVaUQsY_zTKmTKnZis1KsjkKNwdKi_oc5Ug1DAH0_WE4IU_pe5bfRdYYMWl6m1wAOoXd3TiKp1vfpDVyeWfeg-gohiuK0lszoVfiiA97Y5wtk5NpNpzKNThQecHoyRhAj3_E5iRpztjnqHh0I0BSQJFMVqdBjsQU4zZjRhkxsU1jVH_004jVLNyAgJ9jpB1UQzahMsTJsHPuhqvRu8-tjwK1juuDpZXctUdbSzYO8pDTbHz6ysDazyEniGqQFKWj1AEg2chGm2uVtoeFkkAPEZTkdv2Gsr2sA.4re8HD8VxtnSEjc8.hXDdDN4X1M1M9eB-2Kf4WemzOXlSKFeEAR8L_3KBOgAprGDIZygOxSAyBH0sSISMHk7SvSYwtt3HXbmB1hM12ZbQRLbFknLOv6Pw8Lr8CvVheOl70SKMkocx0HHlYXYp3r4ZrTY3AKlHpX3ePoHoMWXStgOt5EWKG5ciW018sFHKVKQG87hMgSvDt4FoZAN4yyHsMn9Sf5DB3LhNyAXyx-4Oz8q9q-M-X-ckYEcnJfZl_G4SOQPBa-Ly7MDEeNQ9fRHozbdHmZ1TzLFF4xZbda12V15fL_JNWUzwuhUL589l-RR119FQlKTxv6Unes3o0gdSz7-l0hQI3Q2eKdf0Jj_CMw8f-yPO89YSgVxbK452YxHK8JWKMCcweNNHhMBjFUssFcBpuBXcHeekjVbcYA.ADUZnHvl9fM3OmLeaibVuA")] [TestCase( "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwia2lkIjoidnI3Y1dLR2wtZzRXYV9DUkdvd05oQVlXX2dRYi1ha01iaWlneE4wRWtESSIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJ6aXAiOiJERUYifQ.R5TmfiDyi7dZhYz9NxduhqZc6GrfAERrDVGNLts6eHhU2SVMTAja1O9Rywrf_thPvbjQslM6ukXB8iI3hI6oWN2EY9SqUjKRto3zL2jdmdcXzfwxJFm1BnObMjYl9Jwy2ogEwLldXQhLAwMxVJWJbf31mZCgnVYC6DbPTEi-GLIkLDEn7Tj5y9iak3TjaE0hIxMk546Dda-q6I9QQ7YlDGV8m0Ijjh21yu2_B9H3Uh9LgIyrTN1Jw2saJRKVJgrtoV6e8WRaj5sDXarLNz6R2LhEtIjYjVioZvjBt1EeXADjcR9m1j3qG8V1f9boVocRTivvvaRvWd2NTH5yFGunDXr40oUmXXWXK1SfKsty85AAjlLOv5ZJsU1vhquA2XDgDVDJ7Nm1qC_9VeW2yCD01Ewh9sGiKscMqP1CbLxyVPfbuViVIe4g0h7Krlb6mZe9L7Sk18cLyFuCre7nYfB5ZToKnSkd8C5-ExMHfrcp9MJ196X6_n7YFKrc-Lzg7tvCRBG-6DFIQ1iqnme6crMN15qwo9VddOJOFXV815vNVyFXLhJAvr85q78aqyaE90qgY2QDNXyZXziTbXLurISL8i_Mdzt0J7cUyrvQLZaK0_pMJJvZOg3LvNalTGdJjUHUFwPxTbe-DRWZuPT81KVNyNa8EKkqox1Ohm_56riMFyU.Od1O-XCSw2Xa8wBN.mHWq8eodcIDXKWjMDDqcNkunVLT0EvjvAWq28gc6aOfKN0zeT0SQczxl0jqcWlziHXE8KmDL7CDYhOZT4rv--lN6wDNj998.YjJfxro1W_ERT7jOvI06yA")] [TestCase( "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwia2lkIjoidnI3Y1dLR2wtZzRXYV9DUkdvd05oQVlXX2dRYi1ha01iaWlneE4wRWtESSIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJ6aXAiOiJERUYifQ.dNozKGHneskpBgbTZs8-aA3jCgH4jjMJHPmL2J2EPyysIpt0o2DQa1S7Dn5we88OHz8d3OuC5S2bO0rpI6mKTnJB8RAkFIn9P0LlkvIma915Bp3stoDWW8-VL9LDKV9j0-5K8y7EakTBvu0RxyvCw_WxIkum1w3vKcCBfwgnMU6kyB7h2t_ZgMdBud-Rap2xnN5Xu0TNq0LDKtCvJ2pk0AzExyVoumOg8LocIeonMkQcIRf0l_6aVGzSJXpLPdld2I0NWUGGa8OwTeoqBC9u_28fNBQfbNHdabZcYTEZFpqA4zqMpkAHi-tzzC-BUigRBfKSl5qcYeJQROpzxhkBEY9V7oFPFeY7gh5hKZPVxljtlPbD9nJjTQ_YVJEKd164RlCNNexFtFObxKOCwE4nkY9ouHTseeAVSAwA67LaD-Ap668RxwP6wp6U-KYCyVfXL08HUre9dKYJZwD9jl48F1l5ZPhgrMchBpPjG2o77jISoMGE6PhR2sTbgbfxACh6NrIFujIUz4CuGah8a84mFVznJIws-d_vvRJUaeHPwhkR2WcC7waUkS_Uf7KLlGdAWbZgtO7TjYxaTyTnIxswOBeN1JMos3PYpmkbgOF2LLJ4yx6Aq_pOe8SszMK26sCvQzpfXn28b9JYKMAAplKuQITWtXexW_L-VHeKepMvTTI.BscV4pPkGDfSFNXn.GGwY5fFBj7uK_-MY_ovQqVSkkMRZ7wfEeJNktHeN-hB8UYAN-yykvXpOHO3kAP3C377PF4p7BaoEsbUtdDRLRbS0qBm8qx-2dU6SeWU2kBZ-4xcYaF0hZaH6Lv6QHKuA9cJPtJIGnN9ooqlegFTyjAEvJu_H0SH8n3wnDEe-6sMEFwCwuyiL33G3dneH8-ozTzrD86ZC101BIguBaS5C-NHAyt4GreR8UEgV3Mhqh51qxEO9FsRs9TNzkkaYZTuD9I-UTtIAf01XJ2O_hRawmwMEANjgVun_IzZYSNiDk9uuyi3gznwuqXwu4AjsDuhfhc2c_NR6bAoovaBKCQIyyzn0SwHfnXm8iV-uyc1SeE3IVEOVV5fpsUwI_YLGprbRlF3JCp1RKfcNV67oRfc1vg.UlFSOsFR_h1YGobdj3Umeg")] [TestCase( "eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIiwia2lkIjoidnI3Y1dLR2wtZzRXYV9DUkdvd05oQVlXX2dRYi1ha01iaWlneE4wRWtESSIsImN0eSI6ImFwcGxpY2F0aW9uL2pzb24iLCJ6aXAiOiJERUYifQ.sPKcV2qS_MWepdSwq5_tmg5DtnARKeGOu058CSz6aB04g3AgCUOMNUetotxdRlvW0im9qnwOHUe_75Aty1DSnzv2ZUcsVwjf44g5KFSFb30w1kWccoCW8F2-9uAxHnpOPsM2qT_enUXDLWvt6L2JiX30hTjh62PwEXFzo36FmExi1oqwFM_aOPahHamfSQ_qwZ1cJRPgN67amgM_UAu4fTHccobJPEiKyqB6cejRfvmduLwiu7RmvPWiZA-ROLVu-rUvLWD65OpxOXOjVmLbxeig85qdYUBI8u55PnjBPouP-hqWf55ZFFUSWZgJ_7lYzTpkzAYPw967-9t7jZmXirj7RoSbGs5dvorDpVVQjQS3xg6o7PG63OXy3CLSSVmyVPCwULMaloebvUZKCrzRTjSXSR4uaLfBZFl2oEp2dBJn9ly_g3l6bapI494YH5N6m3MgvSy2zloQqIShcXi2aMoE9eKVm5fuO0UgqdLecJQ_M_4kUBcSITj_pwNiySYJkHXwhJUDY0GzjPe9aNKLGYzD6IpXG27OmFk-C2VtnyaiCDwB_D77KvvgLGdZKBwN8aWRuJxv0S6UtimrVF0rxLI8EtAEyPgaxW0vfSKoCFGYwmLh5Yuwg1AE2PFT-EbAWM3XJB-JlpbdoX5Xj7ZY8CFQfFzeLUxAZjtISzpaxyQ.MkNrLEOLpw3-aYGX.F1wksBj0QSHdbzK9vWUGwroo93PgU2GZxA6TiDTWoNXIqYM4IxtOpBJpQM9-aKKHx99_nyYhatgAYKx8lZ7kLrFE7J-KYnI.rlpSHJrYBeiz-tqULrLPRg")] public void DecryptDataFromServer_None_ShouldWork(string data) { var engine = new FitEncryption(_container.Resolve<KeySet>(), _logger) { PublicKeyEncryption = _settings.PublicKeyEncryption, PrivateKeyDecryption = _settings.PrivateKeyDecryption }; var plain = engine.Decrypt(data); Console.WriteLine(plain.plainText); } }