| // Copyright (c) 2002-2004 Brian Wellington (bwelling@xbill.org) |
| |
| package org.xbill.DNS; |
| |
| import java.io.*; |
| import org.xbill.DNS.utils.*; |
| |
| /** |
| * 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() { |
| StringBuffer sb = new StringBuffer(); |
| 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); |
| } |
| |
| } |