From d1248e611b6adc5bd52a77a400fc31a2c748eba4 Mon Sep 17 00:00:00 2001 From: jon8787 <112368577+jon8787@users.noreply.github.com> Date: Fri, 26 Jul 2024 15:08:35 +1000 Subject: [PATCH 1/2] jon-UID2-3680-test-coverage-v4-base64-tokens --- test/UID2.Client.Test/BidstreamClientTests.cs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/UID2.Client.Test/BidstreamClientTests.cs b/test/UID2.Client.Test/BidstreamClientTests.cs index 1d59bc4..8acbb4f 100644 --- a/test/UID2.Client.Test/BidstreamClientTests.cs +++ b/test/UID2.Client.Test/BidstreamClientTests.cs @@ -81,6 +81,26 @@ private void SmokeTestForBidstream(IdentityScope identityScope, TokenVersion tok DecryptAndAssertSuccess(advertisingToken, tokenVersion); } + [Theory] + [InlineData(IdentityScope.UID2)] + [InlineData(IdentityScope.EUID)] + private void CanDecryptV4TokenEncodedAsBase64(IdentityScope identityScope) + { + Refresh(KeyBidstreamResponse(new[] { MASTER_KEY, SITE_KEY }, identityScope)); + + var now = DateTime.UtcNow; + var advertisingTokenBase64Url = AdvertisingTokenBuilder.Builder().WithVersion(TokenVersion.V4).WithScope(identityScope).WithEstablished(now.AddMonths(-4)).WithGenerated(now.AddDays(-1)).WithExpiry(now.AddDays(2)).Build(); + + var tokenAsBinary = UID2Base64UrlCoder.Decode(advertisingTokenBase64Url); + var advertisingTokenBase64 = Convert.ToBase64String(tokenAsBinary); + Assert.True(advertisingTokenBase64.Contains("=")); + Assert.True(advertisingTokenBase64.Contains("/")); + Assert.True(advertisingTokenBase64.Contains("+")); + + DecryptAndAssertSuccess(advertisingTokenBase64, TokenVersion.V4); + } + + private void DecryptAndAssertSuccess(string advertisingToken, TokenVersion tokenVersion) { var res = _client.DecryptTokenIntoRawUid(advertisingToken, null); From d116b4874b9239abbdbeca3f666097b3d3721189 Mon Sep 17 00:00:00 2001 From: jon8787 <112368577+jon8787@users.noreply.github.com> Date: Mon, 29 Jul 2024 11:27:31 +1000 Subject: [PATCH 2/2] Regenerate token for test if it didn't have base64-specific chars +, =, / in it --- test/UID2.Client.Test/BidstreamClientTests.cs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/test/UID2.Client.Test/BidstreamClientTests.cs b/test/UID2.Client.Test/BidstreamClientTests.cs index 8acbb4f..59c5b4d 100644 --- a/test/UID2.Client.Test/BidstreamClientTests.cs +++ b/test/UID2.Client.Test/BidstreamClientTests.cs @@ -89,13 +89,15 @@ private void CanDecryptV4TokenEncodedAsBase64(IdentityScope identityScope) Refresh(KeyBidstreamResponse(new[] { MASTER_KEY, SITE_KEY }, identityScope)); var now = DateTime.UtcNow; - var advertisingTokenBase64Url = AdvertisingTokenBuilder.Builder().WithVersion(TokenVersion.V4).WithScope(identityScope).WithEstablished(now.AddMonths(-4)).WithGenerated(now.AddDays(-1)).WithExpiry(now.AddDays(2)).Build(); - var tokenAsBinary = UID2Base64UrlCoder.Decode(advertisingTokenBase64Url); - var advertisingTokenBase64 = Convert.ToBase64String(tokenAsBinary); - Assert.True(advertisingTokenBase64.Contains("=")); - Assert.True(advertisingTokenBase64.Contains("/")); - Assert.True(advertisingTokenBase64.Contains("+")); + string advertisingTokenBase64; + do + { + var advertisingTokenBase64Url = AdvertisingTokenBuilder.Builder().WithVersion(TokenVersion.V4).WithScope(identityScope).WithEstablished(now.AddMonths(-4)).WithGenerated(now.AddDays(-1)).WithExpiry(now.AddDays(2)).Build(); + var tokenAsBinary = UID2Base64UrlCoder.Decode(advertisingTokenBase64Url); + advertisingTokenBase64 = Convert.ToBase64String(tokenAsBinary); + + } while (!advertisingTokenBase64.Contains("=") || !advertisingTokenBase64.Contains("/") || !advertisingTokenBase64.Contains("+")); DecryptAndAssertSuccess(advertisingTokenBase64, TokenVersion.V4); }