CodeGuru
Earthweb Search
Forums Wireless Jars Gamelan Developer.com
CodeGuru Navigation
Member Sign In
User ID:
Password:
Remember Me:
Forgot Password?
Not a member?
Click here for more information and to register.

Become a Marketplace Partner

jobs.internet.com

internet.commerce
Partners & Affiliates
















RSS Feeds

RSSAll

RSSVC++/C++

RSS.NET/C#

RSSVB

See more EarthWeb Network feeds

Home >> .NET / C# >> .NET >> Net Security >> PGP


Using the Gnu Privacy Guard (GnuPG/PGP) within ASP.NET [v1.0]
Rating: none

Emmanuel KARTMANN (view profile)
November 11, 2002



(continued)




Click here for a larger image.

Environment: .NET, ASP.NET, C#

Keywords: GnuPG, PGP, Cryptography, Thread, Process, Command Line Program

GnuPG Wrapper

This article presents GnuPGWrapper v1.0, a wrapper class for GnuPG.

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 (Pretty Good Privacy).

This article provides a C# wrapper class (GnuPGWrapper) that will enable the use of an OpenPGP Internet encryption standard within a .NET world. It is shipped with a demo ASP.NET Web Form (GnuPG.aspx), which calls the wrapper class.

Installation

Prerequisites

  • Complete ASP .NET Environment—Windows XP Professional + IIS 5.0 + .NET Framework SDK
  • GnuPG for Windows (more about GnuPG)

Procedure

  • Download the zip file (GnuPGDotNet_src.zip)
  • Extract the zip file (for example, into directory "C:\Inetpub\wwwroot\")
  • Using Administrative Tools/Internet Information Services, create an IIS Application for directory GnuPGDotNet
  • Call demo Web Form via URL http://localhost/GnuPGDotNet/GnuPG.aspx

Implementation

GnuPG ships as a command line program (gpg.exe) acting as a filter (reads from standard input and writes into standard output). Although suitable for scripting on UNIX systems (where calling a command line program from "sh" or "bash" is easy), it's pretty hard to integrate this in a production .NET environment.

The GnuPG Wrapper executes the command line program (gpg.exe) in a 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.

The GnuPG Wrapper:

  • Doesn't use any temporary files to store results; it directly uses streams/pipes.
  • Uses multiple threads to read data from standard input and standard error, preventing any deadlocks.
  • Uses configurable timeouts to prevent blocking calling applications in case of a system/program/process crash.
  • Uses a configurable passphrase, which can be stored in a local configuration file (Web.Config) to prevent disclosure of the phrase.

Please note that you must have INSTALLED GnuPG AND generated/imported the appropriate keys before using this class. Refer to the GnuPG manual to do this....

Sample Code

To use the wrapper class, you need to proceed as follows:

  1. Create an instance of the class
  2. Set the "command" property to the requested command (SignAndEncrypt, Encrypt, Decrypt, Sign, Verify)
  3. Optionally, set parameters for the command (home directory, originator, recipients, and so forth)
  4. Call the "ExecuteCommand" method with input/output strings variables

The next sections show sample source code for the most command operations (SignAndEncrypt, Decrypt, Verify).

Encrypt and Sign

  // Reference My GnuPG wrapping class
  using Emmanuel.Cryptography.GnuPG;

  // Create GnuPG wrapping class
  GnuPGWrapper gpg = new GnuPGWrapper();

  // Set command
  gpg.command = Commands.SignAndEncrypt;

  // Set some parameters from on Web.Config file
  gpg.homedirectory = Server.MapPath(ConfigurationSettings.
                      AppSettings["homedirectory"]);
  gpg.passphrase = ConfigurationSettings.AppSettings
                   ["passphrase"];

  // Set other parameters from Web Controls
  gpg.originator = FromTextBox.Text;
  gpg.recipient = ToTextBox.Text;

  // Declare input/output variables (input is also read from a
  // Web control)
  string inputText = MessageTextBox.Text;
  string outputText = "";

  // Execute GnuPG
  gpg.ExecuteCommand(inputText, out outputText);

  // Display output text
  OutputTextBox.Text = outputText;
  OutputTextBox.Visible = true;
  ErrorMessage.Visible = false;
  ExitCodeLabel.Text = gpg.exitcode.ToString();

Decrypt

  using Emmanuel.Cryptography.GnuPG;

  GnuPGWrapper gpg = new GnuPGWrapper();

  gpg.homedirectory = "C:\Inetpub\wwwroot\GnuPGDotNet\GnuPG"
  gpg.passphrase = "My passphrase is so cool I can't remember it"
  gpg.command = Commands.Decrypt;

  // Execute GnuPG
  string outputText = "";
  gpg.ExecuteCommand("This is a test message.", out outputText);

  // Display output text
  [...]

Verify

  using Emmanuel.Cryptography.GnuPG;

  GnuPGWrapper gpg = new GnuPGWrapper();

  gpg.homedirectory = "C:\Inetpub\wwwroot\GnuPGDotNet\GnuPG"
  gpg.passphrase = "My passphrase is so cool I can't remember it"
  gpg.originator = "me@mycompany.com";
  gpg.command = Commands.Verify;

  // Execute GnuPG
  string outputText = "";
  gpg.ExecuteCommand("This is a test message.", out outputText);

  // Display output text
  [...]

Error Handling

Error handling is done via a specific Exception class; method "ExecuteCommand" raises this exception whenever an error occurs. Your calling application can handle this exception as follows:

  using Emmanuel.Cryptography.GnuPG;
  try
  {

    GnuPGWrapper gpg = new GnuPGWrapper();

    gpg.homedirectory = "C:\Inetpub\wwwroot\GnuPGDotNet\GnuPG"
    gpg.passphrase = "My passphrase is so cool I can't remember
                      it"
    gpg.originator = "me@mycompany.com";
    gpg.recipient = "you@yourcompany.com";
    gpg.command = Commands.SignAndEncrypt;

    // Execute GnuPG
    string outputText = "";
    gpg.ExecuteCommand("This is a test message.", out outputText);

    // Display output text
    [...]

  }
  catch (GnuPGException gpge)
  {
    // Display error message
    ErrorMessage.Text = gpge.Message; // Contains a clear text
                                      // error message, either
                                      // from the wrapper or
                                      // from gpg.exe itself
  }

Real-Life Deployment

This code is deployed in a real-life e-commerce Web site that uses GnuPG to communicate with some of its partners (http://www.gourmeo.com).

About GnuPG and PGP

This class has been developed and tested with GnuPG v1.2.0 (MingW32).

You can check the command line manual page for gpg.exe

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

Downloads

Download source and demo - 535 Kb

Tools:
Add www.codeguru.com to your favorites
Add www.codeguru.com to your browser search box
IE 7 | Firefox 2.0 | Firefox 1.5.x
Receive news via our XML/RSS feed







RATE THIS ARTICLE:   Excellent  Very Good  Average  Below Average  Poor  

(You must be signed in to rank an article. Not a member? Click here to register)

Latest Comments:
Making it work with lager files... - benhull (05/28/2008)
large file support - Legacy CodeGuru (12/16/2003)

View All Comments
Add a Comment:
Title:
Comment:
Pre-Formatted: Check this if you want the text to display with the formatting as typed (good for source code)



(You must be signed in to comment on an article. Not a member? Click here to register)


JupiterOnlineMedia

internet.comearthweb.comDevx.commediabistro.comGraphics.com

Search:

Jupitermedia Corporation has two divisions: Jupiterimages and JupiterOnlineMedia

Jupitermedia Corporate Info


Legal Notices, Licensing, Reprints, & Permissions, Privacy Policy.

Advertise | Newsletters | Tech Jobs | Shopping | E-mail Offers

Solutions
Whitepapers and eBooks
Intel PDF: Virtualization Delivers Data Center Efficiency
Intel eBook: Managing the Evolving Data Center
Microsoft Article: BitLocker Brings Encryption to Windows Server 2008
Symantec eBook: The Guide to E-Mail Archiving and Management
Microsoft Article: RODCs Transform Branch Office Security
Go Parallel Article: James Reinders on the Intel Parallel Studio Beta Program
Avaya Article: Advancing the State of the Art in Customer Service
Adobe Acrobat Connect Pro: Web Conferencing and eLearning Whitepapers
Avaya Article: Avaya AE Services Provide Rapid Telephony Integration with Facebook
Go Parallel Article: Getting Started with TBB on Windows
HP eBook: Storage Networking , Part 1
MORE WHITEPAPERS, EBOOKS, AND ARTICLES
Webcasts
Intel Seminar: Efficiencies in Hardware/Software Virtualization
HP Webcast: Disaster Recovery Planning
Go Parallel Video: Performance and Threading Tools for Game Developers
HP Video: StorageWorks EVA4400 and Oracle
HP Webcast: Storage Is Changing Fast - Be Ready or Be Left Behind
MORE WEBCASTS, PODCASTS, AND VIDEOS
Downloads and eKits
IBM TCO eKIT: Your IT Budget is Under Attack, Get in Control
IBM Energy Efficiency eKIT: Learn How to Reduce Costs
30-Day Trial: SPAMfighter Exchange Module
Red Gate Download: SQL Toolbelt and free High-Performance SQL Code eBook
Iron Speed Designer Application Generator
MORE DOWNLOADS, EKITS, AND FREE TRIALS
Tutorials and Demos
Microsoft Article: Silverlight Streaming--Free Video Hosting for All
Featured Algorithm: Intel Threading Building Blocks - parallel_reduce
HP Demo: StorageWorks EVA4400
MORE TUTORIALS, DEMOS AND STEP-BY-STEP GUIDES