vorax 0.1.0pre

Sign up to get free protection for your applications and to get access to all the features.
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
+