Click here to Skip to main content
15,884,099 members
Articles / Programming Languages / C#

Gnu Privacy Guard (GPG/PGP) for .NET [v1.0]

Rate me:
Please Sign up or sign in to vote.
4.94/5 (17 votes)
18 Sep 20033 min read 563.9K   8.7K   91  
This article provides a C# wrapper class (GnuPGWrapper) that will enable use of GnuPG (the OpenPGP Internet encryption standard) within a .NET application.
  • gnupgdotnet_src.zip
    • GnuPGDotNet
      • AssemblyInfo.cs
      • bin
      • CodeCommentReport
        • banner.htm
        • banner.jpg
        • CodeCommentReportError.htm
        • commentreport.css
        • darkcorner.jpg
        • GnuPGDotNet
          • CWP0.HTM
          • CWP10.HTM
          • CWP11.HTM
          • CWP12.HTM
          • CWP13.HTM
          • CWP14.HTM
          • CWP15.HTM
          • CWP16.HTM
          • CWP17.HTM
          • CWP18.HTM
          • CWP19.HTM
          • CWP2.HTM
          • CWP20.HTM
          • CWP21.HTM
          • CWP22.HTM
          • CWP23.HTM
          • CWP24.HTM
          • CWP25.HTM
          • CWP26.HTM
          • CWP27.HTM
          • CWP28.HTM
          • CWP29.HTM
          • CWP3.HTM
          • CWP30.HTM
          • CWP31.HTM
          • CWP32.HTM
          • CWP33.HTM
          • CWP34.HTM
          • CWP35.HTM
          • CWP36.HTM
          • CWP37.HTM
          • CWP38.HTM
          • CWP39.HTM
          • CWP4.HTM
          • CWP40.HTM
          • CWP41.HTM
          • CWP42.HTM
          • CWP43.HTM
          • CWP44.HTM
          • CWP45.HTM
          • CWP46.HTM
          • CWP47.HTM
          • CWP48.HTM
          • CWP49.HTM
          • CWP5.HTM
          • CWP50.HTM
          • CWP51.HTM
          • CWP52.HTM
          • CWP53.HTM
          • CWP54.HTM
          • CWP55.HTM
          • CWP56.HTM
          • CWP57.HTM
          • CWP58.HTM
          • CWP59.HTM
          • CWP6.HTM
          • CWP60.HTM
          • CWP61.HTM
          • CWP62.HTM
          • CWP63.HTM
          • CWP64.HTM
          • CWP65.HTM
          • CWP66.HTM
          • CWP67.HTM
          • CWP68.HTM
          • CWP69.HTM
          • CWP7.HTM
          • CWP70.HTM
          • CWP71.HTM
          • CWP72.HTM
          • CWP73.HTM
          • CWP74.HTM
          • CWP75.HTM
          • CWP76.HTM
          • CWP77.HTM
          • CWP78.HTM
          • CWP79.HTM
          • CWP8.HTM
          • CWP80.HTM
          • CWP81.HTM
          • CWP82.HTM
          • CWP83.HTM
          • CWP84.HTM
          • CWP85.HTM
          • CWP86.HTM
          • CWP87.HTM
          • CWP88.HTM
          • CWP89.HTM
          • CWP9.HTM
          • CWP90.HTM
          • CWP91.HTM
          • CWP92.HTM
          • CWP93.HTM
          • CWP94.HTM
          • CWP95.HTM
          • CWP96.HTM
          • CWP97.HTM
          • CWP98.HTM
          • GnuPGDotNet.HTM
        • gradleft.jpg
        • gradtop.jpg
        • graycorner.jpg
        • minus.jpg
        • plus.jpg
        • Solution_GnuPGDotNet.HTM
        • titletile.jpg
        • vt.js
      • GnuPG.aspx
      • GnuPG.aspx.cs
      • GnuPG.aspx.resx
      • GnuPG
        • gpg.exe
        • pubring.bak
        • pubring.gpg
        • random_seed
        • secring.gpg
        • trustdb.gpg
      • GnuPGDotNet.csproj
      • GnuPGDotNet.jpg
      • GnuPGDotNet.xml
      • GnuPGWrapper.cs
      • gpg.txt
      • ReadMe.html
      • Web.config
  • gpg.zip
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<TITLE>Emmanuel.Cryptography.GnuPG.GnuPGWrapper</TITLE>
<LINK REL=STYLESHEET HREF="../CommentReport.css" TYPE="text/css">
</HEAD>
<BODY topmargin=0 rightmargin=0 leftmargin=0 style="background-image: url(../titletile.jpg); background-repeat:repeat-x; background-position: 0 0;" >
<DIV CLASS="PageHeading">Emmanuel.Cryptography.GnuPG.GnuPGWrapper Class</DIV>
<DIV CLASS="Description">

This class is a wrapper class for GNU Privacy Guard (GnuPG). It execute the command 
line program (gpg.exe) in an different process, redirects standard input (stdin),
standard output (stdout) and standard error (stderr) streams, and monitors the 
streams to fetch the results of the encryption/signing operation.<p/>

Please note that you must have INSTALLED GnuPG AND generated/imported the 
appropriate keys before using this class.<p/>

GnuPG stands for GNU Privacy Guard and is GNU's tool for secure communication and 
data storage. It can be used to encrypt data and to create digital signatures. It 
includes an advanced key management facility and is compliant with the proposed 
OpenPGP Internet standard as described in RFC 2440. As such, GnuPG is a complete 
and free replacement for PGP.<p/>

This class has been developed and tested with GnuPG v1.2.0 (MingW32)<p/>

For more about GNU, please refer to http://www.gnu.org <br/>
For more about GnuPG, please refer to http://www.gnupg.org <br/>
For more about OpenPGP (RFC 2440), please refer to http://www.gnupg.org/rfc2440.html <br/>
<P>

</DIV>
<IMG src="../GradLeft.jpg" width=7 height=378 alt="" border="0" style="position:absolute; left:10; top:18;z-Index:2">
<IMG src="../GradTop.jpg" width=352 height=7 alt="" border="0" align="top" style="position:absolute; left:10; top:18; z-index:1">
<DIV CLASS="Remarks">
<SPAN CLASS="RemarkHdrX">Access: </SPAN>Public</DIV>
<DIV CLASS="Remarks">
<SPAN CLASS="RemarkHdrX">Base Classes: </SPAN>Object</DIV>
<TABLE CLASS="InfoTable" cellpadding=0 cellspacing=0>
<TR height=20>
<TD width=20>&nbsp;</TD>
<TD valign=top align=left width=9 bgcolor="#cccc66"><IMG SRC="../graycorner.jpg" align=top></TD>
<TD CLASS="TableLightLabel" WIDTH=206>Members</TD>
<TD CLASS="TableLightLabel" >Description</TD>
<TD width=20>&nbsp;</TD>
</TR>
<TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP30.HTM" TARGET="CNTFRAME">GnuPGWrapper</A></TD>
<TD CLASS="TableLightDesc">
Default constructor
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP31.HTM" TARGET="CNTFRAME">GnuPGWrapper</A></TD>
<TD CLASS="TableLightDesc">
Constructor
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP32.HTM" TARGET="CNTFRAME">command</A></TD>
<TD CLASS="TableLightDesc">
Command property: set the type of command to execute (sign, crypt...)
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP35.HTM" TARGET="CNTFRAME">armor</A></TD>
<TD CLASS="TableLightDesc">
Boolean flag: if true, GnuPG creates ASCII armored output (text output). 
Defaults to true (ASCII ouput).
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP37.HTM" TARGET="CNTFRAME">recipient</A></TD>
<TD CLASS="TableLightDesc">
Recipient email address - mandatory when <see cref="command">command</see> is Crypt or SignAndCrypt

<p/>GnuPG uses this parameter to find the associated public key. You must have imported 
this public key in your keyring before.
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP39.HTM" TARGET="CNTFRAME">originator</A></TD>
<TD CLASS="TableLightDesc">
Originator email address - recommended when <see cref="command">command</see> is Sign or SignAndCrypt

<p/>GnuPG uses this parameter to find the associated secret key. You must have imported 
this secret key in your keyring before. Otherwise, GnuPG uses the first secret key 
in your keyring to sign messages. This property is mapped to the "--default-key" option.
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP41.HTM" TARGET="CNTFRAME">yes</A></TD>
<TD CLASS="TableLightDesc">
Boolean flag; if true, GnuPG assumes "yes" on most questions.
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP43.HTM" TARGET="CNTFRAME">batch</A></TD>
<TD CLASS="TableLightDesc">
Boolean flag; if true, GnuPG uses batch mode (Never ask, do not allow 
interactive commands).
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP45.HTM" TARGET="CNTFRAME">passphrase</A></TD>
<TD CLASS="TableLightDesc">
Passphrase for using your private key - mandatory when 
<see cref="command">command</see> is Sign or CryptAndSign.
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP47.HTM" TARGET="CNTFRAME">homedirectory</A></TD>
<TD CLASS="TableLightDesc">
name of the home directory (where keyrings AND gpg.exe are located)
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP49.HTM" TARGET="CNTFRAME">passphrasefd</A></TD>
<TD CLASS="TableLightDesc">
File descriptor for entering passphrase - defaults to 0 (standard input).
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP51.HTM" TARGET="CNTFRAME">exitcode</A></TD>
<TD CLASS="TableLightDesc">
Exit code from GnuPG process (0 = success; otherwise an error occured)
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP53.HTM" TARGET="CNTFRAME">verbose</A></TD>
<TD CLASS="TableLightDesc">
Boolean flag. If true, gpg gives more information during processing. If used
twice, the input data is listed in detail.
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP56.HTM" TARGET="CNTFRAME">ProcessTimeOutMilliseconds</A></TD>
<TD CLASS="TableLightDesc">
Timeout for GnuPG process, in milliseconds.

<p/>If the process doesn't exit before the end of the timeout period, the process is terminated (killed).
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP58.HTM" TARGET="CNTFRAME">BuildOptions</A></TD>
<TD CLASS="TableLightDesc">
Generate a string of GnuPG command line arguments, based on the properties
set in this object (e.g. if the <see cref="armor">armor</see> property is true, 
this method generates the "--armor" argument).
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP59.HTM" TARGET="CNTFRAME">ExecuteCommand</A></TD>
<TD CLASS="TableLightDesc">
Execute the GnuPG command defined by all parameters/options/properties.

<p/>Raise a GnuPGException whenever an error occurs.
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP60.HTM" TARGET="CNTFRAME">StandardOutputReader</A></TD>
<TD CLASS="TableLightDesc">
Reader thread for standard output

<p/>Updates the private variable _outputString (locks it first)
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP61.HTM" TARGET="CNTFRAME">StandardErrorReader</A></TD>
<TD CLASS="TableLightDesc">
Reader thread for standard error

<p/>Updates the private variable _errorString (locks it first)
<P>
</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP62.HTM" TARGET="CNTFRAME">_command</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP63.HTM" TARGET="CNTFRAME">_armor</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP64.HTM" TARGET="CNTFRAME">_yes</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP65.HTM" TARGET="CNTFRAME">_recipient</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP66.HTM" TARGET="CNTFRAME">_homedirectory</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP67.HTM" TARGET="CNTFRAME">_bindirectory</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP68.HTM" TARGET="CNTFRAME">_passphrase</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP69.HTM" TARGET="CNTFRAME">_passphrasefd</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP70.HTM" TARGET="CNTFRAME">_verbose</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP71.HTM" TARGET="CNTFRAME">_batch</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP72.HTM" TARGET="CNTFRAME">_originator</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP73.HTM" TARGET="CNTFRAME">_ProcessTimeOutMilliseconds</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP74.HTM" TARGET="CNTFRAME">_exitcode</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP75.HTM" TARGET="CNTFRAME">_processObject</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP76.HTM" TARGET="CNTFRAME">_outputString</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR><TR height=20>
<TD width=20>&nbsp;</TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD CLASS="TableLightDesc"><A HREF="CWP77.HTM" TARGET="CNTFRAME">_errorString</A></TD>
<TD CLASS="TableLightDesc">&nbsp;</TD>
<TD width=20>&nbsp;</TD>
</TR></TABLE>
</BODY>
</HTML>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
France France
Fell into computer software at the age of 11, founder of 3 startups, and now manager of an independent software vendor (ISV) labelled proSDK (www.prosdk.com)... And still a freeware writer and technical article author!

Comments and Discussions