diff --git a/src/Identity/Extensions.Core/src/Base32.cs b/src/Identity/Extensions.Core/src/Base32.cs index 579a58feac..31ee4e95df 100644 --- a/src/Identity/Extensions.Core/src/Base32.cs +++ b/src/Identity/Extensions.Core/src/Base32.cs @@ -89,7 +89,7 @@ namespace Microsoft.AspNetCore.Identity uint b1, b2, b3, b4, b5; int retVal; - switch (offset - input.Length) + switch (input.Length - offset) { case 1: retVal = 2; break; case 2: retVal = 4; break; diff --git a/src/Identity/test/Identity.Test/Base32Test.cs b/src/Identity/test/Identity.Test/Base32Test.cs new file mode 100644 index 0000000000..27fff67a6b --- /dev/null +++ b/src/Identity/test/Identity.Test/Base32Test.cs @@ -0,0 +1,40 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System; +using System.Security.Cryptography; +using Xunit; + +namespace Microsoft.AspNetCore.Identity.Test +{ + public class Base32Test + { + [Fact] + public void ConversionTest() + { + var data = new byte[] { 1, 2, 3, 4, 5, 6 }; + Assert.Equal(data, Base32.FromBase32(Base32.ToBase32(data))); + + int length; + do { + length = GetRandomByteArray(1)[0]; + } while (length % 5 == 0); + data = GetRandomByteArray(length); + Assert.Equal(data, Base32.FromBase32(Base32.ToBase32(data))); + + length = (int)(GetRandomByteArray(1)[0]) * 5; + data = GetRandomByteArray(length); + Assert.Equal(data, Base32.FromBase32(Base32.ToBase32(data))); + } + + + private static readonly RandomNumberGenerator _rng = RandomNumberGenerator.Create(); + + private static byte[] GetRandomByteArray(int length) { + byte[] bytes = new byte[length]; + _rng.GetBytes(bytes); + return bytes; + } + } + +}