// Copyright (c) 2002-2004 Brian Wellington (bwelling@xbill.org) package io.milton.dns.record; import io.milton.dns.Name; import io.milton.dns.utils.base16; import java.io.*; /** * DLV - contains a Delegation Lookaside Validation record, which acts * as the equivalent of a DS record in a lookaside zone. * @see DNSSEC * @see DSRecord * * @author David Blacka * @author Brian Wellington */ public class DLVRecord extends Record { public static final int SHA1_DIGEST_ID = DSRecord.Digest.SHA1; public static final int SHA256_DIGEST_ID = DSRecord.Digest.SHA1; private static final long serialVersionUID = 1960742375677534148L; private int footprint; private int alg; private int digestid; private byte [] digest; DLVRecord() {} Record getObject() { return new DLVRecord(); } /** * Creates a DLV Record from the given data * @param footprint The original KEY record's footprint (keyid). * @param alg The original key algorithm. * @param digestid The digest id code. * @param digest A hash of the original key. */ public DLVRecord(Name name, int dclass, long ttl, int footprint, int alg, int digestid, byte [] digest) { super(name, Type.DLV, dclass, ttl); this.footprint = checkU16("footprint", footprint); this.alg = checkU8("alg", alg); this.digestid = checkU8("digestid", digestid); this.digest = digest; } void rrFromWire(DNSInput in) throws IOException { footprint = in.readU16(); alg = in.readU8(); digestid = in.readU8(); digest = in.readByteArray(); } void rdataFromString(Tokenizer st, Name origin) throws IOException { footprint = st.getUInt16(); alg = st.getUInt8(); digestid = st.getUInt8(); digest = st.getHex(); } /** * Converts rdata to a String */ String rrToString() { StringBuilder sb = new StringBuilder(); sb.append(footprint); sb.append(" "); sb.append(alg); sb.append(" "); sb.append(digestid); if (digest != null) { sb.append(" "); sb.append(base16.toString(digest)); } return sb.toString(); } /** * Returns the key's algorithm. */ public int getAlgorithm() { return alg; } /** * Returns the key's Digest ID. */ public int getDigestID() { return digestid; } /** * Returns the binary hash of the key. */ public byte [] getDigest() { return digest; } /** * Returns the key's footprint. */ public int getFootprint() { return footprint; } void rrToWire(DNSOutput out, Compression c, boolean canonical) { out.writeU16(footprint); out.writeU8(alg); out.writeU8(digestid); if (digest != null) out.writeByteArray(digest); } }