#!/usr/bin/perl -w # how to derive the key id for a given dnssec dnskey use strict; use warnings; use MIME::Base64; sub dnskey2id ($$$$) { my ($flags, $protocol, $algorithm, $key) = @_; my $data = pack("nCC", $flags, $protocol, $algorithm); $data .= decode_base64($key); my $id = 0; map { $id += $_ } unpack("n*", $data); $id += ($id >> 16) & 0xffff; return ($id & 0xffff); } # e.g. for a RSASHA256 based ZSK print dnskey2id("256", "3", "8", 'AwEAA...'), "\n";