Skip to content

Commit 0ace076

Browse files
committed
RandomId generator logic change
1 parent 5e5d4d0 commit 0ace076

File tree

3 files changed

+10
-27
lines changed

3 files changed

+10
-27
lines changed

src/Pandatech.Crypto/Pandatech.Crypto.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
<Copyright>MIT</Copyright>
99
<PackageIcon>pandatech.png</PackageIcon>
1010
<PackageReadmeFile>Readme.md</PackageReadmeFile>
11-
<Version>2.4.1</Version>
11+
<Version>2.5.0</Version>
1212
<Title>Pandatech.Crypto</Title>
1313
<PackageTags>Pandatech, library, encryption, hash, algorythms, security</PackageTags>
1414
<Description>PandaTech.Crypto is a .NET library simplifying common cryptograhic functions.</Description>
1515
<RepositoryUrl>https://github.com/PandaTechAM/be-lib-pandatech-crypto</RepositoryUrl>
16-
<PackageReleaseNotes>Aes256 empty string handle</PackageReleaseNotes>
16+
<PackageReleaseNotes>RandomId generator logic change</PackageReleaseNotes>
1717
</PropertyGroup>
1818

1919
<ItemGroup>
@@ -23,7 +23,7 @@
2323

2424
<ItemGroup>
2525
<PackageReference Include="BouncyCastle.NetCore" Version="2.2.1" />
26-
<PackageReference Include="Konscious.Security.Cryptography.Argon2" Version="1.3.0" />
26+
<PackageReference Include="Konscious.Security.Cryptography.Argon2" Version="1.3.1" />
2727
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
2828
<PackageReference Include="Pandatech.RegexBox" Version="1.2.4" />
2929
</ItemGroup>

src/Pandatech.Crypto/Random.cs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,11 @@ public static string GenerateAes256KeyString()
2020
return Convert.ToBase64String(buffer);
2121
}
2222

23-
public static long GeneratePandaId(long? previousId)
23+
public static long GenerateIdWithVariableSequence(long previousId, int approximateSequenceVariability = 100)
2424
{
25-
var random = GenerateBytes(4);
26-
var randomValue = BitConverter.ToInt32(random, 0) & 0x7FFFFFFF;
27-
var randomOffset = randomValue % 36 + 1;
25+
var minimumRandRange = approximateSequenceVariability / 25;
26+
var random = System.Random.Shared.NextInt64(minimumRandRange, approximateSequenceVariability + 1);
2827

29-
if (previousId is 0 or null)
30-
{
31-
return 1_000_000 + randomOffset;
32-
}
33-
34-
return (long)(previousId + randomOffset)!;
28+
return (previousId + random);
3529
}
3630
}

test/Pandatech.Crypto.Tests/RandomTests.cs

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,15 @@ public void Generate_ShouldReturnByteArray()
1111
Assert.NotNull(randomBytes);
1212
Assert.Equal(length, randomBytes.Length);
1313
}
14-
15-
[Fact]
16-
public void GeneratePandaId_WithZeroPreviousId_ReturnsValidId()
17-
{
18-
const long previousId = 0;
19-
for (var i = 0; i < 1_000_000; ++i)
20-
{
21-
var newId = Random.GeneratePandaId(previousId);
22-
23-
Assert.True(newId is > 1_000_000 and < 1_000_037);
24-
}
25-
}
14+
2615

2716
[Fact]
2817
public void GeneratePandaId_WithNonZeroPreviousId_ReturnsIncrementedId()
2918
{
3019
const long previousId = 1_000_000;
3120
for (var i = 0; i < 1_000_000; ++i)
3221
{
33-
var newId = Random.GeneratePandaId(previousId);
22+
var newId = Random.GenerateIdWithVariableSequence(previousId);
3423

3524
Assert.True(newId > previousId);
3625
}
@@ -43,7 +32,7 @@ public void GeneratePandaId_WithinReasonableIterations_DoesNotProduceDuplicates(
4332

4433
for (var i = 0; i < 1_000_000; ++i)
4534
{
46-
var id = Random.GeneratePandaId(previousId);
35+
var id = Random.GenerateIdWithVariableSequence(previousId);
4736
Assert.NotEqual(previousId, id);
4837
previousId = id;
4938
}

0 commit comments

Comments
 (0)