Beispiel #1
0
        private static string GetFingerprint(IntPtr x509)
        {
            var bufferHandle = default(GCHandle);
            int length       = OpenSsl.EVP_MAX_MD_SIZE;
            var buffer       = new byte[length];

            try
            {
                bufferHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
                if (OpenSsl.X509_digest(x509, OpenSsl.EVP_sha256(), bufferHandle.AddrOfPinnedObject(), ref length) != 1)
                {
                    throw new Exception($"Cannot calculate digest: {OpenSsl.GetLastError()}");
                }
            }
            finally
            {
                bufferHandle.Free();
            }

            var sb = new StringBuilder("sha-256 ");

            for (var i = 0; i < length; ++i)
            {
                sb.AppendFormat("{0:X2}:", buffer[i]);
            }
            sb.Length -= 1;

            return(sb.ToString());
        }