using System.Security.Cryptography; using System.Text; using Tiku.Domain.Tenancy; namespace Tiku.Infrastructure.Auth; public static class SmsCodeHashing { public static string Hash( Guid tenantId, string phone, SmsPurpose purpose, string code, string pepper) { ArgumentException.ThrowIfNullOrWhiteSpace(pepper); var normalized = $"{tenantId:N}:{NormalizePhone(phone)}:{purpose}:{code.Trim()}"; var hash = HMACSHA256.HashData( Encoding.UTF8.GetBytes(pepper), Encoding.UTF8.GetBytes(normalized)); return Convert.ToHexString(hash).ToLowerInvariant(); } public static string HashScope(string value, string pepper) { ArgumentException.ThrowIfNullOrWhiteSpace(pepper); var hash = HMACSHA256.HashData( Encoding.UTF8.GetBytes(pepper), Encoding.UTF8.GetBytes(value.Trim().ToLowerInvariant())); return Convert.ToHexString(hash).ToLowerInvariant(); } public static string NormalizePhone(string phone) { return phone.Trim(); } }