memset(n->needs, 0, sizeof(uint8_t)*ALGO_NEEDS_MAX);
for(i=0; i<num; i++) {
algo = (uint8_t)dnskey_get_algo(dnskey, i);
+ if(!dnskey_algo_id_is_supported(algo))
+ continue;
if(n->needs[algo] == 0) {
n->needs[algo] = 1;
total++;
if(ds_get_digest_algo(ds, i) != fav_ds_algo)
continue;
algo = (uint8_t)ds_get_key_algo(ds, i);
+ if(!dnskey_algo_id_is_supported(algo))
+ continue;
if(n->needs[algo] == 0) {
n->needs[algo] = 1;
total++;
}
algo_needs_init_dnskey(&needs, dnskey);
+ if(algo_needs_num_missing(&needs) == 0) {
+ verbose(VERB_QUERY, "DNSKEY has no known algorithms");
+ *reason = "DNSKEY has no known algorithms";
+ return sec_status_insecure;
+ }
for(i=0; i<num; i++) {
sec = dnskeyset_verify_rrset_sig(env, ve, *env->now, rrset,
dnskey, i, &sortree, reason);
size_t numchecked = 0;
int buf_canon = 0;
verbose(VERB_ALGO, "verify sig %d %d", (int)tag, algo);
+ if(!dnskey_algo_id_is_supported(algo)) {
+ verbose(VERB_QUERY, "verify sig: unknown algorithm");
+ return sec_status_insecure;
+ }
for(i=0; i<num; i++) {
/* see if key matches keytag and algo */