code: public int
  getFootprint() {
  	if (footprint >= 0)
  		return footprint;
  
  	int foot = 0;
  
  	DNSOutput out = new DNSOutput();
  	rrToWire(out, null, false);
  	byte [] rdata = out.toByteArray();
  
  	if (alg == DNSSEC.Algorithm.RSAMD5) {
  		int d1 = rdata[rdata.length - 3] & 0xFF;
  		int d2 = rdata[rdata.length - 2] & 0xFF;
  		foot = (d1 << 8) + d2;
  	}
  	else {
  		int i; 
  		for (i = 0; i < rdata.length - 1; i += 2) {
  			int d1 = rdata[i] & 0xFF;
  			int d2 = rdata[i + 1] & 0xFF;
  			foot += ((d1 << 8) + d2);
  		}
  		if (i < rdata.length) {
  			int d1 = rdata[i] & 0xFF;
  			foot += (d1 << 8);
  		}
  		foot += ((foot >> 16) & 0xFFFF);
  	}
  	footprint = (foot & 0xFFFF);
  	return footprint;
  }
docs: Returns the key's footprint (after computing it)