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