diff --git a/src/Core/Billing/Licenses/Extensions/LicenseExtensions.cs b/src/Core/Billing/Licenses/Extensions/LicenseExtensions.cs index f36af856df..727b6c6f09 100644 --- a/src/Core/Billing/Licenses/Extensions/LicenseExtensions.cs +++ b/src/Core/Billing/Licenses/Extensions/LicenseExtensions.cs @@ -1,6 +1,7 @@ using System.Reflection; using System.Security.Claims; using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; using System.Text; using Bit.Core.AdminConsole.Entities; using Bit.Core.Billing.Enums; @@ -13,12 +14,14 @@ namespace Bit.Core.Billing.Licenses.Extensions; public static class LicenseExtensions { - public static byte[] ComputeHash(this ILicense license) + public static byte[] ComputeHash(this ILicense license) => SHA256.HashData(license.GetDataBytes(true)); + + public static bool VerifySignature(this ILicense license, X509Certificate2 certificate) { - using (var alg = SHA256.Create()) - { - return alg.ComputeHash(license.GetDataBytes(true)); - } + var dataBytes = license.GetDataBytes(); + var signatureBytes = Convert.FromBase64String(license.Signature); + using var rsa = certificate.GetRSAPublicKey(); + return rsa.VerifyData(dataBytes, signatureBytes, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); } public static byte[] GetDataBytesWithAttributes(this ILicense license, bool forHash = false) diff --git a/src/Core/Models/Business/BaseLicense.cs b/src/Core/Models/Business/BaseLicense.cs index 5bd5ad19c5..9defe49adf 100644 --- a/src/Core/Models/Business/BaseLicense.cs +++ b/src/Core/Models/Business/BaseLicense.cs @@ -49,14 +49,6 @@ public abstract class BaseLicense : ILicense public abstract byte[] GetDataBytes(bool forHash = false); - public bool VerifySignature(X509Certificate2 certificate) - { - using (var rsa = certificate.GetRSAPublicKey()) - { - return rsa.VerifyData(GetDataBytes(), Convert.FromBase64String(Signature), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); - } - } - public byte[] Sign(X509Certificate2 certificate) { if (!certificate.HasPrivateKey) diff --git a/src/Core/Models/Business/ILicense.cs b/src/Core/Models/Business/ILicense.cs index 815ab7d5bc..32afc92392 100644 --- a/src/Core/Models/Business/ILicense.cs +++ b/src/Core/Models/Business/ILicense.cs @@ -16,6 +16,5 @@ public interface ILicense string Signature { get; set; } string Token { get; set; } byte[] GetDataBytes(bool forHash = false); - bool VerifySignature(X509Certificate2 certificate); byte[] Sign(X509Certificate2 certificate); } diff --git a/src/Core/Services/Implementations/LicensingService.cs b/src/Core/Services/Implementations/LicensingService.cs index 2d91017ce2..671fd50d91 100644 --- a/src/Core/Services/Implementations/LicensingService.cs +++ b/src/Core/Services/Implementations/LicensingService.cs @@ -4,6 +4,7 @@ using System.Security.Cryptography.X509Certificates; using System.Text; using System.Text.Json; using Bit.Core.AdminConsole.Entities; +using Bit.Core.Billing.Licenses.Extensions; using Bit.Core.Billing.Licenses.Models; using Bit.Core.Billing.Licenses.Services; using Bit.Core.Entities;