using System.Security.Cryptography;
using System.Text;
namespace AyCode.Services.Nav;
///
/// NAV authentikációs hash-ek. Az algoritmus a NAV-rendszereken közös (SHA-512, nagybetűs hex), ezért a base
/// rétegben él. (EKÁER 2.2 UserHeaderType doksija: passwordHash = SHA-512(jelszó) UPPER;
/// requestSignature = SHA-512(requestId + timestamp[yyyyMMddHHmmss] + aláírókulcs) UPPER.)
///
///
/// Az Online Számla a requestSignature-höz SHA3-512-t használ — ha az kell, a
/// override-olható egy jövőbeli paraméterrel. Jelenleg az EKÁER SHA-512-jét implementálja.
///
public static class NavAuthHelper
{
/// A signature timestamp-részének formátuma (NAV: év-hó-nap-óra-perc-mp, elválasztó nélkül).
public const string SignatureTimestampFormat = "yyyyMMddHHmmss";
/// SHA-512() → 128 karakteres nagybetűs hex.
public static string ComputePasswordHash(string password)
=> Sha512UpperHex(password);
///
/// SHA-512(requestId + timestamp(UTC)[yyyyMMddHHmmss] + signingKey) → nagybetűs hex.
/// A NAV az aláíráshoz a header-timestamp UTC-megfelelőjét várja, ezért .
/// (Hivatalos teszt-vektor: Nav/docs/EKAER_INTERFACE.md.)
///
public static string ComputeRequestSignature(string requestId, DateTime timestamp, string signingKey)
=> Sha512UpperHex(requestId + timestamp.ToUniversalTime().ToString(SignatureTimestampFormat) + signingKey);
private static string Sha512UpperHex(string input)
{
var hash = SHA512.HashData(Encoding.UTF8.GetBytes(input));
return Convert.ToHexString(hash); // Convert.ToHexString → nagybetűs hex
}
}