1 /*
2 * Copyright �, Aegeus Technology Limited. All rights reserved.
3 */
4 package jsdsi.certstore.jdbc;
5
6 import java.security.KeyPair;
7 import java.util.Collection;
8
9 import org.apache.commons.dbcp.BasicDataSource;
10
11 import jsdsi.Auth;
12 import jsdsi.AuthCert;
13 import jsdsi.AuthCertSelector;
14 import jsdsi.Certificate;
15 import jsdsi.CompatibleCertSelector;
16 import jsdsi.IssuerCertSelector;
17 import jsdsi.Name;
18 import jsdsi.NameCert;
19 import jsdsi.NameCertSelector;
20 import jsdsi.Principal;
21 import jsdsi.Provider;
22 import jsdsi.Signature;
23 import jsdsi.StringTag;
24 import jsdsi.Subject;
25 import jsdsi.SubjectCertSelector;
26 import jsdsi.Tag;
27 import jsdsi.Validity;
28 import jsdsi.util.DateUtil;
29 import jsdsi.util.DigestAlgoEnum;
30 import jsdsi.util.KeyEnum;
31 import jsdsi.util.KeyPairFactory;
32 import junit.framework.TestCase;
33
34 /***
35 * @author Sean Radford
36 * @version $Revision: 1.1.4.3 $ $Date: 2004/12/12 17:01:39 $
37 */
38 public class JdbcCertificateDAOTest extends TestCase {
39
40 static {
41 Provider.install();
42 }
43
44 private JdbcCertificateDAO dao;
45
46 /***
47 * @see TestCase#setUp()
48 */
49 protected void setUp() throws Exception {
50 super.setUp();
51 BasicDataSource ds = new BasicDataSource();
52 ds.setDriverClassName("org.hsqldb.jdbcDriver");
53 ds.setUrl("jdbc:hsqldb:/tmp/jsdsi-testdb");
54 ds.setUsername("sa");
55 //ds.setPassword("");
56 this.dao = new JdbcCertificateDAO(ds);
57 }
58
59 /***
60 * @see TestCase#tearDown()
61 */
62 protected void tearDown() throws Exception {
63 super.tearDown();
64 }
65
66 public void testStoreAuthCert() throws Exception {
67 KeyPair kp1 = KeyPairFactory.create(KeyEnum.RSA, 512);
68
69 Certificate certificate = createAuthCertificate(kp1,
70 (Principal) kp1.getPublic(),
71 new StringTag("test"));
72
73 this.dao.store(certificate);
74
75 Collection col = this.dao.retrieve(new IssuerCertSelector((Principal) kp1.getPublic()));
76 assertNotNull(col);
77 assertEquals(col.size(), 1);
78 Certificate out = (Certificate) col.iterator().next();
79 assertEquals(certificate, out);
80 }
81
82 public void testStoreNameCert() throws Exception {
83 KeyPair kp1 = KeyPairFactory.create(KeyEnum.RSA, 512);
84 KeyPair kp2 = KeyPairFactory.create(KeyEnum.RSA, 512);
85
86 Certificate certificate = createNameCertificate(kp1,
87 (Principal) kp1.getPublic(), "alice");
88 this.dao.store(certificate);
89
90 Collection col = this.dao.retrieve(new IssuerCertSelector((Principal) kp1.getPublic()));
91 assertNotNull(col);
92 assertEquals(col.size(), 1);
93 Certificate out = (Certificate) col.iterator().next();
94 assertEquals(certificate, out);
95
96 col = this.dao.retrieve(new NameCertSelector((Principal) kp1.getPublic(),
97 "alice"));
98 assertNotNull(col);
99 assertEquals(col.size(), 1);
100 out = (Certificate) col.iterator().next();
101 assertEquals(certificate, out);
102 }
103
104 public void testAuthCertSelector() throws Exception {
105 KeyPair kp1 = KeyPairFactory.create(KeyEnum.RSA, 512);
106 KeyPair kp2 = KeyPairFactory.create(KeyEnum.RSA, 512);
107
108 Certificate certificate1 = createAuthCertificate(kp1,
109 (Principal) kp2.getPublic(),
110 new StringTag("test1"));
111 this.dao.store(certificate1);
112 Certificate certificate2 = createAuthCertificate(kp1,
113 (Principal) kp2.getPublic(),
114 new StringTag("test2"));
115 this.dao.store(certificate2);
116 Certificate certificate3 = createAuthCertificate(kp2,
117 (Principal) kp1.getPublic(),
118 new StringTag("test3"));
119 this.dao.store(certificate3);
120
121 Collection col = this.dao.retrieve(new AuthCertSelector((Principal) kp1.getPublic()));
122 assertEquals(2, col.size());
123 assertTrue("1.Certificate1", col.contains(certificate1));
124 assertTrue("1.Certificate2", col.contains(certificate2));
125
126 col = this.dao.retrieve(new AuthCertSelector((Principal) kp2.getPublic()));
127 assertEquals(1, col.size());
128 assertTrue("2.Certificate3", col.contains(certificate3));
129
130 col = this.dao.retrieve(new AuthCertSelector((Principal) kp1.getPublic(),
131 new Auth(
132 new StringTag("test1"), false)));
133 assertEquals(1, col.size());
134 assertTrue("3.Certificate1", col.contains(certificate1));
135 }
136
137 public void testNameCertSelector() throws Exception {
138 KeyPair kp1 = KeyPairFactory.create(KeyEnum.RSA, 512);
139 KeyPair kp2 = KeyPairFactory.create(KeyEnum.RSA, 512);
140 KeyPair kp3 = KeyPairFactory.create(KeyEnum.RSA, 512);
141 KeyPair kp4 = KeyPairFactory.create(KeyEnum.RSA, 512);
142
143 Certificate certificate1 = createNameCertificate(kp1,
144 (Principal) kp2.getPublic(), "alice");
145 this.dao.store(certificate1);
146 Certificate certificate2 = createNameCertificate(kp1,
147 (Principal) kp3.getPublic(), "bob");
148 this.dao.store(certificate2);
149 Certificate certificate3 = createNameCertificate(kp1,
150 (Principal) kp4.getPublic(), "carol");
151 this.dao.store(certificate3);
152 Certificate certificate4 = createNameCertificate(kp1,
153 (Principal) kp2.getPublic(), "friend");
154 this.dao.store(certificate4);
155 Certificate certificate5 = createNameCertificate(kp1,
156 (Principal) kp3.getPublic(), "friend");
157 this.dao.store(certificate5);
158
159 Collection col = this.dao.retrieve(new NameCertSelector((Principal) kp1.getPublic(),
160 "alice"));
161 assertEquals(1, col.size());
162 assertTrue("1.Certificate1", col.contains(certificate1));
163
164 col = this.dao.retrieve(new NameCertSelector((Principal) kp1.getPublic(),
165 "bob"));
166 assertEquals(1, col.size());
167 assertTrue("2.Certificate2", col.contains(certificate2));
168
169 col = this.dao.retrieve(new NameCertSelector((Principal) kp1.getPublic(),
170 "carol"));
171 assertEquals(1, col.size());
172 assertTrue("3.Certificate3", col.contains(certificate3));
173
174 col = this.dao.retrieve(new NameCertSelector((Principal) kp1.getPublic(),
175 "friend"));
176 assertEquals(2, col.size());
177 assertTrue("4.Certificate4", col.contains(certificate4));
178 assertTrue("4.Certificate5", col.contains(certificate5));
179 }
180
181 public void testCompatibleCertSelector() throws Exception {
182 KeyPair kp1 = KeyPairFactory.create(KeyEnum.RSA, 512);
183 KeyPair kp2 = KeyPairFactory.create(KeyEnum.RSA, 512);
184
185 Certificate certificate1 = createNameCertificate(kp1,
186 (Principal) kp2.getPublic(), "bob");
187 this.dao.store(certificate1);
188 Certificate certificate2 = createAuthCertificate(kp1,
189 (Principal) kp2.getPublic(),
190 new StringTag("test1"));
191 this.dao.store(certificate2);
192
193 Name name3 = new Name((Principal) kp1.getPublic(), "friend");
194 Certificate certificate3 = createNameCertificate(kp1, name3, "a");
195 this.dao.store(certificate3);
196 Name name4 = new Name((Principal) kp1.getPublic(), "family");
197 Certificate certificate4 = createNameCertificate(kp1, name4, "b");
198 this.dao.store(certificate4);
199 Name name5 = new Name((Principal) kp1.getPublic(),
200 new String[] {"friend","pet"});
201 Certificate certificate5 = createAuthCertificate(kp1,
202 name5,
203 new StringTag("test1"));
204 this.dao.store(certificate5);
205 Name name6 = new Name((Principal) kp2.getPublic(), "friend");
206 Certificate certificate6 = createAuthCertificate(kp1,
207 name6,
208 new StringTag("test1"));
209 this.dao.store(certificate6);
210
211 Collection col = this.dao.retrieve(new CompatibleCertSelector((Principal) kp1.getPublic(),
212 "friend"));
213 assertEquals(2, col.size());
214 assertTrue("1.Certificate3", col.contains(certificate3));
215 assertTrue("1.Certificate5", col.contains(certificate5));
216
217 }
218
219 public void testIssuerCertSelector() throws Exception {
220 KeyPair kp1 = KeyPairFactory.create(KeyEnum.RSA, 512);
221 KeyPair kp2 = KeyPairFactory.create(KeyEnum.RSA, 512);
222
223 Certificate certificate1 = createNameCertificate(kp1,
224 (Principal) kp2.getPublic(), "bob");
225 this.dao.store(certificate1);
226 Certificate certificate2 = createAuthCertificate(kp1,
227 (Principal) kp2.getPublic(),
228 new StringTag("test1"));
229 this.dao.store(certificate2);
230
231 Certificate certificate3 = createNameCertificate(kp2,
232 (Principal) kp1.getPublic(), "alice");
233 this.dao.store(certificate3);
234 Certificate certificate4 = createAuthCertificate(kp2,
235 (Principal) kp1.getPublic(),
236 new StringTag("test2"));
237 this.dao.store(certificate4);
238
239 Collection col = this.dao.retrieve(new IssuerCertSelector((Principal) kp1.getPublic()));
240 assertEquals(2, col.size());
241 assertTrue("1.Certificate1", col.contains(certificate1));
242 assertTrue("1.Certificate2", col.contains(certificate2));
243
244 col = this.dao.retrieve(new IssuerCertSelector((Principal) kp2.getPublic()));
245 assertEquals(2, col.size());
246 assertTrue("2.Certificate3", col.contains(certificate3));
247 assertTrue("2.Certificate4", col.contains(certificate4));
248 }
249
250 public void testSubjectCertSelector() throws Exception {
251 KeyPair kp1 = KeyPairFactory.create(KeyEnum.RSA, 512);
252 KeyPair kp2 = KeyPairFactory.create(KeyEnum.RSA, 512);
253
254 Certificate certificate1 = createNameCertificate(kp1,
255 (Principal) kp2.getPublic(), "bob");
256 this.dao.store(certificate1);
257 Certificate certificate2 = createAuthCertificate(kp1,
258 (Principal) kp2.getPublic(),
259 new StringTag("test"));
260 this.dao.store(certificate2);
261 Name name = new Name((Principal) kp2.getPublic(), "friend");
262 Certificate certificate3 = createAuthCertificate(kp1,
263 name,
264 new StringTag("test"));
265 this.dao.store(certificate3);
266
267 Collection col = this.dao.retrieve(new SubjectCertSelector((Principal) kp2.getPublic()));
268 assertEquals(2, col.size());
269 assertTrue("1.Certificate1", col.contains(certificate1));
270 assertTrue("1.Certificate2", col.contains(certificate2));
271
272 col = this.dao.retrieve(new SubjectCertSelector(name));
273 assertEquals(1, col.size());
274 assertTrue("2.Certificate3", col.contains(certificate3));
275 }
276
277 private Certificate createAuthCertificate(KeyPair kp,
278 Subject subject, Tag tag)
279 throws Exception {
280 Principal issuer = (Principal) kp.getPublic();
281 Validity validity = new Validity(DateUtil.newDate(),
282 DateUtil.newDate(0, 0, 1));
283 String display = "plain/text";
284 String comment = "a test certificate";
285 boolean propagate = false;
286 AuthCert c = new AuthCert(issuer,
287 subject,
288 validity, display, comment, tag, propagate);
289 Signature s = Signature.create(kp, c, DigestAlgoEnum.MD5);
290 Certificate certificate = new Certificate(c, s);
291 return certificate;
292 }
293
294 private Certificate createNameCertificate(KeyPair kp,
295 Subject subject, String name)
296 throws Exception {
297 Principal issuer = (Principal) kp.getPublic();
298 Validity validity = new Validity(DateUtil.newDate(),
299 DateUtil.newDate(0, 0, 1));
300 String display = "plain/text";
301 String comment = "a test certificate";
302 boolean propagate = false;
303 NameCert c = new NameCert(issuer,
304 subject, validity, display, comment, name);
305 Signature s = Signature.create(kp, c, DigestAlgoEnum.MD5);
306 Certificate certificate = new Certificate(c, s);
307 return certificate;
308 }
309
310 }
This page was automatically generated by Maven