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