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