public void EksBuilderV1WithDummy_NLSigHasDummyText()
        {
            //Arrange
            var keyCount           = 500;
            var lf                 = new LoggerFactory();
            var eksBuilderV1Logger = new EksBuilderV1LoggingExtensions(lf.CreateLogger <EksBuilderV1LoggingExtensions>());
            var dtp                = new StandardUtcDateTimeProvider();
            var dummySigner        = new DummyCmsSigner();

            var sut = new EksBuilderV1(
                new FakeEksHeaderInfoConfig(),
                TestSignerHelpers.CreateEcdsaSigner(lf),
                dummySigner,
                dtp,
                new GeneratedProtobufEksContentFormatter(),
                eksBuilderV1Logger);

            //Act
            var result = sut.BuildAsync(GetRandomKeys(keyCount, 123)).GetAwaiter().GetResult();

            //Assert
            using var zipFileInMemory = new MemoryStream();
            zipFileInMemory.Write(result, 0, result.Length);

            using (var zipFileContent = new ZipArchive(zipFileInMemory, ZipArchiveMode.Read, false))
            {
                var nlSignature = zipFileContent.ReadEntry(ZippedContentEntryNames.NlSignature);
                Assert.NotNull(nlSignature);
                Assert.Equal(nlSignature, dummySigner.DummyContent);
            }
        }
        public void Build(int keyCount, int seed)
        {
            var lf      = new LoggerFactory();
            var dtp     = new StandardUtcDateTimeProvider();
            var builder = new EksBuilderV1(
                new FakeEksHeaderInfoConfig(),
                new EcdSaSigner(new EmbeddedResourceCertificateProvider(new HardCodedCertificateLocationConfig("TestECDSA.p12", ""), lf.CreateLogger <EmbeddedResourceCertificateProvider>())),
                new CmsSignerEnhanced(
                    new EmbeddedResourceCertificateProvider(new HardCodedCertificateLocationConfig("TestRSA.p12", "Covid-19!"), lf.CreateLogger <EmbeddedResourceCertificateProvider>()),
                    new EmbeddedResourcesCertificateChainProvider(new HardCodedCertificateLocationConfig("StaatDerNLChain-Expires2020-08-28.p7b", "")),
                    dtp
                    ),
                dtp,
                new GeneratedProtobufEksContentFormatter(),
                lf.CreateLogger <EksBuilderV1>()
                );

            //new StandardUtcDateTimeProvider(), new GeneratedProtobufContentFormatter(), new LoggerFactory().CreateLogger<ExposureKeySetBuilderV1>());

            var actual = builder.BuildAsync(GetRandomKeys(keyCount, seed)).GetAwaiter().GetResult();

            Assert.IsTrue(actual.Length > 0);
            Trace.WriteLine($"{keyCount} keys = {actual.Length} bytes.");

            using (var fs = new FileStream("EKS.zip", FileMode.Create, FileAccess.Write))
            {
                fs.Write(actual, 0, actual.Length);
            }
        }
        public void Build(int keyCount, int seed)
        {
            //Arrange
            var lf = new LoggerFactory();
            var eksBuilderV1Logger = new EksBuilderV1LoggingExtensions(lf.CreateLogger <EksBuilderV1LoggingExtensions>());
            var dtp = new StandardUtcDateTimeProvider();

            var sut = new EksBuilderV1(
                new FakeEksHeaderInfoConfig(),
                TestSignerHelpers.CreateEcdsaSigner(lf),
                TestSignerHelpers.CreateCmsSignerEnhanced(lf),
                dtp,
                new GeneratedProtobufEksContentFormatter(),
                eksBuilderV1Logger);

            //Act
            var result = sut.BuildAsync(GetRandomKeys(keyCount, seed)).GetAwaiter().GetResult();

            Trace.WriteLine($"{keyCount} keys = {result.Length} bytes.");

            //Assert
            Assert.True(result.Length > 0);

            using (var fs = new FileStream("EKS.zip", FileMode.Create, FileAccess.Write))
            {
                fs.Write(result, 0, result.Length);
            }
        }
예제 #4
0
        public void EksBuilderV1WithDummy_NLSigHasDummyText()
        {
            //Arrange
            int KeyCount    = 500;
            var lf          = new LoggerFactory();
            var dtp         = new StandardUtcDateTimeProvider();
            var dummySigner = new DummyCmsSigner();

            var sut = new EksBuilderV1(
                new FakeEksHeaderInfoConfig(),
                new EcdSaSigner(
                    new EmbeddedResourceCertificateProvider(
                        new HardCodedCertificateLocationConfig("TestECDSA.p12", ""),
                        lf.CreateLogger <EmbeddedResourceCertificateProvider>())
                    ),
                dummySigner,
                dtp,
                new GeneratedProtobufEksContentFormatter(),
                lf.CreateLogger <EksBuilderV1>());

            //Act
            var result = sut.BuildAsync(GetRandomKeys(KeyCount, 123)).GetAwaiter().GetResult();

            //Assert
            using var zipFileInMemory = new MemoryStream();
            zipFileInMemory.Write(result, 0, result.Length);
            using (var zipFileContent = new ZipArchive(zipFileInMemory, ZipArchiveMode.Read, false))
            {
                var NlSignature = zipFileContent.ReadEntry(ZippedContentEntryNames.NLSignature);
                Assert.NotNull(NlSignature);
                Assert.Equal(NlSignature, dummySigner.DummyContent);
            }
        }
예제 #5
0
        private RemoveExpiredManifestsV4Command CompileRemoveExpiredManifestsV4Command()
        {
            var logger           = new ExpiredManifestV4LoggingExtensions(new LoggerFactory().CreateLogger <ExpiredManifestV4LoggingExtensions>());
            var dateTimeProvider = new StandardUtcDateTimeProvider();

            var result = new RemoveExpiredManifestsV4Command(_ContentDbProvider.CreateNew, logger, _ManifestConfigMock.Object, dateTimeProvider);

            return(result);
        }
예제 #6
0
        private RemoveExpiredManifestsCommand CompileRemoveExpiredManifestsCommand()
        {
            var loggerMock       = new Mock <ILogger <RemoveExpiredManifestsReceiver> >();
            var dateTimeProvider = new StandardUtcDateTimeProvider();
            var receiver         = new RemoveExpiredManifestsReceiver(_contentDbProvider.CreateNew, _manifestConfigMock.Object, dateTimeProvider, loggerMock.Object);

            var result = new RemoveExpiredManifestsCommand(receiver);

            return(result);
        }
        public void SnapshotSame()
        {
            var dtp = new StandardUtcDateTimeProvider();
            var v0  = dtp.Snapshot;

            Thread.Sleep(500);
            var v1 = dtp.Snapshot;

            Assert.Equal(v0, v1);
        }
        public void Build(int keyCount, int seed)
        {
            //Arrange
            var lf = new LoggerFactory();
            var certProviderLogger = new EmbeddedCertProviderLoggingExtensions(lf.CreateLogger <EmbeddedCertProviderLoggingExtensions>());
            var eksBuilderV1Logger = new EksBuilderV1LoggingExtensions(lf.CreateLogger <EksBuilderV1LoggingExtensions>());
            var dtp = new StandardUtcDateTimeProvider();

            var cmsCertLoc = new Mock <IEmbeddedResourceCertificateConfig>();

            cmsCertLoc.Setup(x => x.Path).Returns("TestRSA.p12");
            cmsCertLoc.Setup(x => x.Password).Returns("Covid-19!"); //Not a secret.

            var cmsCertChainLoc = new Mock <IEmbeddedResourceCertificateConfig>();

            cmsCertChainLoc.Setup(x => x.Path).Returns("StaatDerNLChain-Expires2020-08-28.p7b");
            cmsCertChainLoc.Setup(x => x.Password).Returns(string.Empty); //Not a secret.

            //resign some
            var cmsSigner = new CmsSignerEnhanced(
                new EmbeddedResourceCertificateProvider(cmsCertLoc.Object, certProviderLogger),
                new EmbeddedResourcesCertificateChainProvider(cmsCertChainLoc.Object),
                new StandardUtcDateTimeProvider()
                );

            var gaCertLoc = new Mock <IEmbeddedResourceCertificateConfig>();

            gaCertLoc.Setup(x => x.Path).Returns("TestECDSA.p12");
            gaCertLoc.Setup(x => x.Password).Returns(string.Empty); //Not a secret.

            var sut = new EksBuilderV1(
                new FakeEksHeaderInfoConfig(),
                new EcdSaSigner(
                    new EmbeddedResourceCertificateProvider(
                        gaCertLoc.Object,
                        certProviderLogger)),
                cmsSigner,
                dtp,
                new GeneratedProtobufEksContentFormatter(),
                eksBuilderV1Logger
                );

            //Act
            var result = sut.BuildAsync(GetRandomKeys(keyCount, seed)).GetAwaiter().GetResult();

            Trace.WriteLine($"{keyCount} keys = {result.Length} bytes.");

            //Assert
            Assert.True(result.Length > 0);

            using (var fs = new FileStream("EKS.zip", FileMode.Create, FileAccess.Write))
            {
                fs.Write(result, 0, result.Length);
            }
        }
        public string[] Execute()
        {
            //TODO cant test this - inject!
            var expired = new StandardUtcDateTimeProvider().Now() - TimeSpan.FromDays(_GaenContentConfig.ExposureKeySetLifetimeDays);
            var result  = _DbConfig.Set <ExposureKeySetContentEntity>()
                          .Where(x => x.Release > expired)
                          .Select(x => x.PublishingId)
                          .ToArray();

            return(result);
        }
        public void NewEksStuffingGeneratorTest()
        {
            var rng = new StandardRandomNumberGenerator(); var eksConfigMock = new Mock <IEksConfig>(MockBehavior.Strict);

            eksConfigMock.Setup(x => x.LifetimeDays).Returns(14);
            var dtp = new StandardUtcDateTimeProvider();

            var stuffer = new EksStuffingGeneratorMk2(new TransmissionRiskLevelCalculationMk2(), rng, dtp, eksConfigMock.Object);

            var result = stuffer.Execute(10);

            Assert.Equal(10, result.Length);
        }
        public AgExposureKeySetsConfig Execute()
        {
            var expired = new StandardUtcDateTimeProvider().Now() - TimeSpan.FromDays(_AgConfig.ExposureKeySetLifetimeDays);
            var activeExposureKeySets = _DbConfig.Current.Set <ExposureKeySetContentEntity>()
                                        .Where(x => x.Release > expired)
                                        .Select(x => x.PublishingId)
                                        .ToArray();

            return(new AgExposureKeySetsConfig
            {
                Ids = activeExposureKeySets
            });
        }
        public void Valid(string labConfirmationId)
        {
            // Assemble
            var dtp       = new StandardUtcDateTimeProvider();
            var validator = new AuthorisationArgsValidator(new LabConfirmationIdService(new StandardRandomNumberGenerator()), dtp);
            var args      = new AuthorisationArgs {
                LabConfirmationId = labConfirmationId, DateOfSymptomsOnset = dtp.Snapshot
            };
            // Act
            var result = validator.Validate(args);

            // Assert
            Assert.Empty(result);
        }
예제 #13
0
        public TestJwtGeneratorService(IJwtService jwtService, IUtcDateTimeProvider dateTimeProvider,
                                       ILogger <TestJwtGeneratorService> logger)
        {
            _jwtService       = jwtService ?? throw new ArgumentNullException(nameof(jwtService));
            _dateTimeProvider = dateTimeProvider ?? throw new ArgumentNullException(nameof(dateTimeProvider));
            _logger           = logger ?? throw new ArgumentNullException(nameof(logger));


            _logger.WriteTestJwtConstructed();
            var testJwtData = new Dictionary <string, object> {
                { "access_token", "test_access_token" }, { "id", "0" }
            };

            var expiry = new StandardUtcDateTimeProvider().Now().AddDays(7).ToUnixTimeU64();

            _logger.WriteGeneratedToken(jwtService.Generate(expiry, testJwtData));
        }
        public TestJwtGeneratorService(IJwtService jwtService, IUtcDateTimeProvider dateTimeProvider,
                                       ILogger <TestJwtGeneratorService> logger)
        {
            _JwtService       = jwtService ?? throw new ArgumentNullException(nameof(jwtService));
            _DateTimeProvider = dateTimeProvider ?? throw new ArgumentNullException(nameof(dateTimeProvider));
            _Logger           = logger ?? throw new ArgumentNullException(nameof(logger));


            _Logger.LogInformation("TestJwtGeneratorService Singleton constructed, generating test JWT now...");
            var testJwtData = new Dictionary <string, object> {
                { "access_token", "test_access_token" }, { "id", "0" }
            };

            var expiry = new StandardUtcDateTimeProvider().Now().AddDays(7).ToUnixTimeU64();

            _Logger.LogInformation(jwtService.Generate(expiry, testJwtData));
        }
        public void EksBuilderV1WithDummy_NLSigHasDummyText()
        {
            //Arrange
            var KeyCount           = 500;
            var lf                 = new LoggerFactory();
            var certProviderLogger = new EmbeddedCertProviderLoggingExtensions(lf.CreateLogger <EmbeddedCertProviderLoggingExtensions>());
            var eksBuilderV1Logger = new EksBuilderV1LoggingExtensions(lf.CreateLogger <EksBuilderV1LoggingExtensions>());
            var dtp                = new StandardUtcDateTimeProvider();
            var dummySigner        = new DummyCmsSigner();

            var gaCertLoc = new Mock <IEmbeddedResourceCertificateConfig>();

            gaCertLoc.Setup(x => x.Path).Returns("TestECDSA.p12");
            gaCertLoc.Setup(x => x.Password).Returns(string.Empty); //Not a secret.

            var sut = new EksBuilderV1(
                new FakeEksHeaderInfoConfig(),
                new EcdSaSigner(
                    new EmbeddedResourceCertificateProvider(
                        gaCertLoc.Object,
                        certProviderLogger)
                    ),
                dummySigner,
                dtp,
                new GeneratedProtobufEksContentFormatter(),
                eksBuilderV1Logger
                );

            //Act
            var result = sut.BuildAsync(GetRandomKeys(KeyCount, 123)).GetAwaiter().GetResult();

            //Assert
            using var zipFileInMemory = new MemoryStream();
            zipFileInMemory.Write(result, 0, result.Length);
            using (var zipFileContent = new ZipArchive(zipFileInMemory, ZipArchiveMode.Read, false))
            {
                var NlSignature = zipFileContent.ReadEntry(ZippedContentEntryNames.NLSignature);
                Assert.NotNull(NlSignature);
                Assert.Equal(NlSignature, dummySigner.DummyContent);
            }
        }
        private ManifestUpdateCommand CreateManifestJob()
        {
            var eksConfig = new Mock <IEksConfig>(MockBehavior.Strict);

            eksConfig.Setup(x => x.LifetimeDays).Returns(14);

            var _Dtp = new StandardUtcDateTimeProvider();

            var jsonSerializer = new StandardJsonSerializer();

            return(new ManifestUpdateCommand(
                       new ManifestBuilder(_ContentDbProvider.CreateNew(), eksConfig.Object, _Dtp),
                       new ManifestBuilderV3(_ContentDbProvider.CreateNew(), eksConfig.Object, _Dtp),
                       new ManifestBuilderV4(_ContentDbProvider.CreateNew(), eksConfig.Object, _Dtp),
                       _ContentDbProvider.CreateNew,
                       new ManifestUpdateCommandLoggingExtensions(_Lf.CreateLogger <ManifestUpdateCommandLoggingExtensions>()),
                       _Dtp,
                       jsonSerializer,
                       () => new StandardContentEntityFormatter(new ZippedSignedContentFormatter(_NlSigner.Object), new Sha256HexPublishingIdService(), jsonSerializer)
                       ));
        }
예제 #17
0
        static void Main(string[] args)
        {
            try
            {
                var standardUtcDateTimeProvider = new StandardUtcDateTimeProvider();
                var config = AppSettingsFromJsonFiles.GetConfigurationRoot();

                using var inputContext = new DbContextProvider <WorkflowDbContext>(
                          () => new WorkflowDbContext(new PostGresDbContextOptionsBuilder(new StandardEfDbConfig(config, "Input")).Build())
                          );

                var jobConfigBuilder = new PostGresDbContextOptionsBuilder(new StandardEfDbConfig(config, "Job"));
                using var jobContext = new DbContextProvider <ExposureKeySetsBatchJobDbContext>(
                          () => new ExposureKeySetsBatchJobDbContext(jobConfigBuilder.Build())
                          );

                using var outputContext = new DbContextProvider <ExposureContentDbContext>(
                          () => new ExposureContentDbContext(new PostGresDbContextOptionsBuilder(new StandardEfDbConfig(config, "Output")).Build())
                          );

                using var bb = new ExposureKeySetBatchJob(
                          new DbTekSource(inputContext),
                          jobConfigBuilder,
                          standardUtcDateTimeProvider,
                          new ExposureKeySetDbWriter(outputContext, new Sha256PublishingIdCreator(new HardCodedExposureKeySetSigning())),
                          new HardCodedAgConfig(),
                          new JsonContentExposureKeySetFormatter(),
                          new ExposureKeySetBuilderV1(
                              new HsmExposureKeySetHeaderInfoConfig(config),
                              new HardCodedExposureKeySetSigning(), standardUtcDateTimeProvider, new GeneratedProtobufContentFormatter())
                          , new ExposureKeySetBatchJobConfig(config)
                          );

                bb.Execute().GetAwaiter().GetResult();
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }
        private ManifestUpdateCommand CompileManifestUpdateCommand()
        {
            var eksConfigMock       = new Mock <IEksConfig>();
            var lf                  = new LoggerFactory();
            var dateTimeProvider    = new StandardUtcDateTimeProvider();
            var jsonSerialiser      = new StandardJsonSerializer();
            var entityFormatterMock = new Mock <IContentEntityFormatter>();

            Func <IContentEntityFormatter> formatterForV3 = () =>
                                                            new StandardContentEntityFormatter(
                new ZippedSignedContentFormatter(
                    TestSignerHelpers.CreateCmsSignerEnhanced(lf)),
                new Sha256HexPublishingIdService(),
                jsonSerialiser
                );

            var result = new ManifestUpdateCommand(
                new ManifestBuilder(
                    _ContentDbProvider.CreateNew(),
                    eksConfigMock.Object,
                    dateTimeProvider),
                new ManifestBuilderV3(
                    _ContentDbProvider.CreateNew(),
                    eksConfigMock.Object,
                    dateTimeProvider),
                new ManifestBuilderV4(
                    _ContentDbProvider.CreateNew(),
                    eksConfigMock.Object,
                    dateTimeProvider),
                _ContentDbProvider.CreateNew,
                new ManifestUpdateCommandLoggingExtensions(lf.CreateLogger <ManifestUpdateCommandLoggingExtensions>()),
                dateTimeProvider,
                jsonSerialiser,
                entityFormatterMock.Object,
                formatterForV3
                );

            return(result);
        }