vorax 0.1.0pre

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. data/.gitignore +7 -0
  2. data/.rspec +1 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +45 -0
  5. data/Rakefile +30 -0
  6. data/lib/vorax/base_funnel.rb +30 -0
  7. data/lib/vorax/output/html_convertor.rb +120 -0
  8. data/lib/vorax/output/html_funnel.rb +79 -0
  9. data/lib/vorax/output/pagezip_convertor.rb +20 -0
  10. data/lib/vorax/output/tablezip_convertor.rb +22 -0
  11. data/lib/vorax/output/vertical_convertor.rb +53 -0
  12. data/lib/vorax/output/zip_convertor.rb +117 -0
  13. data/lib/vorax/parser/argument.rb~ +125 -0
  14. data/lib/vorax/parser/body_split.rb +168 -0
  15. data/lib/vorax/parser/conn_string.rb +104 -0
  16. data/lib/vorax/parser/grammars/alias.rb +912 -0
  17. data/lib/vorax/parser/grammars/alias.rl +146 -0
  18. data/lib/vorax/parser/grammars/column.rb +454 -0
  19. data/lib/vorax/parser/grammars/column.rl +64 -0
  20. data/lib/vorax/parser/grammars/common.rl +98 -0
  21. data/lib/vorax/parser/grammars/package_spec.rb +1186 -0
  22. data/lib/vorax/parser/grammars/package_spec.rl +78 -0
  23. data/lib/vorax/parser/grammars/plsql_def.rb +469 -0
  24. data/lib/vorax/parser/grammars/plsql_def.rl +59 -0
  25. data/lib/vorax/parser/grammars/statement.rb +925 -0
  26. data/lib/vorax/parser/grammars/statement.rl +83 -0
  27. data/lib/vorax/parser/parser.rb +320 -0
  28. data/lib/vorax/parser/plsql_structure.rb +158 -0
  29. data/lib/vorax/parser/plsql_walker.rb +143 -0
  30. data/lib/vorax/parser/statement_inspector.rb~ +52 -0
  31. data/lib/vorax/parser/stmt_inspector.rb +78 -0
  32. data/lib/vorax/parser/target_ref.rb +110 -0
  33. data/lib/vorax/sqlplus.rb +281 -0
  34. data/lib/vorax/version.rb +7 -0
  35. data/lib/vorax/vorax_io.rb +70 -0
  36. data/lib/vorax.rb +60 -0
  37. data/spec/column_spec.rb +40 -0
  38. data/spec/conn_string_spec.rb +53 -0
  39. data/spec/package_spec_spec.rb +48 -0
  40. data/spec/pagezip_spec.rb +153 -0
  41. data/spec/parser_spec.rb +299 -0
  42. data/spec/plsql_structure_spec.rb +44 -0
  43. data/spec/spec_helper.rb +13 -0
  44. data/spec/sql/create_objects.sql +69 -0
  45. data/spec/sql/dbms_crypto.spc +339 -0
  46. data/spec/sql/dbms_crypto.~spc +339 -0
  47. data/spec/sql/dbms_stats.spc +4097 -0
  48. data/spec/sql/drop_user.sql +10 -0
  49. data/spec/sql/muci.spc +24 -0
  50. data/spec/sql/setup_user.sql +22 -0
  51. data/spec/sql/test.pkg +67 -0
  52. data/spec/sqlplus_spec.rb +52 -0
  53. data/spec/stmt_inspector_spec.rb +84 -0
  54. data/spec/tablezip_spec.rb +111 -0
  55. data/spec/vertical_spec.rb +150 -0
  56. data/vorax.gemspec +21 -0
  57. metadata +139 -0
@@ -0,0 +1,339 @@
1
+ PACKAGE DBMS_CRYPTO AS
2
+  
3
+ ---------------------------------------------------------------------------
4
+ --
5
+ -- PACKAGE NOTES
6
+ --
7
+ -- DBMS_CRYPTO contains basic cryptographic functions and
8
+ -- procedures. To use correctly and securely, a general level of
9
+ -- security expertise is assumed.
10
+ --
11
+ -- VARCHAR2 datatype is not supported. Cryptographic operations
12
+ -- on this type should be prefaced with conversions to a uniform
13
+ -- character set (AL32UTF8) and conversion to RAW type.
14
+ --
15
+ -- Prior to encryption, hashing or keyed hashing, CLOB datatype is
16
+ -- converted to AL32UTF8. This allows cryptographic data to be
17
+ -- transferred and understood between databases with different
18
+ -- character sets, across character set changes and between
19
+ -- separate processes (for example, Java programs).
20
+ --
21
+ ---------------------------------------------------------------------------
22
+  
23
+  
24
+ -------------------------- ALGORITHM CONSTANTS ----------------------------
25
+ -- The following constants refer to various types of cryptographic
26
+ -- functions available from this package. Some of the constants
27
+ -- represent modifiers to these algorithms.
28
+ ---------------------------------------------------------------------------
29
+  
30
+ -- Hash Functions
31
+ HASH_MD4 CONSTANT PLS_INTEGER := 1;
32
+ HASH_MD5 CONSTANT PLS_INTEGER := 2;
33
+ HASH_SH1 CONSTANT PLS_INTEGER := 3;
34
+  
35
+ -- MAC Functions
36
+ HMAC_MD5 CONSTANT PLS_INTEGER := 1;
37
+ HMAC_SH1 CONSTANT PLS_INTEGER := 2;
38
+  
39
+ -- Block Cipher Algorithms
40
+ ENCRYPT_DES CONSTANT PLS_INTEGER := 1; -- 0x0001
41
+ ENCRYPT_3DES_2KEY CONSTANT PLS_INTEGER := 2; -- 0x0002
42
+ ENCRYPT_3DES CONSTANT PLS_INTEGER := 3; -- 0x0003
43
+ ENCRYPT_AES CONSTANT PLS_INTEGER := 4; -- 0x0004
44
+ ENCRYPT_PBE_MD5DES CONSTANT PLS_INTEGER := 5; -- 0x0005
45
+ ENCRYPT_AES128 CONSTANT PLS_INTEGER := 6; -- 0x0006
46
+ ENCRYPT_AES192 CONSTANT PLS_INTEGER := 7; -- 0x0007
47
+ ENCRYPT_AES256 CONSTANT PLS_INTEGER := 8; -- 0x0008
48
+  
49
+ -- Block Cipher Chaining Modifiers
50
+ CHAIN_CBC CONSTANT PLS_INTEGER := 256; -- 0x0100
51
+ CHAIN_CFB CONSTANT PLS_INTEGER := 512; -- 0x0200
52
+ CHAIN_ECB CONSTANT PLS_INTEGER := 768; -- 0x0300
53
+ CHAIN_OFB CONSTANT PLS_INTEGER := 1024; -- 0x0400
54
+  
55
+ -- Block Cipher Padding Modifiers
56
+ PAD_PKCS5 CONSTANT PLS_INTEGER := 4096; -- 0x1000
57
+ PAD_NONE CONSTANT PLS_INTEGER := 8192; -- 0x2000
58
+ PAD_ZERO CONSTANT PLS_INTEGER := 12288; -- 0x3000
59
+ PAD_ORCL CONSTANT PLS_INTEGER := 16384; -- 0x4000
60
+  
61
+ -- Stream Cipher Algorithms
62
+ ENCRYPT_RC4 CONSTANT PLS_INTEGER := 129; -- 0x0081
63
+  
64
+  
65
+ -- Convenience Constants for Block Ciphers
66
+ DES_CBC_PKCS5 CONSTANT PLS_INTEGER := ENCRYPT_DES
67
+ + CHAIN_CBC
68
+ + PAD_PKCS5;
69
+  
70
+ DES3_CBC_PKCS5 CONSTANT PLS_INTEGER := ENCRYPT_3DES
71
+ + CHAIN_CBC
72
+ + PAD_PKCS5;
73
+  
74
+ AES_CBC_PKCS5 CONSTANT PLS_INTEGER := ENCRYPT_AES
75
+ + CHAIN_CBC
76
+ + PAD_PKCS5;
77
+  
78
+  
79
+ ----------------------------- EXCEPTIONS ----------------------------------
80
+ -- Invalid Cipher Suite
81
+ CipherSuiteInvalid EXCEPTION;
82
+ PRAGMA EXCEPTION_INIT(CipherSuiteInvalid, -28827);
83
+  
84
+ -- Null Cipher Suite
85
+ CipherSuiteNull EXCEPTION;
86
+ PRAGMA EXCEPTION_INIT(CipherSuiteNull, -28829);
87
+  
88
+ -- Key Null
89
+ KeyNull EXCEPTION;
90
+ PRAGMA EXCEPTION_INIT(KeyNull, -28239);
91
+  
92
+ -- Key Bad Size
93
+ KeyBadSize EXCEPTION;
94
+ PRAGMA EXCEPTION_INIT(KeyBadSize, -28234);
95
+  
96
+ -- Double Encryption
97
+ DoubleEncryption EXCEPTION;
98
+ PRAGMA EXCEPTION_INIT(DoubleEncryption, -28233);
99
+  
100
+  
101
+ ---------------------- FUNCTIONS AND PROCEDURES ------------------------
102
+  
103
+ ------------------------------------------------------------------------
104
+ --
105
+ -- NAME: Encrypt
106
+ --
107
+ -- DESCRIPTION:
108
+ --
109
+ -- Encrypt plain text data using stream or block cipher with user
110
+ -- supplied key and optional iv.
111
+ --
112
+ -- PARAMETERS
113
+ --
114
+ -- plaintext - Plaintext data to be encrypted
115
+ -- crypto_type - Stream or block cipher type plus modifiers
116
+ -- key - Key to be used for encryption
117
+ -- iv - Optional IV for block ciphers. Default all zeros.
118
+ --
119
+ -- USAGE NOTES:
120
+ --
121
+ -- Block ciphers may be modified with chaining type (CBC most
122
+ -- common) and padding type (PKCS5 recommended). Of the four
123
+ -- common data formats, three have been provided: RAW, BLOB,
124
+ -- CLOB. For VARCHAR2 encryption, callers should first convert
125
+ -- to AL32UTF8 character set and then encrypt.
126
+ --
127
+ -- Encrypt(UTL_RAW.CAST_TO_RAW(CONVERT(src,'AL32UTF8')),typ,key);
128
+ --
129
+ -- As return type for encrypt is RAW, callers should consider
130
+ -- encoding it with RAWTOHEX or UTL_ENCODE.BASE64_ENCODE to make
131
+ -- it suitable for VARCHAR2 storage. These functions expand
132
+ -- data size by 2 and 4/3, respectively.
133
+ --
134
+ -- To improve readability, callers should define their own
135
+ -- package level constants to represent the ciphersuites used
136
+ -- for encryption and decryption.
137
+ --
138
+ -- For example:
139
+ --
140
+ -- DES_CBC_PKCS5 CONSTANT PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_DES
141
+ -- + DBMS_CRYPTO.CHAIN_CBC
142
+ -- + DBMS_CRYPTO.PAD_PKCS5;
143
+ --
144
+ --
145
+ -- STREAM CIPHERS (RC4) ARE NOT RECOMMENDED FOR STORED DATA ENCRYPTION.
146
+ --
147
+ --
148
+ ------------------------------------------------------------------------
149
+  
150
+ FUNCTION Encrypt (src IN RAW,
151
+ typ IN PLS_INTEGER,
152
+ key IN RAW,
153
+ iv IN RAW DEFAULT NULL)
154
+ RETURN RAW;
155
+  
156
+ PROCEDURE Encrypt (dst IN OUT NOCOPY BLOB,
157
+ src IN BLOB,
158
+ typ IN PLS_INTEGER,
159
+ key IN RAW,
160
+ iv IN RAW DEFAULT NULL);
161
+  
162
+ PROCEDURE Encrypt (dst IN OUT NOCOPY BLOB,
163
+ src IN CLOB CHARACTER SET ANY_CS,
164
+ typ IN PLS_INTEGER,
165
+ key IN RAW,
166
+ iv IN RAW DEFAULT NULL);
167
+  
168
+  
169
+ ------------------------------------------------------------------------
170
+ --
171
+ -- NAME: Decrypt
172
+ --
173
+ -- DESCRIPTION:
174
+ --
175
+ -- Decrypt crypt text data using stream or block cipher with user
176
+ -- supplied key and optional iv.
177
+ --
178
+ -- PARAMETERS
179
+ --
180
+ -- cryptext - Crypt text data to be decrypted
181
+ -- crypto_type - Stream or block cipher type plus modifiers
182
+ -- key - Key to be used for encryption
183
+ -- iv - Optional IV for block ciphers. Default all zeros.
184
+ --
185
+ -- USAGE NOTES:
186
+ -- To retrieve original plain text data, Decrypt must be called
187
+ -- with the same cipher, modifiers, key and iv used for
188
+ -- encryption. If crypt text data was converted to hex or
189
+ -- base64 prior to storage, it must be decoded using HEXTORAW or
190
+ -- UTL_ENCODE.BASE64_DECODE prior to decryption.
191
+ --
192
+ ------------------------------------------------------------------------
193
+  
194
+ FUNCTION Decrypt (src IN RAW,
195
+ typ IN PLS_INTEGER,
196
+ key IN RAW,
197
+ iv IN RAW DEFAULT NULL)
198
+ RETURN RAW;
199
+  
200
+ PROCEDURE Decrypt (dst IN OUT NOCOPY BLOB,
201
+ src IN BLOB,
202
+ typ IN PLS_INTEGER,
203
+ key IN RAW,
204
+ iv IN RAW DEFAULT NULL);
205
+  
206
+ PROCEDURE Decrypt (dst IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
207
+ src IN BLOB,
208
+ typ IN PLS_INTEGER,
209
+ key IN RAW,
210
+ iv IN RAW DEFAULT NULL);
211
+  
212
+  
213
+ ------------------------------------------------------------------------
214
+ --
215
+ -- NAME: Hash
216
+ --
217
+ -- DESCRIPTION:
218
+ --
219
+ -- Hash source data by cryptographic hash type.
220
+ --
221
+ -- PARAMETERS
222
+ --
223
+ -- source - Source data to be hashed
224
+ -- hash_type - Hash algorithm to be used
225
+ --
226
+ -- USAGE NOTES:
227
+ -- SHA-1 (HASH_SH1) is recommended. Consider encoding returned
228
+ -- raw value to hex or base64 prior to storage.
229
+ --
230
+ ------------------------------------------------------------------------
231
+  
232
+ FUNCTION Hash (src IN RAW,
233
+ typ IN PLS_INTEGER)
234
+ RETURN RAW DETERMINISTIC;
235
+  
236
+ FUNCTION Hash (src IN BLOB,
237
+ typ IN PLS_INTEGER)
238
+ RETURN RAW DETERMINISTIC;
239
+  
240
+ FUNCTION Hash (src IN CLOB CHARACTER SET ANY_CS,
241
+ typ IN PLS_INTEGER)
242
+ RETURN RAW DETERMINISTIC;
243
+  
244
+  
245
+ ------------------------------------------------------------------------
246
+ --
247
+ -- NAME: Mac
248
+ --
249
+ -- DESCRIPTION:
250
+ --
251
+ -- Message Authentication Code algorithms provide keyed message
252
+ -- protection.
253
+ --
254
+ -- PARAMETERS
255
+ --
256
+ -- source - Source data to be mac-ed
257
+ -- mac_type - Mac algorithm to be used
258
+ -- key - Key to be used for mac
259
+ --
260
+ -- USAGE NOTES:
261
+ -- Callers should consider encoding returned raw value to hex or
262
+ -- base64 prior to storage.
263
+ --
264
+ ------------------------------------------------------------------------
265
+ FUNCTION Mac (src IN RAW,
266
+ typ IN PLS_INTEGER,
267
+ key IN RAW)
268
+ RETURN RAW;
269
+  
270
+ FUNCTION Mac (src IN BLOB,
271
+ typ IN PLS_INTEGER,
272
+ key IN RAW)
273
+ RETURN RAW;
274
+  
275
+ FUNCTION Mac (src IN CLOB CHARACTER SET ANY_CS,
276
+ typ IN PLS_INTEGER,
277
+ key IN RAW)
278
+ RETURN RAW;
279
+  
280
+  
281
+ ------------------------------------------------------------------------
282
+ --
283
+ -- NAME: RandomBytes
284
+ --
285
+ -- DESCRIPTION:
286
+ --
287
+ -- Returns a raw value containing a pseudo-random sequence of
288
+ -- bytes.
289
+ --
290
+ -- PARAMETERS
291
+ --
292
+ -- number_bytes - Number of pseudo-random bytes to be generated.
293
+ --
294
+ -- USAGE NOTES:
295
+ -- number_bytes should not exceed maximum RAW length.
296
+ --
297
+ ------------------------------------------------------------------------
298
+ FUNCTION RandomBytes (number_bytes IN PLS_INTEGER)
299
+ RETURN RAW;
300
+  
301
+  
302
+ ------------------------------------------------------------------------
303
+ --
304
+ -- NAME: RandomNumber
305
+ --
306
+ -- DESCRIPTION:
307
+ --
308
+ -- Returns a random Oracle Number.
309
+ --
310
+ -- PARAMETERS
311
+ --
312
+ -- None.
313
+ --
314
+ ------------------------------------------------------------------------
315
+ FUNCTION RandomNumber
316
+ RETURN NUMBER;
317
+  
318
+  
319
+ ------------------------------------------------------------------------
320
+ --
321
+ -- NAME: RandomInteger
322
+ --
323
+ -- DESCRIPTION:
324
+ --
325
+ -- Returns a random BINARY_INTEGER.
326
+ --
327
+ -- PARAMETERS
328
+ --
329
+ -- None.
330
+ --
331
+ ------------------------------------------------------------------------
332
+ FUNCTION RandomInteger
333
+ RETURN BINARY_INTEGER;
334
+  
335
+  
336
+ PRAGMA RESTRICT_REFERENCES(DEFAULT, WNDS, RNDS, WNPS, RNPS);
337
+  
338
+ END DBMS_CRYPTO;
339
+