-rw-r--r-- | backend/node/src/clipperz.js | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/backend/node/src/clipperz.js b/backend/node/src/clipperz.js index 72b6c9f..842de31 100644 --- a/backend/node/src/clipperz.js +++ b/backend/node/src/clipperz.js | |||
@@ -164,24 +164,26 @@ var CLIPPERZ = module.exports = function(CONFIG) { | |||
164 | +" RETURNING o.otps_id!=otp.otps_id AS yes, o.otp_ref", | 164 | +" RETURNING o.otps_id!=otp.otps_id AS yes, o.otp_ref", |
165 | [ req.session.otp, req.session.u ], | 165 | [ req.session.otp, req.session.u ], |
166 | function(e,r) { | 166 | function(e,r) { |
167 | if(e) return cb(e); | 167 | if(e) return cb(e); |
168 | if(!r.rowCount) return cb(new Error('no OTP found')); | 168 | if(!r.rowCount) return cb(new Error('no OTP found')); |
169 | r=r.rows[0]; | 169 | r=r.rows[0]; |
170 | if(!r.yes) return cb(new Error('OTP is in a sorry state')); | 170 | if(!r.yes) return cb(new Error('OTP is in a sorry state')); |
171 | cb(null,{ref:r.otp_ref}); | 171 | cb(null,{ref:r.otp_ref}); |
172 | }); | 172 | }); |
173 | }] | 173 | }] |
174 | },function(e,r) { | 174 | },function(e,r) { |
175 | if(e) return cb(e); | 175 | if(e) return cb(e); |
176 | var A = BIGNUM(ppp.A,16); | ||
177 | if(A.eq(0)) return cb(new Error('Ground Zero')); | ||
176 | req.session.C = ppp.C; req.session.A = ppp.A; | 178 | req.session.C = ppp.C; req.session.A = ppp.A; |
177 | req.session.s = r.u.u_srp_s; req.session.v = r.u.u_srp_v; | 179 | req.session.s = r.u.u_srp_s; req.session.v = r.u.u_srp_v; |
178 | req.session.u = r.u.u_id; | 180 | req.session.u = r.u.u_id; |
179 | req.session.b = clipperz_random(); | 181 | req.session.b = clipperz_random(); |
180 | req.session.B = srp_k.mul(BIGNUM(req.session.v,16)).add(srp_g.powm(BIGNUM(req.session.b,16),srp_n)).toString(16); | 182 | req.session.B = srp_k.mul(BIGNUM(req.session.v,16)).add(srp_g.powm(BIGNUM(req.session.b,16),srp_n)).toString(16); |
181 | var rv = {s:req.session.s,B:req.session.B} | 183 | var rv = {s:req.session.s,B:req.session.B} |
182 | if(r.otp && r.otp.otp_ref) rv.oneTimePassword=r.otp.otp_ref; | 184 | if(r.otp && r.otp.otp_ref) rv.oneTimePassword=r.otp.otp_ref; |
183 | res.res(rv); | 185 | res.res(rv); |
184 | }); | 186 | }); |
185 | 187 | ||
186 | case 'credentialCheck': | 188 | case 'credentialCheck': |
187 | var u = clipperz_hash(BIGNUM(req.session.A,16).toString(10)+BIGNUM(req.session.B,16).toString(10)); | 189 | var u = clipperz_hash(BIGNUM(req.session.A,16).toString(10)+BIGNUM(req.session.B,16).toString(10)); |