1 // Copyright (c) 2004 Brian Wellington (bwelling (at) 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 { 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 { 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 35 SSHFPRecord() {} 36 37 Record 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 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 59 rrFromWire(DNSInput in) throws IOException { 60 alg = in.readU8(); 61 digestType = in.readU8(); 62 fingerprint = in.readByteArray(); 63 } 64 65 void 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 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 85 getAlgorithm() { 86 return alg; 87 } 88 89 /** Returns the public key's digest type. */ 90 public int 91 getDigestType() { 92 return digestType; 93 } 94 95 /** Returns the fingerprint */ 96 public byte [] 97 getFingerPrint() { 98 return fingerprint; 99 } 100 101 void 102 rrToWire(DNSOutput out, Compression c, boolean canonical) { 103 out.writeU8(alg); 104 out.writeU8(digestType); 105 out.writeByteArray(fingerprint); 106 } 107 108 } 109