Skip to content
This repository has been archived by the owner on Jan 22, 2020. It is now read-only.

endlessm/jruby-pgp

0.3.1-pre
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code
This branch is 9 commits ahead, 3 commits behind sgonyea:master.

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
bin
 
 
lib
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

PGP

This is a Java + JRuby wrapper around the Bouncy Castle PGP APIs. The goal is to write anything that is memory / object intensive in Java. Use JRuby for everything else.

Installation

Add this line to your application's Gemfile:

gem 'jruby-pgp'

And then execute:

$ bundle

Or install it yourself as:

$ gem install jruby-pgp

Feature Support:

The feature set is very bare, and restricted to the following operations:

  • Encrypt a file to a known list of Public Key(s).

  • Decrypt a file using a given set of Private Key(s).

  • Public and Private keys may be read in from disk or from memory.

  • Verify the signature of a file that you are decrypting. (thanks, @superchris)

  • Use password-protected Private Keys. (thanks, @superchris)

  • Sign a file from the file system. (thanks, @superchris)

Currently, you cannot do the following (These are TODO items):

  • Verify any signatures of public / private keys.

  • Create new Private Keys / generate public keys from a given Private Key.

  • Sign a file that you are encrypting.

  • Obtain the name of the file that was encrypted. (Should be an easy feature to add.)

  • Obtain the "modificationTime" (timestamp) of the encrypted data / file.

  • Verify a public key based on information from a key server.

Notes

This gem currently features everything I need and nothing I don't. Pull requests are very much welcome; feature requests will be considered. You may also find examples for certain operations, using the Bouncy Castle PGP APIs, and link to them in an Issue. That would make their implementation (by me) far more likely to happen.

The general goal is to provide fast, non-terrible wrappers around the Bouncy Castle PGP APIs. Bare-metal JRuby code will then plug into those wrappers, to minimize memory bloat. Directly hooking JRuby into the BC PGP APIs is certainly possible, but they are a pile of rocks. Using these APIs from JRuby can yield some unwanted bloat, especially when you're resource constrained:

Example using BC PGP directly from JRuby

Usage

For usage examples, see the below test files:

Encryption: spec/lib/pgp/encryptor_spec.rb
Decryption: spec/lib/pgp/decryptor_spec.rb

Contributors

@superchris

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Testing:

Just run:

$ rake spec

And it will compile the Java extensions prior to running the tests.

About

PGP for JRuby

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 55.3%
  • Ruby 44.7%