1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43: import ;
44:
45: import ;
46: import ;
47:
48: import ;
49: import ;
50: import ;
51: import ;
52:
53: import ;
54: import ;
55: import ;
56:
57:
69: public class Certificate implements Handshake.Body
70: {
71:
72:
73:
74:
75: protected ByteBuffer buffer;
76: protected final CertificateType type;
77:
78:
79:
80:
81: public Certificate (final ByteBuffer buffer, final CertificateType type)
82: {
83: buffer.getClass ();
84: type.getClass ();
85: this.buffer = buffer.duplicate().order(ByteOrder.BIG_ENDIAN);
86: this.type = type;
87: }
88:
89:
90:
91:
92: public int length ()
93: {
94: return (((buffer.get (0) & 0xFF) << 24)
95: | buffer.getShort (1)) + 3;
96: }
97:
98: public List<java.security.cert.Certificate> certificates ()
99: throws CertificateException, NoSuchAlgorithmException
100: {
101: LinkedList<java.security.cert.Certificate> list
102: = new LinkedList<java.security.cert.Certificate>();
103: CertificateFactory factory = CertificateFactory.getInstance(type.toString());
104: int length = (((buffer.get(0) & 0xFF) << 16)
105: | (buffer.getShort(1) & 0xFFFF));
106: ByteBuffer b = (ByteBuffer) buffer.duplicate().position(3);
107: for (int i = 3; i < length; )
108: {
109: int length2 = (((b.get () & 0xFF) << 16)
110: | (b.getShort () & 0xFFFF));
111: byte[] buf = new byte[length2];
112: b.position(i+3);
113: b.get (buf);
114: list.add(factory.generateCertificate (new ByteArrayInputStream (buf)));
115: i += length2 + 3;
116: b.position(i);
117: }
118: return list;
119: }
120:
121: public String toString ()
122: {
123: return toString (null);
124: }
125:
126: public String toString (final String prefix)
127: {
128: StringWriter str = new StringWriter();
129: PrintWriter out = new PrintWriter(str);
130: if (prefix != null)
131: out.print (prefix);
132: out.println ("struct {");
133: try
134: {
135: List certs = certificates ();
136: if (prefix != null)
137: out.print (prefix);
138: out.print (" certificateList: [");
139: out.print (certs.size ());
140: out.println ("] {");
141: for (Iterator it = certs.iterator (); it.hasNext (); )
142: {
143: java.security.cert.Certificate cert =
144: (java.security.cert.Certificate) it.next ();
145: if (prefix != null)
146: out.print (prefix);
147: out.print (" ");
148: if (cert instanceof X509Certificate)
149: out.print (((X509Certificate) cert).getSubjectDN ());
150: else
151: out.print (cert);
152: out.println (";");
153: }
154: if (prefix != null)
155: out.print (prefix);
156: out.println (" };");
157: }
158: catch (CertificateException ce)
159: {
160: if (prefix != null)
161: out.print (prefix);
162: out.print (" ");
163: out.print (ce);
164: out.println (";");
165: }
166: catch (NoSuchAlgorithmException nsae)
167: {
168: if (prefix != null)
169: out.print (prefix);
170: out.print (" ");
171: out.print (nsae);
172: out.println (";");
173: }
174: out.print ("} Certificate;");
175: return str.toString();
176: }
177: }