コード例 #1
0
/*%
 * dst_s_dns_key_id() Function to calculate DNSSEC footprint from KEY record
 *   rdata
 * Input:
 *	dns_key_rdata: the raw data in wire format
 *      rdata_len: the size of the input data
 * Output:
 *      the key footprint/id calculated from the key data
 */
u_int16_t
dst_s_dns_key_id(const u_char *dns_key_rdata, const int rdata_len)
{
    if (!dns_key_rdata)
        return 0;

    /* compute id */
    if (dns_key_rdata[3] == KEY_RSA)	/*%< Algorithm RSA */
        return dst_s_get_int16((const u_char *)
                               &dns_key_rdata[rdata_len - 3]);
    else if (dns_key_rdata[3] == KEY_HMAC_MD5)
        /* compatibility */
        return 0;
    else
        /* compute a checksum on the key part of the key rr */
        return dst_s_id_calc(dns_key_rdata, rdata_len);
}
コード例 #2
0
/* 
 * dst_s_dns_key_id() Function to calculated DNSSEC footprint from KEY record
 *   rdata (all of  record)
 * Input:
 *	dns_key_rdata: the raw data in wire format 
 *      rdata_len: the size of the input data 
 * Output:
 *      the key footprint/id calculated from the key data 
 */ 
u_int16_t
dst_s_dns_key_id(const u_char *dns_key_rdata, const unsigned rdata_len)
{
	unsigned key_data = 4;

	if (!dns_key_rdata || (rdata_len < key_data))
		return 0;

	/* check the extended parameters bit in the DNS Key RR flags */
	if (dst_s_get_int16(dns_key_rdata) & DST_EXTEND_FLAG)
		key_data += 2;

	/* compute id */
	if (dns_key_rdata[3] == KEY_RSA)	/* Algorithm RSA */
		return dst_s_get_int16((const u_char *)
				       &dns_key_rdata[rdata_len - 3]);
	else
		/* compute a checksum on the key part of the key rr */
		return dst_s_id_calc(&dns_key_rdata[key_data],
				     (rdata_len - key_data));
}