1 // Copyright (c) 2002-2004 Brian Wellington (bwelling (at) xbill.org) 2 3 package org.xbill.DNS; 4 5 import java.io.*; 6 import org.xbill.DNS.utils.*; 7 8 /** 9 * DLV - contains a Delegation Lookaside Validation record, which acts 10 * as the equivalent of a DS record in a lookaside zone. 11 * @see DNSSEC 12 * @see DSRecord 13 * 14 * @author David Blacka 15 * @author Brian Wellington 16 */ 17 18 public class DLVRecord extends Record { 19 20 public static final int SHA1_DIGEST_ID = DSRecord.Digest.SHA1; 21 public static final int SHA256_DIGEST_ID = DSRecord.Digest.SHA1; 22 23 private static final long serialVersionUID = 1960742375677534148L; 24 25 private int footprint; 26 private int alg; 27 private int digestid; 28 private byte [] digest; 29 30 DLVRecord() {} 31 32 Record 33 getObject() { 34 return new DLVRecord(); 35 } 36 37 /** 38 * Creates a DLV Record from the given data 39 * @param footprint The original KEY record's footprint (keyid). 40 * @param alg The original key algorithm. 41 * @param digestid The digest id code. 42 * @param digest A hash of the original key. 43 */ 44 public 45 DLVRecord(Name name, int dclass, long ttl, int footprint, int alg, 46 int digestid, byte [] digest) 47 { 48 super(name, Type.DLV, dclass, ttl); 49 this.footprint = checkU16("footprint", footprint); 50 this.alg = checkU8("alg", alg); 51 this.digestid = checkU8("digestid", digestid); 52 this.digest = digest; 53 } 54 55 void 56 rrFromWire(DNSInput in) throws IOException { 57 footprint = in.readU16(); 58 alg = in.readU8(); 59 digestid = in.readU8(); 60 digest = in.readByteArray(); 61 } 62 63 void 64 rdataFromString(Tokenizer st, Name origin) throws IOException { 65 footprint = st.getUInt16(); 66 alg = st.getUInt8(); 67 digestid = st.getUInt8(); 68 digest = st.getHex(); 69 } 70 71 /** 72 * Converts rdata to a String 73 */ 74 String 75 rrToString() { 76 StringBuffer sb = new StringBuffer(); 77 sb.append(footprint); 78 sb.append(" "); 79 sb.append(alg); 80 sb.append(" "); 81 sb.append(digestid); 82 if (digest != null) { 83 sb.append(" "); 84 sb.append(base16.toString(digest)); 85 } 86 87 return sb.toString(); 88 } 89 90 /** 91 * Returns the key's algorithm. 92 */ 93 public int 94 getAlgorithm() { 95 return alg; 96 } 97 98 /** 99 * Returns the key's Digest ID. 100 */ 101 public int 102 getDigestID() 103 { 104 return digestid; 105 } 106 107 /** 108 * Returns the binary hash of the key. 109 */ 110 public byte [] 111 getDigest() { 112 return digest; 113 } 114 115 /** 116 * Returns the key's footprint. 117 */ 118 public int 119 getFootprint() { 120 return footprint; 121 } 122 123 void 124 rrToWire(DNSOutput out, Compression c, boolean canonical) { 125 out.writeU16(footprint); 126 out.writeU8(alg); 127 out.writeU8(digestid); 128 if (digest != null) 129 out.writeByteArray(digest); 130 } 131 132 } 133