Projects

Ticket #811: failure.rb

File failure.rb, 3.4 KB (added by pwilson@…, 19 months ago)

Example script that generates bus errors during encryption/decryption

Line 
1#! /usr/local/bin/ruby1.9 -w
2#  encoding: utf-8
3#
4#  Code based on:
5#     http://stuff-things.net/2008/02/05/encrypting-lots-of-sensitive-data-with-ruby-on-rails/
6#
7require 'openssl'
8
9TEST_MESSAGE = "The quick brown fox jumped over the lazy fox."
10
11module EncryptDecrypt
12   
13    def self.encryptData(data, publicKey)
14        #  Create Cipher to encrypt using 256 bit AES with CBC
15        cipher = OpenSSL::Cipher.new('aes-256-cbc')
16        cipher.encrypt
17       
18        # Generate random keys and IVs
19        cipher.key = random_key = cipher.random_key
20        cipher.iv  = random_iv  = cipher.random_iv
21       
22        #  Encrypt the data
23        encrypted_data = cipher.update(data)
24        encrypted_data << cipher.final
25       
26        #  Encrypt the key
27        encrypted_key = publicKey.public_encrypt(random_key)
28        encrypted_iv  = publicKey.public_encrypt(random_iv)
29       
30        return encrypted_data, encrypted_key, encrypted_iv
31    end
32   
33    def self.decryptData(data, key, iv, privateKey)
34       
35        #  Create Cipher to decrypt using 256 bit AES with CBC
36        cipher = OpenSSL::Cipher.new('aes-256-cbc')
37        cipher.decrypt
38       
39        #  Decrypt the key and iv
40        cipher.key = privateKey.private_decrypt(key)
41        cipher.iv  = privateKey.private_decrypt(iv)
42       
43        #  Decrypt the message
44        decrypted_data = cipher.update(data)
45        decrypted_data << cipher.final
46       
47        return decrypted_data
48    end
49end
50
51publicKeyPEM = <<PUBLIC
52-----BEGIN PUBLIC KEY-----
53MIHfMA0GCSqGSIb3DQEBAQUAA4HNADCByQKBwQDa+BX2/hhNkn1NUkeE3D7kZyOX
54TtHmFZFtxQXuJ+cN4lzPaBf4SWekpUvD4yrn3Qyv25Ro08REaMh0uyMfQtPD4J1V
55KyF/4KDv0wC2F1pOBJOyTUqU6hGPL2eqJgP25X2S43dY8HBaL+BuEvZ6yUcZfqWO
56MOACd7V+X/GqPkHxvDwi6kVZoAPVwJsOPvz4K2VRNEWCrwRZFj2JDmiWA/94W0W9
57d3wYTS0rBBTBKGPdZ6+DmdEyd1fFkOpNJCNL4tsCAwEAAQ==
58-----END PUBLIC KEY-----
59PUBLIC
60   
61privateKeyPEM = <<PRIVATE
62-----BEGIN RSA PRIVATE KEY-----
63Proc-Type: 4,ENCRYPTED
64DEK-Info: DES-EDE3-CBC,1684A1CF92F241FB
65
6674FWxQ0b25BEQfcB1V/u7HazRdRSt/tu4SuWhX1xfmoAH/HB4UEvP3X8iJQ3ggUP
67j58Jnc5yWzWvG6aPI5TqxA5mda2dyE0ATpZjOECkEjspAht8GGzjbjA08sCUhhRN
68yMWEigtPciJeT0Kn31SxbgMypucSHXW/R5Ki0MMsnbOoGUlECfSef+y6m4s8queT
69EYcMxpZV9k2D3sMVAJcKE2Ki6uirLEDxruv6kvREsXXmva4d5+Cv+WsPlBFIKNGS
70Wb2LXST1aLTXjIE3V/qX+zf5J+X2WofXUn/mHrfNmPzC4XbhFsoeqoTrQuaqklWU
71lW7l5JuogzCjDDdEORUCOd1MY1r/U6atQx/dm6eQFat+eU1RpV3nSEzpPsTGCua0
728/xeJ4Qxun7uqLw2CLb31ifDFAR3KsmyC+hAJThSuwABDy+JqdX4hgXH7YLkIEPY
73YJYEAewRu2roNMBaMSn0MeQi7LRavctGyDjJU/JfFYg1T02qV39x7Wx2rLbi7Kyi
748QQI1A+QoS6cLYscsb76Rq9+wtw6irUVYmzk7Hn0/73sblM6GKhp9hNgalUEzUv8
750c0SBVl9A8Vat/KKaUylKmRNN9kKxSNQr2Ra+ezw/SgX3wZPXtbhjMh8if20ylMR
76C8C/wocDyw7/hKRJS8LcaOOD4kKXQvAErrsZm82j/vIrm0rTLJBxqKRn3yyuiA+n
77CkzzD1+okCbKEKHxaws9JXs1Y2HmnlByvwgHxFj4jnWMEviZSqNjniCvKBDk0UQD
78Do52uY/ki5BJZ0BvL+nqwjnijQW8eD4vi3xh48wKHMaZdew+CImoHhh+PSIFPV6G
79dvPF2FK15tz7kAbzhX0U7OryUqLg+2wtVPKGdxo3JeNhg/brlPxwkZ3bhZKvjGXO
80J8FSd8KwJqnmJb4LMRCE/YE8Ur9GdBaK7D+cPUMmmHkfGqcBnMeGNxk7T9S3n7Dp
81oXSQOQoEwRtviFmdnWSAsLgcdyUMtYSCpWThrAN3bSN/Nbdr78+Db+SLtmUqfZ29
82UTP9Cgthp/f6Ny/n6typOvaJWgeW3t9cNn3uPpFWyVR1MryPcZkOsxATpxbxibvB
83gw84EqeOnOndOkpCOtlX4DtTLUyLNymDlPk2Eu+2cSXOY4zUNwSsrnpVaYXIcQPm
84UI9eGw80ijY8gg9OMLBGsYamQJkRuh4GLu8jJzLZn+IfFD8ENXdvQQ==
85-----END RSA PRIVATE KEY-----
86PRIVATE
87   
88publicKey  = OpenSSL::PKey::RSA.new(publicKeyPEM)
89privateKey = OpenSSL::PKey::RSA.new(privateKeyPEM,'macruby')
90
91data, key, iv = EncryptDecrypt.encryptData(TEST_MESSAGE, publicKey)
92puts EncryptDecrypt.decryptData(data, key, iv, privateKey)
93