mirror of
https://github.com/bitwarden/android.git
synced 2024-12-24 18:08:26 +03:00
base64 url encode/decode heleprs (#1038)
This commit is contained in:
parent
f95cddd05a
commit
29e443ed76
2 changed files with 36 additions and 27 deletions
|
@ -134,7 +134,7 @@ namespace Bit.Core.Services
|
|||
{
|
||||
throw new InvalidOperationException("JWT must have 3 parts.");
|
||||
}
|
||||
var decodedBytes = Base64UrlDecode(parts[1]);
|
||||
var decodedBytes = CoreHelpers.Base64UrlDecode(parts[1]);
|
||||
if (decodedBytes == null || decodedBytes.Length < 1)
|
||||
{
|
||||
throw new InvalidOperationException("Cannot decode the token.");
|
||||
|
@ -230,32 +230,6 @@ namespace Bit.Core.Services
|
|||
return decoded["iss"].Value<string>();
|
||||
}
|
||||
|
||||
private byte[] Base64UrlDecode(string input)
|
||||
{
|
||||
var output = input;
|
||||
// 62nd char of encoding
|
||||
output = output.Replace('-', '+');
|
||||
// 63rd char of encoding
|
||||
output = output.Replace('_', '/');
|
||||
// Pad with trailing '='s
|
||||
switch (output.Length % 4)
|
||||
{
|
||||
case 0:
|
||||
// No pad chars in this case
|
||||
break;
|
||||
case 2:
|
||||
// Two pad chars
|
||||
output += "=="; break;
|
||||
case 3:
|
||||
// One pad char
|
||||
output += "="; break;
|
||||
default:
|
||||
throw new InvalidOperationException("Illegal base64url string!");
|
||||
}
|
||||
// Standard base64 decoder
|
||||
return Convert.FromBase64String(output);
|
||||
}
|
||||
|
||||
private async Task<bool> SkipTokenStorage()
|
||||
{
|
||||
var timeout = await _storageService.GetAsync<int?>(Constants.VaultTimeoutKey);
|
||||
|
|
|
@ -209,5 +209,40 @@ namespace Bit.Core.Utilities
|
|||
}
|
||||
return JsonConvert.DeserializeObject<T>(json, jsonSerializationSettings);
|
||||
}
|
||||
|
||||
public static string Base64UrlEncode(byte[] input)
|
||||
{
|
||||
var output = Convert.ToBase64String(input)
|
||||
.Replace('+', '-')
|
||||
.Replace('/', '_')
|
||||
.Replace("=", string.Empty);
|
||||
return output;
|
||||
}
|
||||
|
||||
public static byte[] Base64UrlDecode(string input)
|
||||
{
|
||||
var output = input;
|
||||
// 62nd char of encoding
|
||||
output = output.Replace('-', '+');
|
||||
// 63rd char of encoding
|
||||
output = output.Replace('_', '/');
|
||||
// Pad with trailing '='s
|
||||
switch (output.Length % 4)
|
||||
{
|
||||
case 0:
|
||||
// No pad chars in this case
|
||||
break;
|
||||
case 2:
|
||||
// Two pad chars
|
||||
output += "=="; break;
|
||||
case 3:
|
||||
// One pad char
|
||||
output += "="; break;
|
||||
default:
|
||||
throw new InvalidOperationException("Illegal base64url string!");
|
||||
}
|
||||
// Standard base64 decoder
|
||||
return Convert.FromBase64String(output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue