Beispiel #1
0
        public ImportResult Import(GpgmeData keydata)
        {
            if (Context == null ||
                !(Context.IsValid))
            {
                throw new InvalidContextException();
            }

            if (keydata == null)
            {
                throw new ArgumentNullException("An invalid data buffer has been specified.",
                                                new InvalidDataBufferException());
            }

            if (!(keydata.IsValid))
            {
                throw new InvalidDataBufferException();
            }

            lock (Context.CtxLock) {
                GpgmeError.Check(libgpgme.NativeMethods.gpgme_op_import(Context.CtxPtr, keydata.dataPtr));
                IntPtr result = libgpgme.NativeMethods.gpgme_op_import_result(Context.CtxPtr);
                return(new ImportResult(result));
            }
        }
Beispiel #2
0
        public void SetEngineInfo(Protocol proto, string filename, string homedir)
        {
            EnsureValid();
            lock (CtxLock) {
                IntPtr filename_ptr = IntPtr.Zero, homedir_ptr = IntPtr.Zero;

                if (filename != null)
                {
                    filename_ptr = Marshal.StringToCoTaskMemAnsi(filename);
                }
                if (homedir != null)
                {
                    homedir_ptr = Marshal.StringToCoTaskMemAnsi(homedir);
                }

                int err = libgpgme.NativeMethods.gpgme_ctx_set_engine_info(
                    CtxPtr,
                    (gpgme_protocol_t)proto,
                    filename_ptr,
                    homedir_ptr);

                if (filename_ptr != IntPtr.Zero)
                {
                    Marshal.FreeCoTaskMem(filename_ptr);
                }
                if (homedir_ptr != IntPtr.Zero)
                {
                    Marshal.FreeCoTaskMem(homedir_ptr);
                }

                GpgmeError.Check(err);
            }
        }
Beispiel #3
0
        public void Export(string[] pattern, GpgmeData keydata, ExportMode?mode = null)
        {
            if (Context == null ||
                !(Context.IsValid))
            {
                throw new InvalidContextException();
            }

            if (keydata == null)
            {
                throw new ArgumentNullException("Invalid data buffer",
                                                new InvalidDataBufferException());
            }

            if (!(keydata.IsValid))
            {
                throw new InvalidDataBufferException();
            }

            IntPtr[] parray = null;
            if (pattern != null)
            {
                parray = Gpgme.StringToCoTaskMemUTF8(pattern);
            }

            int err;
            var apiMode = mode == null ? 0 : (uint)mode;

            lock (Context.CtxLock) {
                if (parray != null)
                {
                    err = libgpgme.NativeMethods.gpgme_op_export_ext(
                        Context.CtxPtr,
                        parray,
                        apiMode,
                        keydata.dataPtr);
                }
                else
                {
                    err = libgpgme.NativeMethods.gpgme_op_export(
                        Context.CtxPtr,
                        IntPtr.Zero,
                        apiMode,
                        keydata.dataPtr);
                }
            }

            GC.KeepAlive(keydata);

            // Free memory
            Gpgme.FreeStringArray(parray);

            GpgmeError.Check(err);
        }