Lines Matching +full:0 +full:x5c

28 	return (0);  in usleep()
43 if (usleep(ms * 1000) < 0) { in delay_ms()
51 return (0); in delay_ms()
59 fido_buf_read(buf, len, sig->ptr, sig->len) < 0) { in sig_get()
65 return (0); in sig_get()
69 x5c_get(fido_blob_t *x5c, const unsigned char **buf, size_t *len) in x5c_get() argument
82 (x5c->len = (size_t)(end - *buf)) >= *len) { in x5c_get()
88 if ((x5c->ptr = calloc(1, x5c->len)) == NULL || in x5c_get()
89 fido_buf_read(buf, len, x5c->ptr, x5c->len) < 0) { in x5c_get()
94 ok = 0; in x5c_get()
99 if (ok < 0) in x5c_get()
100 fido_blob_reset(x5c); in x5c_get()
113 memset(&ad, 0, sizeof(ad)); in authdata_fake()
132 &alloc_len)) == 0) { in authdata_fake()
140 return (0); in authdata_fake()
154 memset(&challenge, 0xff, sizeof(challenge)); in send_dummy_register()
155 memset(&application, 0xff, sizeof(application)); in send_dummy_register()
157 if ((apdu = iso7816_new(0, U2F_CMD_REGISTER, 0, 2 * in send_dummy_register()
159 iso7816_add(apdu, &challenge, sizeof(challenge)) < 0 || in send_dummy_register()
160 iso7816_add(apdu, &application, sizeof(application)) < 0) { in send_dummy_register()
174 iso7816_len(apdu), ms) < 0) { in send_dummy_register()
184 if (delay_ms(U2F_PACE_MS, ms) != 0) { in send_dummy_register()
189 } while (((reply[0] << 8) | reply[1]) == SW_CONDITIONS_NOT_SATISFIED); in send_dummy_register()
217 memset(&challenge, 0xff, sizeof(challenge)); in key_lookup()
218 memset(&rp_id_hash, 0, sizeof(rp_id_hash)); in key_lookup()
229 if ((apdu = iso7816_new(0, U2F_CMD_AUTH, U2F_AUTH_CHECK, (uint16_t)(2 * in key_lookup()
231 iso7816_add(apdu, &challenge, sizeof(challenge)) < 0 || in key_lookup()
232 iso7816_add(apdu, &rp_id_hash, sizeof(rp_id_hash)) < 0 || in key_lookup()
233 iso7816_add(apdu, &key_id_len, sizeof(key_id_len)) < 0 || in key_lookup()
234 iso7816_add(apdu, key_id->ptr, key_id_len) < 0) { in key_lookup()
247 iso7816_len(apdu), ms) < 0) { in key_lookup()
258 switch ((reply[0] << 8) | reply[1]) { in key_lookup()
263 *found = 0; /* key does not exist */ in key_lookup()
293 if (fido_buf_read(&reply, &len, &flags, sizeof(flags)) < 0 || in parse_auth_reply()
294 fido_buf_read(&reply, &len, &sigcount, sizeof(sigcount)) < 0) { in parse_auth_reply()
299 if (sig_get(sig, &reply, &len) < 0) { in parse_auth_reply()
304 if (authdata_fake(rp_id, flags, sigcount, ad) < 0) { in parse_auth_reply()
324 *ms = 0; /* XXX */ in do_auth()
333 memset(&rp_id_hash, 0, sizeof(rp_id_hash)); in do_auth()
344 if ((apdu = iso7816_new(0, U2F_CMD_AUTH, U2F_AUTH_SIGN, (uint16_t)(2 * in do_auth()
346 iso7816_add(apdu, cdh->ptr, cdh->len) < 0 || in do_auth()
347 iso7816_add(apdu, &rp_id_hash, sizeof(rp_id_hash)) < 0 || in do_auth()
348 iso7816_add(apdu, &key_id_len, sizeof(key_id_len)) < 0 || in do_auth()
349 iso7816_add(apdu, key_id->ptr, key_id_len) < 0) { in do_auth()
363 iso7816_len(apdu), ms) < 0) { in do_auth()
374 if (delay_ms(U2F_PACE_MS, ms) != 0) { in do_auth()
379 } while (((reply[0] << 8) | reply[1]) == SW_CONDITIONS_NOT_SATISFIED); in do_auth()
404 if (ec_point_len != 65 || ec_point[0] != 0x04) { in cbor_blob_from_ec_point()
410 es256_pk_set_x(pk, &ec_point[1]) < 0 || in cbor_blob_from_ec_point()
411 es256_pk_set_y(pk, &ec_point[33]) < 0) { in cbor_blob_from_ec_point()
416 if ((pk_cbor = es256_pk_encode(pk, 0)) == NULL) { in cbor_blob_from_ec_point()
427 ok = 0; in cbor_blob_from_ec_point()
438 encode_cred_attstmt(int cose_alg, const fido_blob_t *x5c, in encode_cred_attstmt() argument
448 memset(&kv, 0, sizeof(kv)); in encode_cred_attstmt()
449 memset(out, 0, sizeof(*out)); in encode_cred_attstmt()
456 if ((kv[0].key = cbor_build_string("alg")) == NULL || in encode_cred_attstmt()
457 (kv[0].value = cbor_build_negint8(alg_cbor)) == NULL || in encode_cred_attstmt()
458 !cbor_map_add(item, kv[0])) { in encode_cred_attstmt()
470 if ((kv[2].key = cbor_build_string("x5c")) == NULL || in encode_cred_attstmt()
472 (x5c_cbor = fido_blob_encode(x5c)) == NULL || in encode_cred_attstmt()
475 fido_log_debug("%s: x5c", __func__); in encode_cred_attstmt()
480 &alloc_len)) == 0) { in encode_cred_attstmt()
485 ok = 0; in encode_cred_attstmt()
492 for (size_t i = 0; i < nitems(kv); i++) { in encode_cred_attstmt()
516 memset(&pk_blob, 0, sizeof(pk_blob)); in encode_cred_authdata()
517 memset(&authdata, 0, sizeof(authdata)); in encode_cred_authdata()
518 memset(&authdata_blob, 0, sizeof(authdata_blob)); in encode_cred_authdata()
519 memset(out, 0, sizeof(*out)); in encode_cred_authdata()
526 if (cbor_blob_from_ec_point(pubkey, pubkey_len, &pk_blob) < 0) { in encode_cred_authdata()
538 authdata.sigcount = 0; in encode_cred_authdata()
540 memset(&attcred_raw.aaguid, 0, sizeof(attcred_raw.aaguid)); in encode_cred_authdata()
552 if (fido_buf_write(&ptr, &len, &authdata, sizeof(authdata)) < 0 || in encode_cred_authdata()
553 fido_buf_write(&ptr, &len, &attcred_raw, sizeof(attcred_raw)) < 0 || in encode_cred_authdata()
554 fido_buf_write(&ptr, &len, kh, kh_len) < 0 || in encode_cred_authdata()
555 fido_buf_write(&ptr, &len, pk_blob.ptr, pk_blob.len) < 0) { in encode_cred_authdata()
566 &alloc_len)) == 0) { in encode_cred_authdata()
571 ok = 0; in encode_cred_authdata()
585 fido_blob_t x5c; in parse_register_reply() local
591 uint8_t kh_len = 0; in parse_register_reply()
595 memset(&x5c, 0, sizeof(x5c)); in parse_register_reply()
596 memset(&sig, 0, sizeof(sig)); in parse_register_reply()
597 memset(&ad, 0, sizeof(ad)); in parse_register_reply()
598 memset(&stmt, 0, sizeof(stmt)); in parse_register_reply()
610 if (fido_buf_read(&reply, &len, &dummy, sizeof(dummy)) < 0 || in parse_register_reply()
611 dummy != 0x05) { in parse_register_reply()
617 if (fido_buf_read(&reply, &len, &pubkey, sizeof(pubkey)) < 0 || in parse_register_reply()
618 fido_buf_read(&reply, &len, &kh_len, sizeof(kh_len)) < 0 || in parse_register_reply()
620 fido_buf_read(&reply, &len, kh, kh_len) < 0) { in parse_register_reply()
625 /* x5c + sig */ in parse_register_reply()
626 if (x5c_get(&x5c, &reply, &len) < 0 || in parse_register_reply()
627 sig_get(&sig, &reply, &len) < 0) { in parse_register_reply()
628 fido_log_debug("%s: x5c || sig", __func__); in parse_register_reply()
633 if (encode_cred_attstmt(COSE_ES256, &x5c, &sig, &stmt) < 0) { in parse_register_reply()
640 sizeof(pubkey), &ad) < 0) { in parse_register_reply()
656 fido_blob_reset(&x5c); in parse_register_reply()
687 for (size_t i = 0; i < cred->excl.len; i++) { in u2f_register()
703 memset(&rp_id_hash, 0, sizeof(rp_id_hash)); in u2f_register()
711 if ((apdu = iso7816_new(0, U2F_CMD_REGISTER, 0, 2 * in u2f_register()
713 iso7816_add(apdu, cred->cdh.ptr, cred->cdh.len) < 0 || in u2f_register()
714 iso7816_add(apdu, rp_id_hash, sizeof(rp_id_hash)) < 0) { in u2f_register()
728 iso7816_len(apdu), ms) < 0) { in u2f_register()
739 if (delay_ms(U2F_PACE_MS, ms) != 0) { in u2f_register()
744 } while (((reply[0] << 8) | reply[1]) == SW_CONDITIONS_NOT_SATISFIED); in u2f_register()
767 memset(&sig, 0, sizeof(sig)); in u2f_authenticate_single()
768 memset(&ad, 0, sizeof(ad)); in u2f_authenticate_single()
781 if (fido_blob_set(&fa->stmt[idx].id, key_id->ptr, key_id->len) < 0) { in u2f_authenticate_single()
817 size_t nfound = 0; in u2f_authenticate()
818 size_t nauth_ok = 0; in u2f_authenticate()
832 for (size_t i = 0; i < fa->allow_list.len; i++) { in u2f_authenticate()
853 if (nfound == 0) in u2f_authenticate()
855 if (nauth_ok == 0) in u2f_authenticate()
872 memset(&clientdata_hash, 0, sizeof(clientdata_hash)); in u2f_get_touch_begin()
873 memset(&rp_id_hash, 0, sizeof(rp_id_hash)); in u2f_get_touch_begin()
882 if ((apdu = iso7816_new(0, U2F_CMD_REGISTER, 0, 2 * in u2f_get_touch_begin()
884 iso7816_add(apdu, clientdata_hash, sizeof(clientdata_hash)) < 0 || in u2f_get_touch_begin()
885 iso7816_add(apdu, rp_id_hash, sizeof(rp_id_hash)) < 0) { in u2f_get_touch_begin()
898 fido_tx(dev, CTAP_CMD_WINK, NULL, 0, ms); in u2f_get_touch_begin()
903 iso7816_len(apdu), ms) < 0) { in u2f_get_touch_begin()
943 *touched = 0; in u2f_get_touch_status()