- if (!oldauthobj || !password) {
- eprint("if no secret given, old auth file must"
- " be present and password must be given");
- return -1;
- }
- rc = make_challenge(myid, password, mynonce, chal, &csize);
- if (rc) {
- eprint("cannot make challenge");
- return -1;
- }
- rc = pcsc_cr(chal, csize, key, &keysize);
- if (rc) {
- eprint("error querying token: %s", pcsc_errstr(rc));
- return -1;
- }
- mysecsize = oldauthsize;
- mysecret = alloca(mysecsize);
- myloadsize = oldauthsize;
- myload = alloca(myloadsize);
- rc = parse_authobj(key, keysize, oldauthobj, oldauthsize,
- mysecret, &mysecsize, myload, &myloadsize);
- if (rc) {
- eprint("cannot parse old authobj: %d", rc);
- return -1;
- }
- }
- if (tokenid) mytokenid = tokenid;
- if (id) myid = id;
- if (nonce) mynonce = nonce;
- else {
- unsigned int prev = atoi(mynonce);
- mynonce = alloca(16);
- sprintf(mynonce, "%d", prev + 1);
- }
+ ao = authobj(userid?userid:w.userid, password,
+ w.nonce, newnonce, secret, secsize,
+ payload, paylsize, ablob, blobsize,
+ fetch_key);