private KeyContext ImportSertificate(byte[] certificateData) { // создаём объект сертификата var hCertContext = CryptoApi.CertCreateCertificateContext( Constants.MyEncodingType, certificateData, certificateData.Length); //Получаем указатель на SubjectPublicKeyInfo var certContextStruct = (Constants.CertContext) Marshal.PtrToStructure(hCertContext, typeof(Constants.CertContext)); var pCertInfo = certContextStruct.pCertInfo; // магия. для x32 и x64 сборок структуры разных размеров var certInfoStruct = (Constants.CertInfo)Marshal.PtrToStructure(pCertInfo, typeof(Constants.CertInfo)); IntPtr subjectPublicKeyInfo = Marshal.AllocHGlobal(Marshal.SizeOf(certInfoStruct.SubjectPublicKeyInfo)); Marshal.StructureToPtr(certInfoStruct.SubjectPublicKeyInfo, subjectPublicKeyInfo, false); IntPtr keyHandler = IntPtr.Zero; if (!CryptoApi.CryptImportPublicKeyInfo(cspHandler, Constants.MyEncodingType, subjectPublicKeyInfo, ref keyHandler)) { throw new Win32Exception(); } var keyContext = new KeyContext(keyHandler); return(keyContext); }