aboutsummaryrefslogtreecommitdiff
path: root/src/org/xbill/DNS/DSRecord.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/xbill/DNS/DSRecord.java')
-rw-r--r--src/org/xbill/DNS/DSRecord.java157
1 files changed, 157 insertions, 0 deletions
diff --git a/src/org/xbill/DNS/DSRecord.java b/src/org/xbill/DNS/DSRecord.java
new file mode 100644
index 0000000..4c1ebce
--- /dev/null
+++ b/src/org/xbill/DNS/DSRecord.java
@@ -0,0 +1,157 @@
+// Copyright (c) 2002-2004 Brian Wellington (bwelling@xbill.org)
+
+package org.xbill.DNS;
+
+import java.io.*;
+import org.xbill.DNS.utils.*;
+
+/**
+ * DS - contains a Delegation Signer record, which acts as a
+ * placeholder for KEY records in the parent zone.
+ * @see DNSSEC
+ *
+ * @author David Blacka
+ * @author Brian Wellington
+ */
+
+public class DSRecord extends Record {
+
+public static class Digest {
+ private Digest() {}
+
+ /** SHA-1 */
+ public static final int SHA1 = 1;
+
+ /** SHA-256 */
+ public static final int SHA256 = 2;
+
+ /** SHA-384 */
+ public static final int SHA384 = 4;
+}
+
+public static final int SHA1_DIGEST_ID = Digest.SHA1;
+public static final int SHA256_DIGEST_ID = Digest.SHA256;
+public static final int SHA384_DIGEST_ID = Digest.SHA384;
+
+private static final long serialVersionUID = -9001819329700081493L;
+
+private int footprint;
+private int alg;
+private int digestid;
+private byte [] digest;
+
+DSRecord() {}
+
+Record
+getObject() {
+ return new DSRecord();
+}
+
+/**
+ * Creates a DS 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
+DSRecord(Name name, int dclass, long ttl, int footprint, int alg,
+ int digestid, byte [] digest)
+{
+ super(name, Type.DS, dclass, ttl);
+ this.footprint = checkU16("footprint", footprint);
+ this.alg = checkU8("alg", alg);
+ this.digestid = checkU8("digestid", digestid);
+ this.digest = digest;
+}
+
+/**
+ * Creates a DS Record from the given data
+ * @param digestid The digest id code.
+ * @param key The key to digest
+ */
+public
+DSRecord(Name name, int dclass, long ttl, int digestid, DNSKEYRecord key)
+{
+ this(name, dclass, ttl, key.getFootprint(), key.getAlgorithm(),
+ digestid, DNSSEC.generateDSDigest(key, digestid));
+}
+
+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);
+}
+
+}