Home > symmetric_gpg

symmetric_gpg

Symmetric_gpg is a project mainly written in ..., it's free.

A ruby wrapper for linux's gpg command for symmetric encryption.

This software is GPL.

#################################

Version 2.0.1 (ooops!)

brutally hacks 1.3.0

gem 'symmetric_gpg', '~> 2.0'

#################################

SYNOPSIS

#################################

New in version 1.3 was SymmetricGPG::Shreds,

which uses Shredder:

https://rubygems.org/gems/shredder

Works like SymmetricGPG::Files, described below, but

is constructed and used as follows:

shreds = SymmetricGPG::Shreds.new( passphrase, sew, [shred1,shred2,...] ) # where sew is a filename.

shreds.encrypt # encrypts sew into shreds shred1,shred2,...

shreds.decrypt # decrypts shreds shred1,shred2,... into sew.

See:

https://sites.google.com/site/carlosjhr64/rubygems/symmetricgpg

for an example utility, gpg_shredder.

Version 2.0 adds ways to get and put strings from and into shreds.

shreds = SymmetricGPG::Shreds.new( passphrase, sew, [shred1,shred2,...] ) # where sew is "a given string".

# Note that these below breaks previous api, thus the major version jump.

shreds.shred

sew = shreds.sew

The distinction of sew as a String instead of a filename is made by the choice of methods.

As a filename, it's #encrypt and #decrypt. As a string it's #shred and #sew.

require 'symmetric_gpg'

Files

Constructor with no parameters...

files = SymmetricGPG::Files.new

...needs to have it's parameters set via accessors.

files.passphrase = 'A good passphrase, not this one.' files.plain = 'README.txt' files.encrypted = 'README.enc' files.force = true # ok to overwrite pre-existing file

Encrypt plain to encrypted

if !files.encrypt then

No exceptions where raised, but I get a bad certificate warning.

puts "Warnings(A): #{files.errors}" end

Ok, let's decrypt README.enc

files.plain = 'README.dec' if !files.decrypt then

I don't get any warnings here.

puts "Warnings(B): #{files.errors}" end

README.dec should be identical to README.txt

raise "Bad encryption/decryption" if diff README.dec README.txt.length != 0

Strings

It's a good idea to set the passphrase right away in the constructor.

strings = SymmetricGPG::Strings.new('Not this one either.') strings.plain = 'The rain in spain rains mainly in the plane.'

The methods #encrypt and #decrypt usually return @errors.nil?, but

for Symetric::Strings it returns the encrypted or decrypted string value.

encrypted = strings.encrypt

One can still check for warnings.

if strings.errors then

I get a bad certificate warning.

puts "Warnings(C): #{strings.errors}" end

Note that the encrypted attribute is also set.

raise "Bad encrypted attribute" if encrypted != strings.encrypted

And it's garbled

puts "Garbled:" puts encrypted

No cheat, set plain to ":" and decrypt back, see that it works.

strings.plain = ':' puts "Plain#{strings.plain}" strings.decrypt

Again, one can check for warnings

if strings.errors then

I get none.

puts "Warnings(D): #{strings.errors}" end puts strings.plain

IOs

plain = File.open('README.txt','r') encrypted = File.open('README.enc2','wb')

All constructors can set the four main attributes.

ios = SymmetricGPG::IOs.new('Maybe... nope! Be random.', plain, encrypted, true) # ok to overwrite if !ios.encrypt then

Again, I get a certificate warning here.

puts "Warnings(E): #{ios.errors}" end encrypted.close plain.close

README.enc2 is encrypted. Now decrypt it back.

ios.encrypted = File.open('README.enc2','r') ios.plain = File.open('README.dec2','wb') if !ios.decrypt then

And I don't get any warnings here.

puts "Warnings(F): #{ios.errors}" end ios.plain.close ios.encrypted.close

README.dec2 should be identical to README.txt

raise "Bad encryption/decryption" if diff README.dec2 README.txt.length != 0

Note that stdin and/or stdout can be used

File.open('README.enc2','r') do |encrypted| ios.encrypted = encrypted ios.plain = $stdout ios.decrypt end

And of course you can use StringIO.

puts "OK!"

# If you have shredder, you can try this:

require 'symmetric_gpg'

string = "A is for Apple."

shreds = SymmetricGPG::Shreds.new("Shreddelicious!", string, ['shred.1','shred.2'])

shreds.shred # Should encrypt and then shred the string into shred.1 and shred.2.

shreds.plain = nil # no cheat!

plain = shreds.sew # should get the shredded string back.

raise "No... I did not the the string back." if !(plain == string)

puts plain

Previous:Samil