• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2004 Brian Wellington (bwelling@xbill.org)
2 
3 package org.xbill.DNS;
4 
5 import java.io.*;
6 import org.xbill.DNS.utils.*;
7 
8 /**
9  * SSH Fingerprint - stores the fingerprint of an SSH host key.
10  *
11  * @author Brian Wellington
12  */
13 
14 public class SSHFPRecord extends Record {
15 
16 private static final long serialVersionUID = -8104701402654687025L;
17 
18 public static class Algorithm {
Algorithm()19 	private Algorithm() {}
20 
21 	public static final int RSA = 1;
22 	public static final int DSS = 2;
23 }
24 
25 public static class Digest {
Digest()26 	private Digest() {}
27 
28 	public static final int SHA1 = 1;
29 }
30 
31 private int alg;
32 private int digestType;
33 private byte [] fingerprint;
34 
SSHFPRecord()35 SSHFPRecord() {}
36 
37 Record
getObject()38 getObject() {
39 	return new SSHFPRecord();
40 }
41 
42 /**
43  * Creates an SSHFP Record from the given data.
44  * @param alg The public key's algorithm.
45  * @param digestType The public key's digest type.
46  * @param fingerprint The public key's fingerprint.
47  */
48 public
SSHFPRecord(Name name, int dclass, long ttl, int alg, int digestType, byte [] fingerprint)49 SSHFPRecord(Name name, int dclass, long ttl, int alg, int digestType,
50 	    byte [] fingerprint)
51 {
52 	super(name, Type.SSHFP, dclass, ttl);
53 	this.alg = checkU8("alg", alg);
54 	this.digestType = checkU8("digestType", digestType);
55 	this.fingerprint = fingerprint;
56 }
57 
58 void
rrFromWire(DNSInput in)59 rrFromWire(DNSInput in) throws IOException {
60 	alg = in.readU8();
61 	digestType = in.readU8();
62 	fingerprint = in.readByteArray();
63 }
64 
65 void
rdataFromString(Tokenizer st, Name origin)66 rdataFromString(Tokenizer st, Name origin) throws IOException {
67 	alg = st.getUInt8();
68 	digestType = st.getUInt8();
69 	fingerprint = st.getHex(true);
70 }
71 
72 String
rrToString()73 rrToString() {
74 	StringBuffer sb = new StringBuffer();
75 	sb.append(alg);
76 	sb.append(" ");
77 	sb.append(digestType);
78 	sb.append(" ");
79 	sb.append(base16.toString(fingerprint));
80 	return sb.toString();
81 }
82 
83 /** Returns the public key's algorithm. */
84 public int
getAlgorithm()85 getAlgorithm() {
86 	return alg;
87 }
88 
89 /** Returns the public key's digest type. */
90 public int
getDigestType()91 getDigestType() {
92 	return digestType;
93 }
94 
95 /** Returns the fingerprint */
96 public byte []
getFingerPrint()97 getFingerPrint() {
98 	return fingerprint;
99 }
100 
101 void
rrToWire(DNSOutput out, Compression c, boolean canonical)102 rrToWire(DNSOutput out, Compression c, boolean canonical) {
103 	out.writeU8(alg);
104 	out.writeU8(digestType);
105 	out.writeByteArray(fingerprint);
106 }
107 
108 }
109