Beispiel #1
0
        public static byte[] GetAndroidNonce(this V1DiagnosisSubmissionParameter submission)
        {
            var cleartext = GetAndroidNonceClearText(submission);
            var nonce     = GetSha256(cleartext);

            return(nonce);
        }
Beispiel #2
0
        public void PropertiesTest()
        {
            // preparation
            var model = new V1DiagnosisSubmissionParameter();

            // model property access
            Helper.ModelTestHelper.PropetiesTest(model);
        }
Beispiel #3
0
        public void CreateMethod()
        {
            // action
            var model = new V1DiagnosisSubmissionParameter();

            // assert
            Assert.IsNotNull(model);
        }
 public async Task<bool> Validation(V1DiagnosisSubmissionParameter param, DateTimeOffset requestTime)
 {
     var app = await AuthApp.GetAsync(param.Platform);
     // unsupported
     if (app == null) return false;
     if (!app.DeviceValidationEnabled) return true;
     return param.Platform switch
     {
         "android" =>  Android.Validation(param, param.GetAndroidNonce(), requestTime, app),
         "ios" => await Apple.Validation(param, requestTime, app),
         _ => false,
     };
 }
Beispiel #5
0
        public void DeviceVerificationTest2()
        {
            var platform = "Android";

            V1DiagnosisSubmissionParameter.Key[] dummyDiagnosisKeyDataList = new V1DiagnosisSubmissionParameter.Key[] {
                CreateDiagnosisKey("KeyData1", 10000, 140),
                CreateDiagnosisKey("KeyData2", 20000, 141),
                CreateDiagnosisKey("KeyData3", 30000, 142),
                CreateDiagnosisKey("KeyData4", 40000, 143),
                CreateDiagnosisKey("KeyData5", 50000, 70),
            };

            var dummyRegions = new string[]
            {
                "440",
                "441",
            };

            var dummyDeviceVerificationPayload = "DeviceVerificationPayload THIS STRING IS MEANINGLESS";
            var dummyAppPackageName            = "jp.go.mhlw.cocoa.unit_test";
            var dummyVerificationPayload       = "VerificationPayload THIS STRING IS MEANINGLESS";

            // This value will not affect any result.
            var dummyPadding = new Random().Next().ToString();

            // preparation
            var model = new V1DiagnosisSubmissionParameter()
            {
                Platform = platform,
                Regions  = dummyRegions,
                Keys     = dummyDiagnosisKeyDataList,
                DeviceVerificationPayload = dummyDeviceVerificationPayload,
                AppPackageName            = dummyAppPackageName,
                VerificationPayload       = dummyVerificationPayload,
                Padding = dummyPadding,
            };

            Assert.AreEqual(dummyDeviceVerificationPayload, model.JwsPayload);
            Assert.AreEqual(
                EXPECTED_CLEAR_TEXT_V1,
                model.ClearText
                );

            Assert.AreEqual(dummyDeviceVerificationPayload, model.DeviceToken);
            Assert.AreEqual(
                EXPECTED_TRANSACTION_ID_SEED_V1,
                model.TransactionIdSeed
                );
        }
Beispiel #6
0
        public void ToModelTest(string keyData, int period, int expectedPeriod, int start)
        {
            // preparation
            var keyDataBytes  = Encoding.UTF8.GetBytes(keyData);
            var keyDataBase64 = Convert.ToBase64String(keyDataBytes);
            var model         = new V1DiagnosisSubmissionParameter();

            model.Keys = new V1DiagnosisSubmissionParameter.Key[] {
                new V1DiagnosisSubmissionParameter.Key()
                {
                    KeyData = keyDataBase64, RollingPeriod = (uint)period, RollingStartNumber = (uint)start, TransmissionRisk = 0
                }
            };
            var timestamp = (ulong)DateTimeOffset.UtcNow.ToUnixTimeSeconds();
            // action
            var result = model.Keys.Select(_ => _.ToModel(model, timestamp));
            var item   = result.First();

            // assert
            CollectionAssert.AreEqual(keyDataBytes, item.KeyData);
            Assert.AreEqual(expectedPeriod, item.RollingPeriod);
            Assert.AreEqual(start, item.RollingStartIntervalNumber);
        }
Beispiel #7
0
 public void CreateMethod()
 {
     // action
     var model = new V1DiagnosisSubmissionParameter();
 }
Beispiel #8
0
 static string GetAndroidNonceClearText(this V1DiagnosisSubmissionParameter submission) =>
 string.Join("|", submission.AppPackageName, GetKeyString(submission.Keys), GetRegionString(submission.Regions), submission.VerificationPayload);
Beispiel #9
0
        public async Task RunAsyncMethod(bool isValid,
                                         bool isValidDevice,
                                         string region,
                                         string verificationPayload,
                                         string platform,
                                         string userUuid)
        {
            // preparation
            var config = new Mock <IConfiguration>();

            config.Setup(_ => _["SupportRegions"]).Returns("Region1,Region2");
            var diagnosisRepo = new Mock <IDiagnosisRepository>();

            diagnosisRepo.Setup(_ => _.SubmitDiagnosisAsync(It.IsAny <string>(),
                                                            It.IsAny <DateTimeOffset>(),
                                                            It.IsAny <string>(),
                                                            It.IsAny <TemporaryExposureKeyModel[]>()))
            .ReturnsAsync(new DiagnosisModel());
            var tekRepo          = new Mock <ITemporaryExposureKeyRepository>();
            var validation       = new Mock <IValidationUserService>();
            var validationServer = new Mock <IValidationServerService>();

            validationServer.Setup(_ => _.Validate(It.IsAny <HttpRequest>())).Returns(IValidationServerService.ValidateResult.Success);

            var validationResult = new IValidationUserService.ValidateResult()
            {
                IsValid = isValid
            };

            validation.Setup(_ => _.ValidateAsync(It.IsAny <HttpRequest>(), It.IsAny <IUser>())).ReturnsAsync(validationResult);
            var deviceCheck = new Mock <IV1DeviceValidationService>();

            deviceCheck.Setup(_ => _.Validation(It.IsAny <V1DiagnosisSubmissionParameter>(), It.IsAny <DateTimeOffset>())).ReturnsAsync(isValidDevice);
            var verification = new Mock <IVerificationService>();
            var logger       = new Mock.LoggerMock <Covid19Radar.Api.DiagnosisApi>();
            var diagnosisApi = new DiagnosisApi(config.Object,
                                                diagnosisRepo.Object,
                                                tekRepo.Object,
                                                validation.Object,
                                                deviceCheck.Object,
                                                verification.Object,
                                                validationServer.Object,
                                                logger);
            var context = new Mock <HttpContext>();
            var keydata = new byte[16];

            RandomNumberGenerator.Create().GetBytes(keydata);
            var keyDataString = Convert.ToBase64String(keydata);
            var startNumber   = (uint)DateTimeOffset.UtcNow.ToUnixTimeSeconds() / 600;
            var bodyJson      = new V1DiagnosisSubmissionParameter()
            {
                VerificationPayload       = verificationPayload,
                Regions                   = new[] { region },
                UserUuid                  = userUuid,
                Platform                  = platform,
                DeviceVerificationPayload = "DeviceVerificationPayload",
                AppPackageName            = "Covid19Radar",
                Keys = new V1DiagnosisSubmissionParameter.Key[] {
                    new V1DiagnosisSubmissionParameter.Key()
                    {
                        KeyData = keyDataString, RollingPeriod = 0, RollingStartNumber = startNumber
                    },
                    new V1DiagnosisSubmissionParameter.Key()
                    {
                        KeyData = keyDataString, RollingPeriod = 0, RollingStartNumber = startNumber
                    }
                }
            };
            var bodyString = Newtonsoft.Json.JsonConvert.SerializeObject(bodyJson);

            using var stream = new System.IO.MemoryStream();
            using (var writer = new System.IO.StreamWriter(stream, leaveOpen: true))
            {
                await writer.WriteAsync(bodyString);

                await writer.FlushAsync();
            }
            stream.Seek(0, System.IO.SeekOrigin.Begin);
            context.Setup(_ => _.Request.Body).Returns(stream);
            // action
            await diagnosisApi.RunAsync(context.Object.Request);

            // assert
        }