Statistics
| Branch: | Revision:

m2u-upass-core / src / my / com / upass / vasco / TokenControllerImpl.java @ 0:02300db8682b

History | View | Annotate | Download (6.72 KB)

1
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
}