r509 0.9.2 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +2 -0
  4. data/CONTRIBUTING.mdown +21 -0
  5. data/LICENSE +13 -0
  6. data/README.mdown +548 -0
  7. data/Rakefile +5 -0
  8. data/bin/r509 +16 -17
  9. data/doc/R509.html +42 -26
  10. data/doc/R509/ASN1.html +22 -16
  11. data/doc/R509/ASN1/GeneralName.html +180 -173
  12. data/doc/R509/ASN1/GeneralNames.html +390 -62
  13. data/doc/R509/CRL.html +9 -7
  14. data/doc/R509/CRL/Administrator.html +208 -623
  15. data/doc/R509/CRL/FileReaderWriter.html +856 -0
  16. data/doc/R509/CRL/ReaderWriter.html +524 -0
  17. data/doc/R509/CRL/SignedList.html +29 -42
  18. data/doc/R509/CSR.html +248 -333
  19. data/doc/R509/Cert.html +364 -491
  20. data/doc/R509/Cert/Extensions.html +134 -43
  21. data/doc/R509/Cert/Extensions/AuthorityInfoAccess.html +335 -65
  22. data/doc/R509/Cert/Extensions/AuthorityKeyIdentifier.html +201 -102
  23. data/doc/R509/Cert/Extensions/BasicConstraints.html +297 -68
  24. data/doc/R509/Cert/Extensions/CRLDistributionPoints.html +690 -77
  25. data/doc/R509/Cert/Extensions/CertificatePolicies.html +293 -43
  26. data/doc/R509/Cert/Extensions/ExtendedKeyUsage.html +321 -173
  27. data/doc/R509/Cert/Extensions/GeneralNamesMixin.html +656 -0
  28. data/doc/R509/Cert/Extensions/InhibitAnyPolicy.html +270 -42
  29. data/doc/R509/Cert/Extensions/KeyUsage.html +334 -184
  30. data/doc/R509/Cert/Extensions/NameConstraints.html +363 -93
  31. data/doc/R509/{ASN1 → Cert/Extensions}/NoticeReference.html +209 -48
  32. data/doc/R509/Cert/Extensions/OCSPNoCheck.html +244 -17
  33. data/doc/R509/Cert/Extensions/PolicyConstraints.html +322 -71
  34. data/doc/R509/{ASN1 → Cert/Extensions}/PolicyInformation.html +204 -43
  35. data/doc/R509/{ASN1 → Cert/Extensions}/PolicyQualifiers.html +205 -48
  36. data/doc/R509/Cert/Extensions/SubjectAlternativeName.html +348 -143
  37. data/doc/R509/Cert/Extensions/SubjectKeyIdentifier.html +165 -13
  38. data/doc/R509/{ASN1 → Cert/Extensions}/UserNotice.html +204 -43
  39. data/doc/R509/Cert/Extensions/ValidationMixin.html +120 -0
  40. data/doc/R509/CertificateAuthority.html +9 -7
  41. data/doc/R509/CertificateAuthority/OptionsBuilder.html +475 -0
  42. data/doc/R509/CertificateAuthority/Signer.html +149 -198
  43. data/doc/R509/Config.html +10 -8
  44. data/doc/R509/Config/CAConfig.html +708 -625
  45. data/doc/R509/Config/CAConfigPool.html +179 -31
  46. data/doc/R509/Config/CertProfile.html +1544 -0
  47. data/doc/R509/Config/SubjectItemPolicy.html +437 -99
  48. data/doc/R509/Engine.html +14 -28
  49. data/doc/R509/Helpers.html +1014 -0
  50. data/doc/R509/MessageDigest.html +73 -25
  51. data/doc/R509/NameSanitizer.html +39 -39
  52. data/doc/R509/OCSP.html +5 -5
  53. data/doc/R509/OCSP/Request.html +5 -5
  54. data/doc/R509/OCSP/Request/Nonce.html +5 -5
  55. data/doc/R509/OCSP/Response.html +7 -7
  56. data/doc/R509/OIDMapper.html +121 -6
  57. data/doc/R509/PrivateKey.html +226 -227
  58. data/doc/R509/R509Error.html +5 -5
  59. data/doc/R509/SPKI.html +244 -342
  60. data/doc/R509/Subject.html +241 -70
  61. data/doc/R509/Validity.html +5 -5
  62. data/doc/R509/Validity/Checker.html +5 -5
  63. data/doc/R509/Validity/DefaultChecker.html +5 -9
  64. data/doc/R509/Validity/DefaultWriter.html +5 -9
  65. data/doc/R509/Validity/Status.html +5 -5
  66. data/doc/R509/Validity/Writer.html +5 -5
  67. data/doc/_index.html +92 -30
  68. data/doc/class_list.html +2 -2
  69. data/doc/file.CONTRIBUTING.html +96 -0
  70. data/doc/file.LICENSE.html +87 -0
  71. data/doc/file.README.html +279 -389
  72. data/doc/file.YAML.html +243 -0
  73. data/doc/file.r509.html +298 -105
  74. data/doc/file_list.html +11 -2
  75. data/doc/frames.html +1 -1
  76. data/doc/index.html +279 -389
  77. data/doc/js/full_list.js +6 -1
  78. data/doc/method_list.html +869 -1139
  79. data/doc/top-level-namespace.html +103 -5
  80. data/lib/r509.rb +7 -2
  81. data/lib/r509/asn1.rb +97 -135
  82. data/lib/r509/cert.rb +17 -106
  83. data/lib/r509/cert/extensions.rb +13 -676
  84. data/lib/r509/cert/extensions/authority_info_access.rb +128 -0
  85. data/lib/r509/cert/extensions/authority_key_identifier.rb +100 -0
  86. data/lib/r509/cert/extensions/base.rb +142 -0
  87. data/lib/r509/cert/extensions/basic_constraints.rb +119 -0
  88. data/lib/r509/cert/extensions/certificate_policies.rb +262 -0
  89. data/lib/r509/cert/extensions/crl_distribution_points.rb +98 -0
  90. data/lib/r509/cert/extensions/extended_key_usage.rb +189 -0
  91. data/lib/r509/cert/extensions/inhibit_any_policy.rb +70 -0
  92. data/lib/r509/cert/extensions/key_usage.rb +209 -0
  93. data/lib/r509/cert/extensions/name_constraints.rb +179 -0
  94. data/lib/r509/cert/extensions/ocsp_no_check.rb +56 -0
  95. data/lib/r509/cert/extensions/policy_constraints.rb +122 -0
  96. data/lib/r509/cert/extensions/subject_alternative_name.rb +88 -0
  97. data/lib/r509/cert/extensions/subject_key_identifier.rb +56 -0
  98. data/lib/r509/cert/extensions/validation_mixin.rb +42 -0
  99. data/lib/r509/certificate_authority/options_builder.rb +142 -0
  100. data/lib/r509/certificate_authority/signer.rb +189 -0
  101. data/lib/r509/config.rb +3 -600
  102. data/lib/r509/config/ca_config.rb +414 -0
  103. data/lib/r509/config/cert_profile.rb +110 -0
  104. data/lib/r509/config/subject_item_policy.rb +118 -0
  105. data/lib/r509/crl/administrator.rb +169 -0
  106. data/lib/r509/crl/reader_writer.rb +109 -0
  107. data/lib/r509/crl/signed_list.rb +135 -0
  108. data/lib/r509/csr.rb +35 -116
  109. data/lib/r509/engine.rb +21 -11
  110. data/lib/r509/helpers.rb +110 -0
  111. data/lib/r509/io_helpers.rb +18 -13
  112. data/lib/r509/message_digest.rb +13 -3
  113. data/lib/r509/oid_mapper.rb +14 -0
  114. data/lib/r509/private_key.rb +74 -50
  115. data/lib/r509/spki.rb +50 -113
  116. data/lib/r509/subject.rb +24 -2
  117. data/lib/r509/trollop.rb +788 -0
  118. data/lib/r509/version.rb +1 -1
  119. data/r509.yaml +289 -96
  120. data/spec/asn1_spec.rb +171 -98
  121. data/spec/cert/extensions/authority_info_access_spec.rb +247 -0
  122. data/spec/cert/extensions/authority_key_identifier_spec.rb +85 -0
  123. data/spec/cert/extensions/base_spec.rb +172 -0
  124. data/spec/cert/extensions/basic_constraints_spec.rb +185 -0
  125. data/spec/cert/extensions/certificate_policies_spec.rb +288 -0
  126. data/spec/cert/extensions/crl_distribution_points_spec.rb +149 -0
  127. data/spec/cert/extensions/extended_key_usage_spec.rb +174 -0
  128. data/spec/cert/extensions/inhibit_any_policy_spec.rb +92 -0
  129. data/spec/cert/extensions/key_usage_spec.rb +172 -0
  130. data/spec/cert/extensions/name_constraints_spec.rb +335 -0
  131. data/spec/cert/extensions/ocsp_no_check_spec.rb +76 -0
  132. data/spec/cert/extensions/policy_constraints_spec.rb +155 -0
  133. data/spec/cert/extensions/subject_alternative_name_spec.rb +354 -0
  134. data/spec/cert/extensions/subject_key_identifier_spec.rb +64 -0
  135. data/spec/cert_spec.rb +11 -9
  136. data/spec/certificate_authority/options_builder_spec.rb +307 -0
  137. data/spec/certificate_authority/signer_spec.rb +278 -0
  138. data/spec/config/ca_config_spec.rb +405 -0
  139. data/spec/config/cert_profile_spec.rb +88 -0
  140. data/spec/config/subject_item_policy_spec.rb +81 -0
  141. data/spec/crl/administrator_spec.rb +199 -0
  142. data/spec/crl/reader_writer_spec.rb +97 -0
  143. data/spec/crl/signed_list_spec.rb +84 -0
  144. data/spec/csr_spec.rb +43 -36
  145. data/spec/engine_spec.rb +51 -0
  146. data/spec/fixtures.rb +40 -40
  147. data/spec/fixtures/cert1.pem +1 -1
  148. data/spec/fixtures/config_pool_test_minimal.yaml +11 -15
  149. data/spec/fixtures/config_test.yaml +96 -59
  150. data/spec/fixtures/config_test_dsa.yaml +29 -35
  151. data/spec/fixtures/config_test_ec.yaml +29 -35
  152. data/spec/fixtures/config_test_engine_key.yaml +7 -7
  153. data/spec/fixtures/config_test_engine_no_key_name.yaml +6 -6
  154. data/spec/fixtures/config_test_minimal.yaml +3 -5
  155. data/spec/fixtures/config_test_password.yaml +4 -6
  156. data/spec/fixtures/config_test_various.yaml +147 -137
  157. data/spec/fixtures/crl_list_file.txt +1 -1
  158. data/spec/fixtures/test_ca_crl.cer +20 -0
  159. data/spec/fixtures/test_ca_crl.key +28 -0
  160. data/spec/fixtures/test_ca_crl.p12 +0 -0
  161. data/spec/message_digest_spec.rb +6 -0
  162. data/spec/oid_mapper_spec.rb +11 -0
  163. data/spec/private_key_spec.rb +19 -18
  164. data/spec/spec_helper.rb +10 -6
  165. data/spec/spki_spec.rb +38 -19
  166. data/spec/subject_spec.rb +16 -0
  167. metadata +108 -59
  168. metadata.gz.sig +0 -0
  169. data/README.md +0 -638
  170. data/doc/R509/Config/CAProfile.html +0 -1015
  171. data/doc/R509/IOHelpers.html +0 -564
  172. data/lib/r509/certificate_authority.rb +0 -407
  173. data/lib/r509/crl.rb +0 -351
  174. data/spec/cert/extensions_spec.rb +0 -1095
  175. data/spec/certificate_authority_spec.rb +0 -681
  176. data/spec/config_spec.rb +0 -562
  177. data/spec/crl_spec.rb +0 -226
@@ -6,13 +6,13 @@
6
6
  <title>
7
7
  Class: R509::Config::SubjectItemPolicy
8
8
 
9
- &mdash; Documentation by YARD 0.8.5
9
+ &mdash; Documentation by YARD 0.8.6.1
10
10
 
11
11
  </title>
12
12
 
13
- <link rel="stylesheet" href="../../css/style.css" type="text/css" media="screen" charset="utf-8" />
13
+ <link rel="stylesheet" href="../../css/style.css" type="text/css" charset="utf-8" />
14
14
 
15
- <link rel="stylesheet" href="../../css/common.css" type="text/css" media="screen" charset="utf-8" />
15
+ <link rel="stylesheet" href="../../css/common.css" type="text/css" charset="utf-8" />
16
16
 
17
17
  <script type="text/javascript" charset="utf-8">
18
18
  hasFrames = window.top.frames.main ? true : false;
@@ -94,7 +94,7 @@
94
94
 
95
95
 
96
96
  <dt class="r2 last">Defined in:</dt>
97
- <dd class="r2 last">lib/r509/config.rb</dd>
97
+ <dd class="r2 last">lib/r509/config/subject_item_policy.rb</dd>
98
98
 
99
99
  </dl>
100
100
  <div class="clear"></div>
@@ -102,7 +102,13 @@
102
102
  <h2>Overview</h2><div class="docstring">
103
103
  <div class="discussion">
104
104
 
105
- <p>returns information about the subject item policy for a profile</p>
105
+ <p>The Subject Item Policy allows you to define what subject fields are
106
+ allowed in a certificate. Required means that field <strong>must</strong>
107
+ be supplied, optional means it will be encoded if provided, and match means
108
+ the field must be present and must match the value specified.</p>
109
+
110
+ <p>Using R509::OIDMapper you can create new shortnames that will be usable
111
+ inside this class.</p>
106
112
 
107
113
 
108
114
  </div>
@@ -120,7 +126,7 @@
120
126
  <li class="public ">
121
127
  <span class="summary_signature">
122
128
 
123
- <a href="#optional-instance_method" title="#optional (instance method)">- (Object) <strong>optional</strong> </a>
129
+ <a href="#match-instance_method" title="#match (instance method)">- (Array) <strong>match</strong> </a>
124
130
 
125
131
 
126
132
 
@@ -139,9 +145,7 @@
139
145
 
140
146
 
141
147
 
142
- <span class="summary_desc"><div class='inline'>
143
- <p>Returns the value of attribute optional.</p>
144
- </div></span>
148
+ <span class="summary_desc"><div class='inline'></div></span>
145
149
 
146
150
  </li>
147
151
 
@@ -149,7 +153,7 @@
149
153
  <li class="public ">
150
154
  <span class="summary_signature">
151
155
 
152
- <a href="#required-instance_method" title="#required (instance method)">- (Object) <strong>required</strong> </a>
156
+ <a href="#match_values-instance_method" title="#match_values (instance method)">- (Array) <strong>match_values</strong> </a>
153
157
 
154
158
 
155
159
 
@@ -168,9 +172,61 @@
168
172
 
169
173
 
170
174
 
171
- <span class="summary_desc"><div class='inline'>
172
- <p>Returns the value of attribute required.</p>
173
- </div></span>
175
+ <span class="summary_desc"><div class='inline'></div></span>
176
+
177
+ </li>
178
+
179
+
180
+ <li class="public ">
181
+ <span class="summary_signature">
182
+
183
+ <a href="#optional-instance_method" title="#optional (instance method)">- (Array) <strong>optional</strong> </a>
184
+
185
+
186
+
187
+ </span>
188
+
189
+
190
+
191
+
192
+ <span class="note title readonly">readonly</span>
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+ <span class="summary_desc"><div class='inline'></div></span>
203
+
204
+ </li>
205
+
206
+
207
+ <li class="public ">
208
+ <span class="summary_signature">
209
+
210
+ <a href="#required-instance_method" title="#required (instance method)">- (Array) <strong>required</strong> </a>
211
+
212
+
213
+
214
+ </span>
215
+
216
+
217
+
218
+
219
+ <span class="note title readonly">readonly</span>
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+ <span class="summary_desc"><div class='inline'></div></span>
174
230
 
175
231
  </li>
176
232
 
@@ -211,6 +267,50 @@
211
267
  <p>A new instance of SubjectItemPolicy.</p>
212
268
  </div></span>
213
269
 
270
+ </li>
271
+
272
+
273
+ <li class="public ">
274
+ <span class="summary_signature">
275
+
276
+ <a href="#to_h-instance_method" title="#to_h (instance method)">- (Hash) <strong>to_h</strong> </a>
277
+
278
+
279
+
280
+ </span>
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+ <span class="summary_desc"><div class='inline'></div></span>
291
+
292
+ </li>
293
+
294
+
295
+ <li class="public ">
296
+ <span class="summary_signature">
297
+
298
+ <a href="#to_yaml-instance_method" title="#to_yaml (instance method)">- (YAML) <strong>to_yaml</strong> </a>
299
+
300
+
301
+
302
+ </span>
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+ <span class="summary_desc"><div class='inline'></div></span>
313
+
214
314
  </li>
215
315
 
216
316
 
@@ -271,13 +371,13 @@
271
371
  <p>sample hash</p>
272
372
  </div></p>
273
373
 
274
- <pre class="example code"><code><span class='lbrace'>{</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>CN</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>required</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
275
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>O</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>required</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
276
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>OU</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>optional</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
277
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>ST</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>required</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
278
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>C</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>required</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
279
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>L</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>required</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
280
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>emailAddress</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>optional</span><span class='tstring_end'>&quot;</span></span><span class='rbrace'>}</span></code></pre>
374
+ <pre class="example code"><code>{&quot;CN&quot; =&gt; { :policy =&gt; &quot;required&quot; },
375
+ &quot;O&quot; =&gt; { :policy =&gt; &quot;required&quot; },
376
+ &quot;OU&quot; =&gt; { :policy =&gt; &quot;optional&quot; },
377
+ &quot;ST&quot; =&gt; { :policy =&gt; &quot;required&quot; },
378
+ &quot;C&quot; =&gt; { :policy =&gt; &quot;required&quot; },
379
+ &quot;L&quot; =&gt; { :policy =&gt; &quot;match&quot;, :value =&gt; &quot;Chicago&quot; },
380
+ &quot;emailAddress&quot; =&gt; { :policy =&gt; &quot;optional&quot; }</code></pre>
281
381
 
282
382
  </div>
283
383
  <p class="tag_title">Parameters:</p>
@@ -296,8 +396,8 @@
296
396
 
297
397
  &mdash;
298
398
  <div class='inline'>
299
- <p>of required/optional subject items. These must be in OpenSSL shortname
300
- format.</p>
399
+ <p>of required/optional/matching subject items. These must be in OpenSSL
400
+ shortname format.</p>
301
401
  </div>
302
402
 
303
403
  </li>
@@ -311,42 +411,56 @@ format.</p>
311
411
  <pre class="lines">
312
412
 
313
413
 
314
- 211
315
- 212
316
- 213
317
- 214
318
- 215
319
- 216
320
- 217
321
- 218
322
- 219
323
- 220
324
- 221
325
- 222
326
- 223
327
- 224
328
- 225
329
- 226
330
- 227
331
- 228</pre>
414
+ 33
415
+ 34
416
+ 35
417
+ 36
418
+ 37
419
+ 38
420
+ 39
421
+ 40
422
+ 41
423
+ 42
424
+ 43
425
+ 44
426
+ 45
427
+ 46
428
+ 47
429
+ 48
430
+ 49
431
+ 50
432
+ 51
433
+ 52
434
+ 53
435
+ 54
436
+ 55
437
+ 56
438
+ 57</pre>
332
439
  </td>
333
440
  <td>
334
- <pre class="code"><span class="info file"># File 'lib/r509/config.rb', line 211</span>
441
+ <pre class="code"><span class="info file"># File 'lib/r509/config/subject_item_policy.rb', line 33</span>
335
442
 
336
443
  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_hash'>hash</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
337
444
  <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_hash'>hash</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
338
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Must supply a hash in form 'shortname'=&gt;'required/optional'</span><span class='tstring_end'>&quot;</span></span>
445
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Must supply a hash in form &#39;shortname&#39;=&gt;hash_with_policy_info</span><span class='tstring_end'>&quot;</span></span>
339
446
  <span class='kw'>end</span>
340
447
  <span class='ivar'>@required</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
341
448
  <span class='ivar'>@optional</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
449
+ <span class='ivar'>@match_values</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
450
+ <span class='ivar'>@match</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
342
451
  <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_hash'>hash</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
343
452
  <span class='id identifier rubyid_hash'>hash</span><span class='period'>.</span><span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span>
344
- <span class='kw'>if</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>required</span><span class='tstring_end'>&quot;</span></span>
345
- <span class='ivar'>@required</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
346
- <span class='kw'>elsif</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>optional</span><span class='tstring_end'>&quot;</span></span>
347
- <span class='ivar'>@optional</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
453
+ <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
454
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Each value must be a hash with a :policy key</span><span class='tstring_end'>&quot;</span></span>
455
+ <span class='kw'>end</span>
456
+ <span class='kw'>case</span> <span class='id identifier rubyid_value'>value</span><span class='lbracket'>[</span><span class='symbol'>:policy</span><span class='rbracket'>]</span>
457
+ <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>required</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>then</span> <span class='ivar'>@required</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
458
+ <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>optional</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>then</span> <span class='ivar'>@optional</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
459
+ <span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>match</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>then</span>
460
+ <span class='ivar'>@match_values</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span><span class='lbracket'>[</span><span class='symbol'>:value</span><span class='rbracket'>]</span>
461
+ <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span>
348
462
  <span class='kw'>else</span>
349
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Unknown subject item policy value. Allowed values are required and optional</span><span class='tstring_end'>&quot;</span></span>
463
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Unknown subject item policy value. Allowed values are required, optional, or match</span><span class='tstring_end'>&quot;</span></span>
350
464
  <span class='kw'>end</span>
351
465
  <span class='kw'>end</span>
352
466
  <span class='kw'>end</span>
@@ -364,9 +478,63 @@ format.</p>
364
478
 
365
479
  <span id=""></span>
366
480
  <div class="method_details first">
367
- <h3 class="signature first" id="optional-instance_method">
481
+ <h3 class="signature first" id="match-instance_method">
482
+
483
+ - (<tt>Array</tt>) <strong>match</strong> <span class="extras">(readonly)</span>
484
+
485
+
486
+
487
+
488
+
489
+ </h3><div class="docstring">
490
+ <div class="discussion">
491
+
492
+
493
+ </div>
494
+ </div>
495
+ <div class="tags">
496
+
497
+ <p class="tag_title">Returns:</p>
498
+ <ul class="return">
368
499
 
369
- - (<tt>Object</tt>) <strong>optional</strong> <span class="extras">(readonly)</span>
500
+ <li>
501
+
502
+
503
+ <span class='type'>(<tt>Array</tt>)</span>
504
+
505
+
506
+
507
+ </li>
508
+
509
+ </ul>
510
+
511
+ </div><table class="source_code">
512
+ <tr>
513
+ <td>
514
+ <pre class="lines">
515
+
516
+
517
+ 22
518
+ 23
519
+ 24</pre>
520
+ </td>
521
+ <td>
522
+ <pre class="code"><span class="info file"># File 'lib/r509/config/subject_item_policy.rb', line 22</span>
523
+
524
+ <span class='kw'>def</span> <span class='id identifier rubyid_match'>match</span>
525
+ <span class='ivar'>@match</span>
526
+ <span class='kw'>end</span></pre>
527
+ </td>
528
+ </tr>
529
+ </table>
530
+ </div>
531
+
532
+
533
+ <span id=""></span>
534
+ <div class="method_details ">
535
+ <h3 class="signature " id="match_values-instance_method">
536
+
537
+ - (<tt>Array</tt>) <strong>match_values</strong> <span class="extras">(readonly)</span>
370
538
 
371
539
 
372
540
 
@@ -375,13 +543,78 @@ format.</p>
375
543
  </h3><div class="docstring">
376
544
  <div class="discussion">
377
545
 
378
- <p>Returns the value of attribute optional</p>
379
546
 
547
+ </div>
548
+ </div>
549
+ <div class="tags">
550
+
551
+ <p class="tag_title">Returns:</p>
552
+ <ul class="return">
553
+
554
+ <li>
555
+
556
+
557
+ <span class='type'>(<tt>Array</tt>)</span>
558
+
559
+
560
+
561
+ </li>
562
+
563
+ </ul>
564
+
565
+ </div><table class="source_code">
566
+ <tr>
567
+ <td>
568
+ <pre class="lines">
569
+
570
+
571
+ 22
572
+ 23
573
+ 24</pre>
574
+ </td>
575
+ <td>
576
+ <pre class="code"><span class="info file"># File 'lib/r509/config/subject_item_policy.rb', line 22</span>
577
+
578
+ <span class='kw'>def</span> <span class='id identifier rubyid_match_values'>match_values</span>
579
+ <span class='ivar'>@match_values</span>
580
+ <span class='kw'>end</span></pre>
581
+ </td>
582
+ </tr>
583
+ </table>
584
+ </div>
585
+
586
+
587
+ <span id=""></span>
588
+ <div class="method_details ">
589
+ <h3 class="signature " id="optional-instance_method">
590
+
591
+ - (<tt>Array</tt>) <strong>optional</strong> <span class="extras">(readonly)</span>
592
+
593
+
594
+
595
+
596
+
597
+ </h3><div class="docstring">
598
+ <div class="discussion">
599
+
380
600
 
381
601
  </div>
382
602
  </div>
383
603
  <div class="tags">
384
604
 
605
+ <p class="tag_title">Returns:</p>
606
+ <ul class="return">
607
+
608
+ <li>
609
+
610
+
611
+ <span class='type'>(<tt>Array</tt>)</span>
612
+
613
+
614
+
615
+ </li>
616
+
617
+ </ul>
385
618
 
386
619
  </div><table class="source_code">
387
620
  <tr>
@@ -389,12 +622,12 @@ format.</p>
389
622
  <pre class="lines">
390
623
 
391
624
 
392
- 200
393
- 201
394
- 202</pre>
625
+ 22
626
+ 23
627
+ 24</pre>
395
628
  </td>
396
629
  <td>
397
- <pre class="code"><span class="info file"># File 'lib/r509/config.rb', line 200</span>
630
+ <pre class="code"><span class="info file"># File 'lib/r509/config/subject_item_policy.rb', line 22</span>
398
631
 
399
632
  <span class='kw'>def</span> <span class='id identifier rubyid_optional'>optional</span>
400
633
  <span class='ivar'>@optional</span>
@@ -409,7 +642,7 @@ format.</p>
409
642
  <div class="method_details ">
410
643
  <h3 class="signature " id="required-instance_method">
411
644
 
412
- - (<tt>Object</tt>) <strong>required</strong> <span class="extras">(readonly)</span>
645
+ - (<tt>Array</tt>) <strong>required</strong> <span class="extras">(readonly)</span>
413
646
 
414
647
 
415
648
 
@@ -418,13 +651,24 @@ format.</p>
418
651
  </h3><div class="docstring">
419
652
  <div class="discussion">
420
653
 
421
- <p>Returns the value of attribute required</p>
422
-
423
654
 
424
655
  </div>
425
656
  </div>
426
657
  <div class="tags">
427
658
 
659
+ <p class="tag_title">Returns:</p>
660
+ <ul class="return">
661
+
662
+ <li>
663
+
664
+
665
+ <span class='type'>(<tt>Array</tt>)</span>
666
+
667
+
668
+
669
+ </li>
670
+
671
+ </ul>
428
672
 
429
673
  </div><table class="source_code">
430
674
  <tr>
@@ -432,12 +676,12 @@ format.</p>
432
676
  <pre class="lines">
433
677
 
434
678
 
435
- 200
436
- 201
437
- 202</pre>
679
+ 22
680
+ 23
681
+ 24</pre>
438
682
  </td>
439
683
  <td>
440
- <pre class="code"><span class="info file"># File 'lib/r509/config.rb', line 200</span>
684
+ <pre class="code"><span class="info file"># File 'lib/r509/config/subject_item_policy.rb', line 22</span>
441
685
 
442
686
  <span class='kw'>def</span> <span class='id identifier rubyid_required'>required</span>
443
687
  <span class='ivar'>@required</span>
@@ -455,7 +699,119 @@ format.</p>
455
699
 
456
700
 
457
701
  <div class="method_details first">
458
- <h3 class="signature first" id="validate_subject-instance_method">
702
+ <h3 class="signature first" id="to_h-instance_method">
703
+
704
+ - (<tt>Hash</tt>) <strong>to_h</strong>
705
+
706
+
707
+
708
+
709
+
710
+ </h3><div class="docstring">
711
+ <div class="discussion">
712
+
713
+
714
+ </div>
715
+ </div>
716
+ <div class="tags">
717
+
718
+ <p class="tag_title">Returns:</p>
719
+ <ul class="return">
720
+
721
+ <li>
722
+
723
+
724
+ <span class='type'>(<tt>Hash</tt>)</span>
725
+
726
+
727
+
728
+ </li>
729
+
730
+ </ul>
731
+
732
+ </div><table class="source_code">
733
+ <tr>
734
+ <td>
735
+ <pre class="lines">
736
+
737
+
738
+ 74
739
+ 75
740
+ 76
741
+ 77
742
+ 78
743
+ 79
744
+ 80</pre>
745
+ </td>
746
+ <td>
747
+ <pre class="code"><span class="info file"># File 'lib/r509/config/subject_item_policy.rb', line 74</span>
748
+
749
+ <span class='kw'>def</span> <span class='id identifier rubyid_to_h'>to_h</span>
750
+ <span class='id identifier rubyid_hash'>hash</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
751
+ <span class='ivar'>@required</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_r'>r</span><span class='op'>|</span> <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='id identifier rubyid_r'>r</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='symbol'>:policy</span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>required</span><span class='tstring_end'>&quot;</span></span> <span class='rbrace'>}</span> <span class='rbrace'>}</span>
752
+ <span class='ivar'>@optional</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_o'>o</span><span class='op'>|</span> <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='id identifier rubyid_o'>o</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='symbol'>:policy</span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>optional</span><span class='tstring_end'>&quot;</span></span> <span class='rbrace'>}</span> <span class='rbrace'>}</span>
753
+ <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_m'>m</span><span class='op'>|</span> <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='id identifier rubyid_m'>m</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='symbol'>:policy</span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>match</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='symbol'>:value</span> <span class='op'>=&gt;</span> <span class='ivar'>@match_values</span><span class='lbracket'>[</span><span class='id identifier rubyid_m'>m</span><span class='rbracket'>]</span><span class='rbrace'>}</span> <span class='rbrace'>}</span>
754
+ <span class='id identifier rubyid_hash'>hash</span>
755
+ <span class='kw'>end</span></pre>
756
+ </td>
757
+ </tr>
758
+ </table>
759
+ </div>
760
+
761
+ <div class="method_details ">
762
+ <h3 class="signature " id="to_yaml-instance_method">
763
+
764
+ - (<tt>YAML</tt>) <strong>to_yaml</strong>
765
+
766
+
767
+
768
+
769
+
770
+ </h3><div class="docstring">
771
+ <div class="discussion">
772
+
773
+
774
+ </div>
775
+ </div>
776
+ <div class="tags">
777
+
778
+ <p class="tag_title">Returns:</p>
779
+ <ul class="return">
780
+
781
+ <li>
782
+
783
+
784
+ <span class='type'>(<tt>YAML</tt>)</span>
785
+
786
+
787
+
788
+ </li>
789
+
790
+ </ul>
791
+
792
+ </div><table class="source_code">
793
+ <tr>
794
+ <td>
795
+ <pre class="lines">
796
+
797
+
798
+ 83
799
+ 84
800
+ 85</pre>
801
+ </td>
802
+ <td>
803
+ <pre class="code"><span class="info file"># File 'lib/r509/config/subject_item_policy.rb', line 83</span>
804
+
805
+ <span class='kw'>def</span> <span class='id identifier rubyid_to_yaml'>to_yaml</span>
806
+ <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_to_h'>to_h</span><span class='period'>.</span><span class='id identifier rubyid_to_yaml'>to_yaml</span>
807
+ <span class='kw'>end</span></pre>
808
+ </td>
809
+ </tr>
810
+ </table>
811
+ </div>
812
+
813
+ <div class="method_details ">
814
+ <h3 class="signature " id="validate_subject-instance_method">
459
815
 
460
816
  - (<tt><span class='object_link'><a href="../Subject.html" title="R509::Subject (class)">R509::Subject</a></span></tt>) <strong>validate_subject</strong>(subject)
461
817
 
@@ -513,48 +869,30 @@ format.</p>
513
869
  <pre class="lines">
514
870
 
515
871
 
516
- 232
517
- 233
518
- 234
519
- 235
520
- 236
521
- 237
522
- 238
523
- 239
524
- 240
525
- 241
526
- 242
527
- 243
528
- 244
529
- 245
530
- 246
531
- 247
532
- 248
533
- 249
534
- 250
535
- 251</pre>
872
+ 61
873
+ 62
874
+ 63
875
+ 64
876
+ 65
877
+ 66
878
+ 67
879
+ 68
880
+ 69
881
+ 70
882
+ 71</pre>
536
883
  </td>
537
884
  <td>
538
- <pre class="code"><span class="info file"># File 'lib/r509/config.rb', line 232</span>
885
+ <pre class="code"><span class="info file"># File 'lib/r509/config/subject_item_policy.rb', line 61</span>
539
886
 
540
887
  <span class='kw'>def</span> <span class='id identifier rubyid_validate_subject'>validate_subject</span><span class='lparen'>(</span><span class='id identifier rubyid_subject'>subject</span><span class='rparen'>)</span>
541
- <span class='comment'># convert the subject components into an array of component names that match
542
- </span> <span class='comment'># those that are on the required list
543
- </span> <span class='id identifier rubyid_supplied'>supplied</span> <span class='op'>=</span> <span class='id identifier rubyid_subject'>subject</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_item'>item</span><span class='op'>|</span>
544
- <span class='ivar'>@required</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_item'>item</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='rparen'>)</span>
545
- <span class='kw'>end</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_item'>item</span><span class='op'>|</span>
546
- <span class='id identifier rubyid_item'>item</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
547
- <span class='kw'>end</span>
548
- <span class='comment'># so we can make sure they gave us everything that's required
549
- </span> <span class='id identifier rubyid_diff'>diff</span> <span class='op'>=</span> <span class='ivar'>@required</span> <span class='op'>-</span> <span class='id identifier rubyid_supplied'>supplied</span>
550
- <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_diff'>diff</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
551
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>R509</span><span class='op'>::</span><span class='const'>R509Error</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>This profile requires you supply </span><span class='tstring_end'>&quot;</span></span><span class='op'>+</span><span class='ivar'>@required</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>, </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
552
- <span class='kw'>end</span>
888
+ <span class='comment'># check if match components are present and match
889
+ </span> <span class='id identifier rubyid_validate_match'>validate_match</span><span class='lparen'>(</span><span class='id identifier rubyid_subject'>subject</span><span class='rparen'>)</span>
890
+ <span class='id identifier rubyid_validate_required_match'>validate_required_match</span><span class='lparen'>(</span><span class='id identifier rubyid_subject'>subject</span><span class='rparen'>)</span>
553
891
 
554
892
  <span class='comment'># the validated subject contains only those subject components that are either
555
- </span> <span class='comment'># required or optional
893
+ </span> <span class='comment'># required, optional, or match
556
894
  </span> <span class='const'>R509</span><span class='op'>::</span><span class='const'>Subject</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_subject'>subject</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_item'>item</span><span class='op'>|</span>
557
- <span class='ivar'>@required</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_item'>item</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>or</span> <span class='ivar'>@optional</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_item'>item</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='rparen'>)</span>
895
+ <span class='ivar'>@required</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_item'>item</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>or</span> <span class='ivar'>@optional</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_item'>item</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>or</span> <span class='ivar'>@match</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_item'>item</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='rparen'>)</span>
558
896
  <span class='kw'>end</span><span class='rparen'>)</span>
559
897
  <span class='kw'>end</span></pre>
560
898
  </td>
@@ -567,9 +905,9 @@ format.</p>
567
905
  </div>
568
906
 
569
907
  <div id="footer">
570
- Generated on Tue Apr 23 10:46:05 2013 by
908
+ Generated on Sun Jan 26 13:37:27 2014 by
571
909
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
572
- 0.8.5 (ruby-1.9.3).
910
+ 0.8.6.1 (ruby-2.0.0).
573
911
  </div>
574
912
 
575
913
  </body>