- if (!hsecret) {
- fprintf(stderr, "secret missing, specify -s or -S\n");
- exit(EXIT_FAILURE);
- }
- if (strlen(hsecret) != 40) {
- fprintf(stderr, "secret wrong, must be exactly 40 chars\n");
- exit(EXIT_FAILURE);
- }
- for (i = 0; i < 20; i++)
- if (sscanf(hsecret + i * 2, "%2hhx", &secret[i]) != 1) {
- fprintf(stderr, "secret wrong, must be hexadecimal\n");
- exit(EXIT_FAILURE);
- }
- if (!id) {
- fprintf(stderr, "cannot determine userid\n");
- exit(EXIT_FAILURE);
- }
- rc = make_authobj(id, password, nonce, secret, sizeof(secret),
- (unsigned char *)payload, strlen(payload),
- authobj, &authsize);
- if (rc) {
- fprintf(stderr, "error %d\n", rc);
- exit(EXIT_FAILURE);
- }
- fp = fopen(fn, "w");
- if (!fp) {
- fprintf(stderr, "cannot open \"%s\": %s\n",
- fn, strerror(errno));
- exit(EXIT_FAILURE);
- }
- if (fprintf(fp, "%s:%s:%s:", "", id, nonce) < 0) {
- fprintf(stderr, "cannot write to \"%s\": %s\n",
- fn, strerror(errno));
- exit(EXIT_FAILURE);
- }
- for (i = 0; i < authsize; i++)
- if (fprintf(fp, "%02x", authobj[i]) < 0) {
- fprintf(stderr, "cannot write to \"%s\": %s\n",
- fn, strerror(errno));
- exit(EXIT_FAILURE);
+ if (hsecret) {
+ if (strlen(hsecret) != 40) {
+ fprintf(stderr,
+ "secret wrong, must be exactly 40 chars\n");
+ exit(EXIT_FAILURE);
+ }
+ if (strspn(hsecret, "0123456789abcdefABCDEF") != 40) {
+ fprintf(stderr,
+ "secret wrong, must be hexadecimal string\n");
+ exit(EXIT_FAILURE);
+ }
+ for (i = 0; i < 20; i++)
+ sscanf(hsecret + i * 2, "%2hhx", &bsecret[i]);
+ secret = bsecret;