Skip to content

Commit 5ac7f11

Browse files
committed
AES enabled versions for 11g compatibility
Use these scripts if you are on 11g to leverage advanced CRYPTO features
1 parent 8803137 commit 5ac7f11

File tree

2 files changed

+185
-0
lines changed

2 files changed

+185
-0
lines changed

11g - AES/ex_crypto_AES.sql

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*----------------------------------------------------------------------------------------
2+
-- FILE NAME : ex_crypto_aes.sql
3+
-- Generated By : Ex!lant Technologies Pvt Ltd.
4+
-- Description : Package for ex_crypto_aes Oracle based DBMS_CRYPTO encryption and
5+
-- decryption utilities
6+
-- Date : Sept 17, 2012
7+
-- Author : Exilant Technologies Private Limited
8+
-- Modification History:
9+
------------------------------------------------------------------------------------------
10+
-- When Who What
11+
------------------------------------------------------------------------------------------
12+
-- 17/09/2012 Ex! Dev Team Initial Version
13+
----------------------------------------------------------------------------------------*/
14+
CREATE OR REPLACE PACKAGE ex_crypto_aes
15+
AS
16+
FUNCTION f_encrypt_raw( in_encrypt IN RAW, in_aes_size IN PLS_INTEGER DEFAULT 128,numeric_flag IN PLS_INTEGER DEFAULT 0) RETURN RAW DETERMINISTIC;
17+
FUNCTION f_string_encrypt( in_encrypt IN VARCHAR2, in_aes_size IN PLS_INTEGER DEFAULT 128, numeric_flag IN PLS_INTEGER DEFAULT 0 ) RETURN RAW DETERMINISTIC;
18+
FUNCTION f_number_encrypt( in_encrypt IN NUMBER, in_aes_size IN PLS_INTEGER DEFAULT 128, numeric_flag IN PLS_INTEGER DEFAULT 0) RETURN RAW DETERMINISTIC;
19+
FUNCTION f_decrypt_raw( in_decrypt IN RAW, in_aes_size IN PLS_INTEGER DEFAULT 128, numeric_flag IN PLS_INTEGER DEFAULT 0) RETURN RAW DETERMINISTIC;
20+
FUNCTION f_string_decrypt( in_decrypt IN RAW, in_aes_size IN PLS_INTEGER DEFAULT 128, numeric_flag IN PLS_INTEGER DEFAULT 0) RETURN VARCHAR2 DETERMINISTIC;
21+
gv_pgm_nm error_log.program_err_msg%TYPE;
22+
gv_err_msg error_log.program_err_msg%TYPE;
23+
ge_null_input EXCEPTION;
24+
25+
END ex_crypto_aes;
26+
/
27+
28+
SHO ERR;
29+
30+
31+
CREATE OR REPLACE PUBLIC SYNONYM ex_crypto_aes FOR ex_crypto_aes;
32+
33+
GRANT EXECUTE ON ex_crypto_aes TO PUBLIC;

11g - AES/ex_crypto_AES_body.sql

Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
/*----------------------------------------------------------------------------------------
2+
-- FILE NAME : ex_crypto__aespkg_body.sql
3+
-- Generated By : Exilant Technologies Private Limited
4+
-- Description : Package body for ex_crypto_aes Oracle based DBMS_CRYPTO encryption and
5+
-- decryption utilities
6+
-- Date : Sept 17, 2012
7+
-- Author : Ex!lant Development Team
8+
-- Modification History:
9+
------------------------------------------------------------------------------------------
10+
-- When Who What
11+
------------------------------------------------------------------------------------------
12+
-- 17/09/2012 Ex! Dev Team Initial Version
13+
----------------------------------------------------------------------------------------*/
14+
CREATE OR REPLACE PACKAGE BODY ex_crypto_aes
15+
AS
16+
lv_charset VARCHAR2(30) := 'AL32UTF8';
17+
18+
FUNCTION f_get_encryption_type (in_n_encryptionkey_size IN PLS_INTEGER,numeric_flag IN PLS_INTEGER DEFAULT 0)
19+
RETURN BINARY_INTEGER DETERMINISTIC
20+
IS
21+
BEGIN
22+
gv_pgm_nm := 'f_get_encryption_type';
23+
RETURN ((CASE in_n_encryptionkey_size
24+
WHEN 128 THEN DBMS_CRYPTO.ENCRYPT_AES128
25+
WHEN 192 THEN DBMS_CRYPTO.ENCRYPT_AES192
26+
WHEN 256 THEN DBMS_CRYPTO.ENCRYPT_AES256
27+
END)
28+
+ DBMS_CRYPTO.CHAIN_CBC +
29+
(CASE numeric_flag
30+
WHEN 0 THEN DBMS_CRYPTO.PAD_PKCS5
31+
WHEN 1 THEN DBMS_CRYPTO.PAD_ZERO
32+
END)
33+
);
34+
EXCEPTION
35+
WHEN OTHERS THEN
36+
gv_err_msg := 'Error occurred while processing input key size :'||in_n_encryptionkey_size;
37+
p_log_error(gv_err_msg, gv_pgm_nm);
38+
RETURN 0;
39+
END f_get_encryption_type;
40+
41+
FUNCTION f_get_key(in_n_encryptionkey_size IN PLS_INTEGER)
42+
RETURN RAW DETERMINISTIC
43+
IS
44+
lr_key RAW(32) := UTL_I18N.STRING_TO_RAW ('Ex!l@n8Te3hn0l0giesPr1v@8L1m1teD',lv_charset);
45+
BEGIN
46+
gv_pgm_nm := 'f_get_key';
47+
48+
RETURN UTL_RAW.SUBSTR(lr_key ,1,in_n_encryptionkey_size/8);
49+
50+
EXCEPTION
51+
WHEN OTHERS THEN
52+
gv_err_msg := 'Error occurred while processing input key size :'||in_n_encryptionkey_size;
53+
p_log_error(gv_err_msg, gv_pgm_nm);
54+
RETURN NULL;
55+
END f_get_key;
56+
57+
58+
FUNCTION f_encrypt_raw(in_encrypt IN RAW, in_aes_size IN PLS_INTEGER DEFAULT 128, numeric_flag IN PLS_INTEGER DEFAULT 0)
59+
RETURN RAW
60+
IS
61+
BEGIN
62+
gv_pgm_nm := 'f_raw_encrypt';
63+
64+
IF in_encrypt IS NULL THEN
65+
RAISE ge_null_input;
66+
ELSE
67+
RETURN DBMS_CRYPTO.ENCRYPT ( src => TRIM(in_encrypt),
68+
typ => f_get_encryption_type(in_aes_size,numeric_flag),
69+
key => f_get_key(in_aes_size)
70+
);
71+
END IF;
72+
73+
EXCEPTION
74+
WHEN ge_null_input THEN
75+
gv_err_msg := 'NULL Input string provided';
76+
p_log_error(gv_err_msg, gv_pgm_nm);
77+
RETURN NULL;
78+
WHEN OTHERS THEN
79+
gv_err_msg := 'Error occurred while processing input string :'||in_encrypt||' and keysize :'||in_aes_size;
80+
p_log_error(gv_err_msg, gv_pgm_nm);
81+
RETURN NULL;
82+
END f_encrypt_raw;
83+
84+
FUNCTION f_string_encrypt(in_encrypt IN VARCHAR2, in_aes_size IN PLS_INTEGER DEFAULT 128, numeric_flag IN PLS_INTEGER DEFAULT 0)
85+
RETURN RAW
86+
IS
87+
BEGIN
88+
RETURN f_encrypt_raw(UTL_I18N.STRING_TO_RAW(TRIM(in_encrypt),lv_charset),in_aes_size,numeric_flag);
89+
EXCEPTION
90+
WHEN OTHERS THEN
91+
gv_pgm_nm := 'f_string_encrypt';
92+
gv_err_msg := 'Error occurred while processing input string :'||in_encrypt||' and keysize :'||in_aes_size;
93+
p_log_error(gv_err_msg, gv_pgm_nm);
94+
RETURN NULL;
95+
END f_string_encrypt;
96+
97+
FUNCTION f_number_encrypt(in_encrypt IN NUMBER,in_aes_size IN PLS_INTEGER DEFAULT 128, numeric_flag IN PLS_INTEGER DEFAULT 0)
98+
RETURN RAW
99+
IS
100+
BEGIN
101+
RETURN f_encrypt_raw(UTL_I18N.STRING_TO_RAW(TRIM(TO_CHAR(in_encrypt)),lv_charset),in_aes_size,numeric_flag);
102+
EXCEPTION
103+
WHEN OTHERS THEN
104+
gv_pgm_nm := 'f_number_encrypt';
105+
gv_err_msg := 'Error occurred while processing input NUMBER :'||in_encrypt||' and keysize :'||in_aes_size;
106+
p_log_error(gv_err_msg, gv_pgm_nm);
107+
RETURN NULL;
108+
END f_number_encrypt;
109+
110+
111+
FUNCTION f_decrypt_raw(in_decrypt IN RAW,in_aes_size IN PLS_INTEGER DEFAULT 128, numeric_flag IN PLS_INTEGER DEFAULT 0)
112+
RETURN RAW
113+
IS
114+
BEGIN
115+
gv_pgm_nm := 'f_decrypt_raw';
116+
IF TRIM(in_decrypt) IS NULL THEN
117+
RAISE ge_null_input;
118+
ELSE
119+
RETURN DBMS_CRYPTO.DECRYPT ( src => TRIM(in_decrypt),
120+
typ => f_get_encryption_type(in_aes_size,numeric_flag),
121+
key => f_get_key(in_aes_size)
122+
);
123+
END IF;
124+
125+
EXCEPTION
126+
WHEN ge_null_input THEN
127+
gv_err_msg := 'NULL Input Decryption string provided';
128+
p_log_error(gv_err_msg, gv_pgm_nm);
129+
RETURN NULL;
130+
WHEN OTHERS THEN
131+
gv_err_msg := 'Error occurred while processing input string :'||in_decrypt||' and keysize :'||in_aes_size;
132+
p_log_error(gv_err_msg, gv_pgm_nm);
133+
RETURN NULL;
134+
end f_decrypt_raw;
135+
136+
137+
FUNCTION f_string_decrypt(in_decrypt IN RAW,in_aes_size IN PLS_INTEGER DEFAULT 128, numeric_flag IN PLS_INTEGER DEFAULT 0)
138+
RETURN VARCHAR2
139+
IS
140+
BEGIN
141+
RETURN TRIM(UTL_I18N.RAW_TO_CHAR(f_decrypt_raw(in_decrypt,in_aes_size,numeric_flag),lv_charset));
142+
EXCEPTION
143+
WHEN OTHERS THEN
144+
gv_pgm_nm := 'f_string_decrypt';
145+
gv_err_msg := 'Error occurred while processing input string :'||in_decrypt||' and keysize :'||in_aes_size;
146+
p_log_error(gv_err_msg, gv_pgm_nm);
147+
RETURN NULL;
148+
END f_string_decrypt;
149+
150+
151+
END ex_crypto_aes;
152+
/

0 commit comments

Comments
 (0)