示例#1
0
        private static byte[] DecodeOctetString(byte[] data)
        {
            const EncodingType type = EncodingType.X509_ASN_ENCODING;
            var handle = default(GCHandle);

            try
            {
                handle = GCHandle.Alloc(data, GCHandleType.Pinned);
                var size = 0u;
                const CryptDecodeFlags flags = CryptDecodeFlags.CRYPT_DECODE_ALLOC_FLAG;
                if (!Crypto32.CryptDecodeObjectEx(type, X509_OCTET_STRING, handle.AddrOfPinnedObject(), (uint)data.Length, flags, IntPtr.Zero, out LocalBufferSafeHandle buffer, ref size))
                {
                    return(null);
                }
                using (buffer)
                {
                    unsafe
                    {
                        var structure = (CRYPT_OBJID_BLOB)Marshal.PtrToStructure(buffer.DangerousGetHandle(), typeof(CRYPT_OBJID_BLOB));
                        var ret       = new byte[structure.cbData];
                        Marshal.Copy(structure.pbData, ret, 0, ret.Length);
                        return(ret);
                    }
                }
            }
            finally
            {
                if (handle.IsAllocated)
                {
                    handle.Free();
                }
            }
        }
示例#2
0
 public static extern bool CryptDecodeObject(
         CryptEncodingFlags certEncodingType,
         IntPtr lpszStructType,
         byte[] pbEncoded,
         int cbEncoded,
         CryptDecodeFlags flags,
         [In, Out] byte[] pvStructInfo,
         ref uint cbStructInfo
     );
示例#3
0
 public static extern unsafe bool CryptDecodeObjectEx
 (
     [param: In, MarshalAs(UnmanagedType.U4)] EncodingType dwCertEncodingType,
     [param: In, MarshalAs(UnmanagedType.SysInt)] IntPtr lpszStructType,
     [param: In, MarshalAs(UnmanagedType.SysInt)] IntPtr pbEncoded,
     [param: In, MarshalAs(UnmanagedType.U4)] uint cbEncoded,
     [param: In, MarshalAs(UnmanagedType.U4)] CryptDecodeFlags dwFlags,
     [param: In, MarshalAs(UnmanagedType.SysInt)] IntPtr pDecodePara,
     [param: Out] out LocalBufferSafeHandle pvStructInfo,
     [param: In, Out, MarshalAs(UnmanagedType.U4)] ref uint pcbStructInfo
 );
示例#4
0
 internal static extern int CCGetCertNameList(IntPtr certContext, AltNameType dwAltNameChoice, CryptDecodeFlags dwFlags, out int cName, out IntPtr papwszName);
示例#5
0
 internal static extern int CCGetCertNameList(IntPtr certContext, AltNameType dwAltNameChoice, CryptDecodeFlags dwFlags, out int cName, out IntPtr papwszName);