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 } }