m2u-upass-core / src / my / com / upass / vasco / TokenControllerImpl.java @ 0:02300db8682b
History | View | Annotate | Download (6.72 KB)
1 | 0:02300db8682b | hadi | package my.com.upass.vasco; |
---|---|---|---|
2 | |||
3 | import java.util.HashMap; |
||
4 | |||
5 | import org.apache.log4j.Logger; |
||
6 | |||
7 | import com.vasco.utils.AAL2Wrap; |
||
8 | //import com.vasco.utils.Digipass;
|
||
9 | import com.vasco.utils.DigipassInfo; |
||
10 | import com.vasco.utils.KernelParms; |
||
11 | |||
12 | import my.com.upass.Constants; |
||
13 | import my.com.upass.TokenBean; |
||
14 | |||
15 | public class TokenControllerImpl implements TokenController { |
||
16 | |||
17 | private static final Logger logger = Logger.getLogger (TokenController.class); |
||
18 | private AAL2Wrap wrapper = new AAL2Wrap(); |
||
19 | private KernelParms parms = new KernelParms(100,24,0,0,1,3,0,0,0,6,0,100,0,0,0x7FFFFF,0,0,0,0); |
||
20 | |||
21 | private byte[] blob; |
||
22 | private TokenBean tb;
|
||
23 | |||
24 | |||
25 | public TokenControllerImpl(TokenBean tokenBean) {
|
||
26 | this.tb = tokenBean;
|
||
27 | setBlob(); |
||
28 | } |
||
29 | |||
30 | /**
|
||
31 | * <Method description>
|
||
32 | *
|
||
33 | * @param tokenBean
|
||
34 | *
|
||
35 | * @see my.com.upass.vasco.TokenController_#setObject(my.com.upass.TokenBean)
|
||
36 | */
|
||
37 | @Override
|
||
38 | public void setObject(TokenBean tokenBean) { |
||
39 | this.tb = tokenBean;
|
||
40 | } |
||
41 | |||
42 | /**
|
||
43 | * <Method description>
|
||
44 | *
|
||
45 | * @return
|
||
46 | *
|
||
47 | * @see my.com.upass.vasco.TokenController_#getUpdatedObject()
|
||
48 | */
|
||
49 | @Override
|
||
50 | public TokenBean getUpdatedObject() {
|
||
51 | return tb;
|
||
52 | } |
||
53 | |||
54 | private void setBlob() { |
||
55 | this.blob = tb.getVdpCipherText();
|
||
56 | } |
||
57 | |||
58 | public byte[] getUpdatedBlob() { |
||
59 | return this.blob; |
||
60 | } |
||
61 | |||
62 | /**
|
||
63 | * <Method description>
|
||
64 | *
|
||
65 | * @return
|
||
66 | *
|
||
67 | * @see my.com.upass.vasco.TokenController_#getRetCode()
|
||
68 | */
|
||
69 | @Override
|
||
70 | public int getRetCode() { |
||
71 | return wrapper.getRetCode();
|
||
72 | } |
||
73 | |||
74 | /**
|
||
75 | * <Method description>
|
||
76 | *
|
||
77 | * @return
|
||
78 | *
|
||
79 | * @see my.com.upass.vasco.TokenController_#getLastError()
|
||
80 | */
|
||
81 | @Override
|
||
82 | public String getLastError() { |
||
83 | return wrapper.getLastError();
|
||
84 | } |
||
85 | |||
86 | ///////////////////////////////////////////////////////////////////////
|
||
87 | // Public
|
||
88 | ///////////////////////////////////////////////////////////////////////
|
||
89 | |||
90 | public HashMap<String,String> getTokenBlobInfo() { |
||
91 | HashMap<String,String> map = new HashMap<String,String>(); |
||
92 | DigipassInfo di = wrapper.AAL2GetTokenInfo(this.blob, this.parms); |
||
93 | |||
94 | map.put("TOKEN_MODEL", di.getInfo(DigipassInfo.TOKEN_MODEL) );
|
||
95 | map.put("USE_COUNT", di.getInfo(DigipassInfo.USE_COUNT));
|
||
96 | map.put("ERROR_COUNT", di.getInfo(DigipassInfo.ERROR_COUNT));
|
||
97 | map.put("LAST_TIME_USED", di.getInfo(DigipassInfo.LAST_TIME_USED) );
|
||
98 | map.put("CODE_WORD", di.getInfo(DigipassInfo.CODE_WORD));
|
||
99 | map.put("TRIPLE_DES", di.getInfo(DigipassInfo.TRIPLE_DES));
|
||
100 | map.put("MAX_INPUT_FIELDS", di.getInfo(DigipassInfo.MAX_INPUT_FIELDS));
|
||
101 | map.put("RESPONSE_LENGTH", di.getInfo(DigipassInfo.RESPONSE_LENGTH));
|
||
102 | map.put("RESPONSE_TYPE", di.getInfo(DigipassInfo.RESPONSE_TYPE));
|
||
103 | map.put("RESPONSE_CHECKSUM", di.getInfo(DigipassInfo.RESPONSE_CHECKSUM));
|
||
104 | map.put("TIME_STEP_USED", di.getInfo(DigipassInfo.TIME_STEP_USED));
|
||
105 | |||
106 | return map;
|
||
107 | } |
||
108 | |||
109 | public void dispTokenInfo() { |
||
110 | |||
111 | DigipassInfo di = wrapper.AAL2GetTokenInfo(this.blob, this.parms); |
||
112 | |||
113 | System.out.println("--Info----------------------------------------------"); |
||
114 | System.out.println("TOKEN_MODEL......." + di.getInfo(DigipassInfo.TOKEN_MODEL)); |
||
115 | System.out.println("USE_COUNT........." + di.getInfo(DigipassInfo.USE_COUNT)); |
||
116 | System.out.println("ERR_COUNT........." + di.getInfo(DigipassInfo.ERROR_COUNT)); |
||
117 | System.out.println("LAST_TIME_USED...." + di.getInfo(DigipassInfo.LAST_TIME_USED)); |
||
118 | System.out.println("CODE_WORD........." + di.getInfo(DigipassInfo.CODE_WORD)); |
||
119 | System.out.println("TRIPLE_DES........" + di.getInfo(DigipassInfo.TRIPLE_DES)); |
||
120 | System.out.println("MAX_INPUT_FIELDS.." + di.getInfo(DigipassInfo.MAX_INPUT_FIELDS)); |
||
121 | System.out.println("RESPONSE_LENGTH..." + di.getInfo(DigipassInfo.RESPONSE_LENGTH)); |
||
122 | System.out.println("RESPONSE_TYPE....." + di.getInfo(DigipassInfo.RESPONSE_TYPE)); |
||
123 | System.out.println("RESPONSE_CHECKSUM." + di.getInfo(DigipassInfo.RESPONSE_CHECKSUM)); |
||
124 | System.out.println("TIME_STEP_USED...." + di.getInfo(DigipassInfo.TIME_STEP_USED)); |
||
125 | System.out.println("----------------------------------------------------"); |
||
126 | } |
||
127 | |||
128 | private void updateTokenObject() { |
||
129 | |||
130 | DigipassInfo di = wrapper.AAL2GetTokenInfo(this.blob, this.parms); |
||
131 | |||
132 | tb.setVdpModel( di.getInfo(DigipassInfo.TOKEN_MODEL) ); |
||
133 | tb.setVdpCipherText( this.blob );
|
||
134 | |||
135 | //System.out.println("Use=" + Integer.parseInt( di.getInfo(DigipassInfo.USE_COUNT)) +
|
||
136 | // " Error=" + Integer.parseInt( di.getInfo(DigipassInfo.ERROR_COUNT)));
|
||
137 | |||
138 | tb.setVuseCount(Integer.parseInt( di.getInfo(DigipassInfo.USE_COUNT)) );
|
||
139 | tb.setVerrorCount(Integer.parseInt( di.getInfo(DigipassInfo.ERROR_COUNT)) );
|
||
140 | |||
141 | //System.out.println("u="+tb.getVUseCount() + "e="+tb.getVErrorCount());
|
||
142 | } |
||
143 | |||
144 | |||
145 | @Override
|
||
146 | public int verifyToken(String otp, String userAlias, String pin) throws Exception |
||
147 | { |
||
148 | return verifyToken(otp);
|
||
149 | } |
||
150 | |||
151 | /**
|
||
152 | * <Method description>
|
||
153 | *
|
||
154 | * @param password
|
||
155 | * @return
|
||
156 | *
|
||
157 | * @see my.com.upass.vasco.TokenController_#verifyToken(java.lang.String)
|
||
158 | */
|
||
159 | public int verifyToken(String password) { |
||
160 | |||
161 | int rc = wrapper.AAL2VerifyPassword(this.blob, this.parms, password, null); |
||
162 | |||
163 | updateTokenObject(); |
||
164 | if (rc == 0) { |
||
165 | |||
166 | return Constants.ERR_SUCCESS;
|
||
167 | } |
||
168 | else {
|
||
169 | |||
170 | /*
|
||
171 | * KernelParms:
|
||
172 | * IThreshold - Number of successive Identification errors that will cause Server-side locking of
|
||
173 | * the DIGIPASS. When the specified number is reached, AAL2Wrap.AAL2VerifyPassword()
|
||
174 | * returns an error code 202. E.g. 3 validations have failed for one DIGIPASS,
|
||
175 | * so its error count is 3. If IThreshold is set to 3,
|
||
176 | * further calls to AAL2Wrap.AAL2VerifyPassword() will return 202.
|
||
177 | */
|
||
178 | |||
179 | //System.out.println("rc=" + rc + " Error=" + this.getLastError());
|
||
180 | //err=1,Validation Failed; err=201,Code Replay Attempt ;err=202,Identification Error Threshold Reached
|
||
181 | switch(rc) {
|
||
182 | case 1 : return Constants.ERR_INVALID_CREDENTIAL; |
||
183 | case 201: return Constants.ERR_REUSED_PASSWD; |
||
184 | case 202: return Constants.ERR_EXCEED_MAX_TRIES; |
||
185 | default: return Constants.ERR_UNKNOWN; |
||
186 | }//end case
|
||
187 | } |
||
188 | |||
189 | } |
||
190 | |||
191 | /**
|
||
192 | * <Method description>
|
||
193 | *
|
||
194 | * @return
|
||
195 | *
|
||
196 | * @see my.com.upass.vasco.TokenController_#resetToken()
|
||
197 | */
|
||
198 | @Override
|
||
199 | public int resetToken() { |
||
200 | int rc = wrapper.AAL2ResetTokenInfo(this.blob, this.parms); |
||
201 | updateTokenObject(); |
||
202 | |||
203 | if (rc == 0) { |
||
204 | return Constants.ERR_SUCCESS;
|
||
205 | } |
||
206 | else {
|
||
207 | logger.info("rc=" + rc + " Error=" + this.getLastError()); |
||
208 | |||
209 | switch(rc) {
|
||
210 | case 1 : return Constants.ERR_INVALID_CREDENTIAL; |
||
211 | case 201: return Constants.ERR_REUSED_PASSWD; |
||
212 | default: return Constants.ERR_UNKNOWN; |
||
213 | }//end case
|
||
214 | |||
215 | } |
||
216 | } |
||
217 | |||
218 | @Override
|
||
219 | public int syncToken(String userAlias, String otp1, String otp2) { |
||
220 | // TODO Auto-generated method stub
|
||
221 | return 0; |
||
222 | } |
||
223 | |||
224 | |||
225 | } |