Home | History | Annotate | Download | only in DNS
      1 // Copyright (c) 1999-2004 Brian Wellington (bwelling (at) xbill.org)
      2 
      3 package org.xbill.DNS;
      4 
      5 import java.io.*;
      6 import java.security.PublicKey;
      7 
      8 /**
      9  * Key - contains a cryptographic public key for use by DNS.
     10  * The data can be converted to objects implementing
     11  * java.security.interfaces.PublicKey
     12  * @see DNSSEC
     13  *
     14  * @author Brian Wellington
     15  */
     16 
     17 public class DNSKEYRecord extends KEYBase {
     18 
     19 public static class Protocol {
     20 	private Protocol() {}
     21 
     22 	/** Key will be used for DNSSEC */
     23 	public static final int DNSSEC = 3;
     24 }
     25 
     26 public static class Flags {
     27 	private Flags() {}
     28 
     29 	/** Key is a zone key */
     30 	public static final int ZONE_KEY = 0x100;
     31 
     32 	/** Key is a secure entry point key */
     33 	public static final int SEP_KEY = 0x1;
     34 
     35 	/** Key has been revoked */
     36 	public static final int REVOKE = 0x80;
     37 }
     38 
     39 private static final long serialVersionUID = -8679800040426675002L;
     40 
     41 DNSKEYRecord() {}
     42 
     43 Record
     44 getObject() {
     45 	return new DNSKEYRecord();
     46 }
     47 
     48 /**
     49  * Creates a DNSKEY Record from the given data
     50  * @param flags Flags describing the key's properties
     51  * @param proto The protocol that the key was created for
     52  * @param alg The key's algorithm
     53  * @param key Binary representation of the key
     54  */
     55 public
     56 DNSKEYRecord(Name name, int dclass, long ttl, int flags, int proto, int alg,
     57 	     byte [] key)
     58 {
     59 	super(name, Type.DNSKEY, dclass, ttl, flags, proto, alg, key);
     60 }
     61 
     62 /**
     63  * Creates a DNSKEY Record from the given data
     64  * @param flags Flags describing the key's properties
     65  * @param proto The protocol that the key was created for
     66  * @param alg The key's algorithm
     67  * @param key The key as a PublicKey
     68  * @throws DNSSEC.DNSSECException The PublicKey could not be converted into DNS
     69  * format.
     70  */
     71 public
     72 DNSKEYRecord(Name name, int dclass, long ttl, int flags, int proto, int alg,
     73 	     PublicKey key) throws DNSSEC.DNSSECException
     74 {
     75 	super(name, Type.DNSKEY, dclass, ttl, flags, proto, alg,
     76 	      DNSSEC.fromPublicKey(key, alg));
     77 	publicKey = key;
     78 }
     79 
     80 void
     81 rdataFromString(Tokenizer st, Name origin) throws IOException {
     82 	flags = st.getUInt16();
     83 	proto = st.getUInt8();
     84 	String algString = st.getString();
     85 	alg = DNSSEC.Algorithm.value(algString);
     86 	if (alg < 0)
     87 		throw st.exception("Invalid algorithm: " + algString);
     88 	key = st.getBase64();
     89 }
     90 
     91 }
     92