bool ValidateCredential( GangPublicKey publicKey, string clientData, string authenticatorData, string signatureData ) { var authenticatorBytes = GangSerialization .Base64UrlToBytes(authenticatorData); // RP ID Hash //var rpIdHash = authenticatorBytes[..32]; // Flags //var flags = new BitArray(authenticatorBytes[32..33].ToArray()); //var userPresent = flags[0]; //var userVerified = flags[2]; //var attestedCredentialData = flags[6]; //var extensionDataIncluded = flags[7]; // Signature counter //var counterBuf = authenticatorBytes[33..37].ToArray(); //var counter = BitConverter.ToUInt32(counterBuf); var signature = GangSerialization.Base64UrlToBytes(signatureData); using var hasher = new SHA256Managed(); var hash = hasher.ComputeHash( GangSerialization.Base64UrlToBytes(clientData).ToArray() ); var data = new byte[authenticatorBytes.Length + hash.Length]; authenticatorBytes.CopyTo(data); hash.CopyTo(data, authenticatorBytes.Length); return(_crypto.VerifySignature( publicKey, data, signature )); }
public ReadOnlySpan <byte> GetBytes(string key) { return(GangSerialization.Base64UrlToBytes(_parameters[key])); }
public string GetString(string key) { return(GangSerialization.Base64UrlToString(_parameters[key])); }