public static byte[] GetAndroidNonce(this V1DiagnosisSubmissionParameter submission) { var cleartext = GetAndroidNonceClearText(submission); var nonce = GetSha256(cleartext); return(nonce); }
public void PropertiesTest() { // preparation var model = new V1DiagnosisSubmissionParameter(); // model property access Helper.ModelTestHelper.PropetiesTest(model); }
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, }; }
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 ); }
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); }
public void CreateMethod() { // action var model = new V1DiagnosisSubmissionParameter(); }
static string GetAndroidNonceClearText(this V1DiagnosisSubmissionParameter submission) => string.Join("|", submission.AppPackageName, GetKeyString(submission.Keys), GetRegionString(submission.Regions), submission.VerificationPayload);
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 }