Skip to content

Commit c111e16

Browse files
committed
feat: add decode support to Base64Url converter
move definitions into private class scope
1 parent 388016c commit c111e16

File tree

1 file changed

+30
-9
lines changed

1 file changed

+30
-9
lines changed

src/shared/Core/Base64UrlConvert.cs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,43 @@ namespace GitCredentialManager
44
{
55
public static class Base64UrlConvert
66
{
7+
8+
// The base64url format is the same as regular base64 format except:
9+
// 1. character 62 is "-" (minus) not "+" (plus)
10+
// 2. character 63 is "_" (underscore) not "/" (slash)
11+
// 3. padding is optional
12+
private const char base64PadCharacter = '=';
13+
private const char base64Character62 = '+';
14+
private const char base64Character63 = '/';
15+
private const char base64UrlCharacter62 = '-';
16+
private const char base64UrlCharacter63 = '_';
17+
718
public static string Encode(byte[] data, bool includePadding = true)
819
{
9-
const char base64PadCharacter = '=';
10-
const char base64Character62 = '+';
11-
const char base64Character63 = '/';
12-
const char base64UrlCharacter62 = '-';
13-
const char base64UrlCharacter63 = '_';
14-
15-
// The base64url format is the same as regular base64 format except:
16-
// 1. character 62 is "-" (minus) not "+" (plus)
17-
// 2. character 63 is "_" (underscore) not "/" (slash)
1820
string base64Url = Convert.ToBase64String(data)
1921
.Replace(base64Character62, base64UrlCharacter62)
2022
.Replace(base64Character63, base64UrlCharacter63);
2123

2224
return includePadding ? base64Url : base64Url.TrimEnd(base64PadCharacter);
2325
}
26+
27+
public static byte[] Decode(string data)
28+
{
29+
string base64 = data
30+
.Replace(base64UrlCharacter62, base64Character62)
31+
.Replace(base64UrlCharacter63, base64Character63);
32+
33+
switch (base64.Length % 4)
34+
{
35+
case 2:
36+
base64 += base64PadCharacter;
37+
goto case 3;
38+
case 3:
39+
base64 += base64PadCharacter;
40+
break;
41+
}
42+
43+
return Convert.FromBase64String(base64);
44+
}
2445
}
2546
}

0 commit comments

Comments
 (0)