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
                       ));
        }
Beispiel #2
0
 public ReadOnlySpan <byte> GetBytes(string key)
 {
     return(GangSerialization.Base64UrlToBytes(_parameters[key]));
 }
Beispiel #3
0
 public string GetString(string key)
 {
     return(GangSerialization.Base64UrlToString(_parameters[key]));
 }