DBA Data[Home] [Help]

PACKAGE BODY: APPS.IEM_UTILS_PVT

Source


1 PACKAGE BODY IEM_UTILS_PVT as
2 /* $Header: iemputib.pls 120.0 2005/06/02 13:43:23 appldev noship $*/
3 
4 G_PKG_NAME CONSTANT varchar2(30) :='IEM_UTILS_PVT ';
5 
6 PROCEDURE IEM_EncryptPassword(
7         P_Api_Version_Number 	  IN NUMBER,
8         P_Init_Msg_List  		  IN VARCHAR2,
9         P_Commit    			  IN VARCHAR2,
10         p_raw_data	              IN VARCHAR2,
11         x_encrypted_data	      OUT NOCOPY  VARCHAR2,
12 	x_encrypted_key		      OUT NOCOPY  VARCHAR2,
13         x_msg_count   		      OUT NOCOPY  NUMBER,
14         x_return_status  		  OUT NOCOPY  VARCHAR2,
15         x_msg_data   			  OUT NOCOPY  VARCHAR2)
16 
17 IS
18     l_api_name              VARCHAR2(255):='IEM_EncryptPassword';
19     l_api_version_number    NUMBER:=1.0;
20 
21     l_length                NUMBER:=0;
22     l_exts_length           NUMBER:=0;
23     l_raw_data              VARCHAR2(200);
24     l_random_key		    VARCHAR2(100);
25 
26     IEM_PASSWORD_NULL        EXCEPTION;
27     IEM_DOUBLE_ENCRIPTED     EXCEPTION;
28 
29     PRAGMA              EXCEPTION_INIT( IEM_PASSWORD_NULL, -28231 );
30     PRAGMA              EXCEPTION_INIT( IEM_DOUBLE_ENCRIPTED, -28233 );
31 
32 BEGIN
33     -- Standard Start of API savepoint
34     SAVEPOINT IEM_EncryptPassword_PVT;
35 
36     -- Standard call to check for call compatibility.
37     IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
38            p_api_version_number,
39            l_api_name,
40            G_PKG_NAME)
41     THEN
42         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
43     END IF;
44 
45     -- Initialize message list if p_init_msg_list is set to TRUE.
46     IF FND_API.to_Boolean( p_init_msg_list ) THEN
47         FND_MSG_PUB.initialize;
48     END IF;
49 
50     -- Initialize API return status to SUCCESS
51     x_return_status := FND_API.G_RET_STS_SUCCESS;
52 
53     -- API begins
54 
55     l_raw_data := RTRIM(LTRIM(p_raw_data));
56 
57 
58     IF l_raw_data is null THEN
59         RAISE IEM_PASSWORD_NULL;
60     END IF;
61 
62     -- Normalize input raw data
63     select MOD(length(l_raw_data),8) into l_length from dual;
64 
65     IF l_length <> 0 THEN
66         WHILE l_length < 8 LOOP
67             l_raw_data := l_raw_data||' ';
68             l_length := l_length + 1;
69         END LOOP;
70     END IF;
71 
72     -- randomly generated encrypted key
73 	l_random_key := TO_CHAR( ABS(DBMS_RANDOM.Random) );
74 
75 	x_encrypted_key := l_random_key;
76 
77     dbms_obfuscation_toolkit.DESEncrypt(
78                input_string => l_raw_data,
79                key_string => l_random_key,
80                encrypted_string => x_encrypted_data );
81 
82      -- Standard Check Of p_commit.
83 	IF FND_API.To_Boolean(p_commit) THEN
84 		COMMIT WORK;
85 	END IF;
86 
87     -- Standard callto get message count and if count is 1, get message info.
88     FND_MSG_PUB.Count_And_Get
89 			( p_count =>  x_msg_count,
90                  p_data  =>    x_msg_data
91 			);
92 
93 EXCEPTION
94     WHEN IEM_PASSWORD_NULL THEN
95         ROLLBACK TO IEM_EncryptPassword_PVT;
96         x_return_status := FND_API.G_RET_STS_ERROR ;
97         FND_MESSAGE.SET_NAME('IEM', 'IEM_PASSWORD_NULL');
98 
99         FND_MSG_PUB.ADD;
100         FND_MSG_PUB.Count_And_Get( p_count =>      x_msg_count,
101                                   p_data  =>      x_msg_data );
102 
103     WHEN IEM_DOUBLE_ENCRIPTED THEN
104         ROLLBACK TO IEM_EncryptPassword_PVT;
105         x_return_status := FND_API.G_RET_STS_ERROR;
106         FND_MESSAGE.SET_NAME('IEM', 'IEM_DOUBLE_ENCRIPTED');
107 
108         FND_MSG_PUB.Add;
109         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
110 
111     WHEN FND_API.G_EXC_ERROR THEN
112         ROLLBACK TO IEM_EncryptPassword_PVT;
113        x_return_status := FND_API.G_RET_STS_ERROR ;
114        FND_MSG_PUB.Count_And_Get( p_count =>      x_msg_count,
115                                   p_data  =>      x_msg_data );
116     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
117         ROLLBACK TO IEM_EncryptPassword_PVT;
118         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
119         FND_MSG_PUB.Count_And_Get( p_count =>      x_msg_count,
120                                   p_data  =>      x_msg_data );
121 
122     WHEN OTHERS THEN
123         ROLLBACK TO IEM_EncryptPassword_PVT;
124                 x_return_status := FND_API.G_RET_STS_ERROR;
125 
126         IF FND_MSG_PUB.Check_Msg_Level
127                 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
128         THEN
129                 FND_MSG_PUB.Add_Exc_Msg
130                     (G_PKG_NAME, l_api_name);
131         END IF;
132 
133         FND_MSG_PUB.Count_And_Get
134                 (p_count => x_msg_count,
135                 p_data => x_msg_data
136             );
137 END IEM_EncryptPassword;
138 
139 
140 
141 
142 PROCEDURE IEM_DecryptPassword(
143         P_Api_Version_Number 	  IN NUMBER,
144         P_Init_Msg_List  		  IN VARCHAR2,
145         P_Commit    			  IN VARCHAR2,
146         p_input_data              IN VARCHAR2,
147 	p_decrypted_key              IN VARCHAR2,
148         x_decrypted_data  	      OUT NOCOPY  VARCHAR2,
149         x_msg_count   		      OUT NOCOPY  NUMBER,
150         x_return_status  		  OUT NOCOPY  VARCHAR2,
151         x_msg_data   			  OUT NOCOPY  VARCHAR2)
152 
153 IS
154     l_api_name              VARCHAR2(255):='DecryptPassword';
155     l_api_version_number    NUMBER:=1.0;
156 
157     l_decrypted_data        VARCHAR2(200);
158 
159     IEM_PASSWORD_NULL        EXCEPTION;
160     IEM_INVALID_INPUT        EXCEPTION; -- not a multiple of 8 bytes
161 
162     PRAGMA              EXCEPTION_INIT( IEM_PASSWORD_NULL, -28231 );
163     PRAGMA              EXCEPTION_INIT( IEM_INVALID_INPUT, -28232 );
164 
165 BEGIN
166     -- Standard Start of API savepoint
167     SAVEPOINT IEM_DecryptPassword_PVT;
168 
169     -- Standard call to check for call compatibility.
170     IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
171            p_api_version_number,
172            l_api_name,
173            G_PKG_NAME)
174     THEN
175         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
176     END IF;
177 
178     -- Initialize message list if p_init_msg_list is set to TRUE.
179     IF FND_API.to_Boolean( p_init_msg_list ) THEN
180         FND_MSG_PUB.initialize;
181     END IF;
182 
183     -- Initialize API return status to SUCCESS
184     x_return_status := FND_API.G_RET_STS_SUCCESS;
185 
186     -- Decrypt the data
187     dbms_obfuscation_toolkit.DESDecrypt(
188                input_string => p_input_data,
189                key_string => p_decrypted_key,
190                decrypted_string => l_decrypted_data );
191 
192 
193     -- Normalize output
194     x_decrypted_data := RTRIM(LTRIM(l_decrypted_data));
195 
196     -- Standard Check Of p_commit.
197 	IF FND_API.To_Boolean(p_commit) THEN
198 		COMMIT WORK;
199 	END IF;
200 
201     -- Standard callto get message count and if count is 1, get message info.
202        FND_MSG_PUB.Count_And_Get
203 			( p_count =>  x_msg_count,
204                  p_data  =>    x_msg_data
205 			);
206 
207 EXCEPTION
208     WHEN IEM_PASSWORD_NULL THEN
209         ROLLBACK TO IEM_DecryptPassword_PVT;
210         x_return_status := FND_API.G_RET_STS_ERROR ;
211         FND_MESSAGE.SET_NAME('IEM', 'IEM_PASSWORD_NULL');
212 
213         FND_MSG_PUB.ADD;
214         FND_MSG_PUB.Count_And_Get( p_count =>      x_msg_count,
215                                   p_data  =>      x_msg_data );
216 
217     WHEN IEM_INVALID_INPUT THEN
218         ROLLBACK TO IEM_DecryptPassword_PVT;
219         x_return_status := FND_API.G_RET_STS_ERROR;
220         FND_MESSAGE.SET_NAME('IEM', 'IEM_INVALID_INPUT');
221 
222         FND_MSG_PUB.Add;
223         FND_MSG_PUB.Count_And_Get(p_count => x_msg_count, p_data => x_msg_data);
224 
225     WHEN FND_API.G_EXC_ERROR THEN
226         ROLLBACK TO IEM_DecryptPassword_PVT;
227        x_return_status := FND_API.G_RET_STS_ERROR ;
228        FND_MSG_PUB.Count_And_Get( p_count =>      x_msg_count,
229                                   p_data  =>      x_msg_data );
230 
231     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
232         ROLLBACK TO IEM_DecryptPassword_PVT;
233         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
234         FND_MSG_PUB.Count_And_Get( p_count =>      x_msg_count,
235                                p_data  =>      x_msg_data );
236 
237     WHEN OTHERS THEN
238 
239         ROLLBACK TO IEM_DecryptPassword_PVT;
240                 x_return_status := FND_API.G_RET_STS_ERROR;
241         IF FND_MSG_PUB.Check_Msg_Level
242                 (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
243         THEN
244                 FND_MSG_PUB.Add_Exc_Msg
245                     (G_PKG_NAME, l_api_name);
246         END IF;
247 
248         FND_MSG_PUB.Count_And_Get
249                 (p_count => x_msg_count,
250                 p_data => x_msg_data
251             );
252     END IEM_DecryptPassword;
253 
254 --transfer string containing elements seperated by ; to table
255  FUNCTION varchar_to_table ( inString    IN   VARCHAR2 )
256         return jtf_varchar2_Table_100
257        is
258     l_indx number:=0;
259    l_temp varchar2(200);
260     l_rem varchar2(2000);
261     l_table jtf_varchar2_Table_100:=jtf_varchar2_Table_100();
262     i BINARY_INTEGER :=1;
263  BEGIN
264     l_rem := inString ;
265 
266     loop
267         l_indx := INSTR(l_rem, ';');
268         if (l_indx <> 0)then
269             l_temp := SUBSTR( l_rem, 1, l_indx-1 );
270             l_rem := SUBSTR( l_rem, l_indx+1);
271             l_table.extend;
272             l_table(i) := l_temp;
273             i := i + 1;
274         else
275             exit;
276         end if;
277     end loop;
278 
279     return l_table;
280 
281 END    varchar_to_table;
282 
283 END IEM_UTILS_PVT;