xommelier 0.1.30 → 0.1.31

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1 -0
  3. data/config/giteaucrat.yml +5 -0
  4. data/lib/xommelier/atom/category.rb +7 -0
  5. data/lib/xommelier/atom/content.rb +7 -0
  6. data/lib/xommelier/atom/entry.rb +7 -0
  7. data/lib/xommelier/atom/feed.rb +7 -0
  8. data/lib/xommelier/atom/full.rb +7 -0
  9. data/lib/xommelier/atom/generator.rb +7 -0
  10. data/lib/xommelier/atom/history.rb +7 -0
  11. data/lib/xommelier/atom/link.rb +7 -0
  12. data/lib/xommelier/atom/links_extension.rb +7 -0
  13. data/lib/xommelier/atom/person.rb +7 -0
  14. data/lib/xommelier/atom/source.rb +7 -0
  15. data/lib/xommelier/atom/threading.rb +7 -0
  16. data/lib/xommelier/atom.rb +7 -0
  17. data/lib/xommelier/common.rb +7 -0
  18. data/lib/xommelier/core_ext/boolean.rb +8 -0
  19. data/lib/xommelier/core_ext/date.rb +7 -0
  20. data/lib/xommelier/core_ext/float.rb +7 -0
  21. data/lib/xommelier/core_ext/numeric.rb +7 -0
  22. data/lib/xommelier/core_ext/string.rb +7 -0
  23. data/lib/xommelier/core_ext/symbol.rb +7 -0
  24. data/lib/xommelier/core_ext/time.rb +7 -0
  25. data/lib/xommelier/core_ext/uri.rb +8 -0
  26. data/lib/xommelier/core_ext.rb +7 -0
  27. data/lib/xommelier/ds.rb +266 -0
  28. data/lib/xommelier/dsig11.rb +111 -0
  29. data/lib/xommelier/factory_girl.rb +24 -0
  30. data/lib/xommelier/open_search.rb +7 -0
  31. data/lib/xommelier/opml.rb +7 -0
  32. data/lib/xommelier/rss/atomic.rb +7 -0
  33. data/lib/xommelier/rss.rb +7 -0
  34. data/lib/xommelier/schemas/ds.xsd +318 -0
  35. data/lib/xommelier/schemas/dsig11.xsd +131 -0
  36. data/lib/xommelier/schemas/xmldsig1-schema.xsd +11 -0
  37. data/lib/xommelier/sitemap.rb +7 -0
  38. data/lib/xommelier/version.rb +8 -1
  39. data/lib/xommelier/xml/element/namespace.rb +7 -0
  40. data/lib/xommelier/xml/element/serialization.rb +7 -0
  41. data/lib/xommelier/xml/element/structure/property.rb +7 -0
  42. data/lib/xommelier/xml/element/structure.rb +7 -0
  43. data/lib/xommelier/xml/element.rb +7 -0
  44. data/lib/xommelier/xml/namespace.rb +8 -0
  45. data/lib/xommelier/xml/schema.rb +7 -0
  46. data/lib/xommelier/xml.rb +7 -0
  47. data/lib/xommelier.rb +9 -0
  48. data/spec/fixtures/ds_rsa.xml +58 -0
  49. data/spec/fixtures/nested_atom.xml +2 -6
  50. data/spec/functional/xommelier/atom/feed/building_hash_spec.rb +10 -4
  51. data/spec/functional/xommelier/atom/feed/building_spec.rb +7 -0
  52. data/spec/functional/xommelier/atom/feed/parsing_spec.rb +9 -7
  53. data/spec/functional/xommelier/atom/threading/building_spec.rb +7 -0
  54. data/spec/functional/xommelier/open_search/description/building_spec.rb +7 -0
  55. data/spec/functional/xommelier/open_search/description/parsing_spec.rb +7 -3
  56. data/spec/functional/xommelier/rss/rss/building_spec.rb +7 -0
  57. data/spec/functional/xommelier/rss/rss/parsing_spec.rb +8 -5
  58. data/spec/lib/xommelier/atom/entry_spec.rb +7 -0
  59. data/spec/lib/xommelier/ds_spec.rb +102 -0
  60. data/spec/lib/xommelier/rss/email_address_spec.rb +7 -0
  61. data/spec/lib/xommelier/xml/element/serialization_spec.rb +7 -0
  62. data/spec/lib/xommelier/xml/element/structure_spec.rb +7 -0
  63. data/spec/lib/xommelier/xml/element_spec.rb +7 -0
  64. data/spec/lib/xommelier/xml_spec.rb +7 -0
  65. data/spec/lib/xommelier_spec.rb +7 -0
  66. data/spec/namespaced_module.rb +7 -0
  67. data/spec/spec_helper.rb +7 -0
  68. data/spec/support/fixtures.rb +7 -0
  69. data/spec/support/schema_validatable.rb +7 -0
  70. data/xommelier.gemspec +1 -0
  71. metadata +32 -27
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 75bd4f6f2751ba556d0a35cefa150d5886511aae
4
+ data.tar.gz: ee0278a00499fa04929e81f056f89ff5a23846fa
5
+ SHA512:
6
+ metadata.gz: 8b6ef44e264d5267325647479dfffe5275f9238885eef222a2a3394567fa217a207e2efac00c7240cdbf89362524c05cc8c37b3cdcc3e38cb7f3f6a2973c8ce5
7
+ data.tar.gz: 999d6a89bce33c2729e146f40373af807f4b57a6d9e33b7e3274cbee943b63fc5335495e5d9331067a8b38ad9f85ff51c068356c54a2f005f343ebdb97943096
data/README.md CHANGED
@@ -197,5 +197,6 @@ will output
197
197
  ## Contributors
198
198
 
199
199
  * Artyom Semyonov
200
+ * Sergey Ukustov
200
201
 
201
202
  © Alexander Semyonov, 2011-2012. See MIT-LICENSE for details
@@ -0,0 +1,5 @@
1
+ ---
2
+ commit_keyword: ! '#giteaucrat'
3
+ copyright_owner: Alexander Semyonov
4
+ copyright_format: © %{owner}, %{years}, %{license}
5
+ license: MIT License
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
  require 'xommelier/atom/threading'
3
10
  require 'xommelier/atom/history'
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/atom'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier/xml'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier'
2
9
 
3
10
  module Xommelier
@@ -1,3 +1,11 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Authors: Alexander Semyonov <al@semyonov.us> #
6
+ # Artyom Semyonov <sevenov@gmail.com> #
7
+ ################################################
8
+
1
9
  require 'xommelier'
2
10
 
3
11
  class Boolean
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'date'
2
9
 
3
10
  class Date
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  class Float
2
9
  def self.from_xommelier(value)
3
10
  return nil if value.blank?
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  class Numeric
2
9
  def self.from_xommelier(value)
3
10
  return nil if value.blank?
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  class String
2
9
  def self.from_xommelier(value)
3
10
  return nil if value.is_a?(NilClass)
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  class Symbol
2
9
  def self.from_xommelier(value)
3
10
  value.to_sym
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'time'
2
9
 
3
10
  class Time
@@ -1,3 +1,11 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
8
+ require 'xommelier'
1
9
  require 'xommelier/core_ext/string'
2
10
  require 'uri'
3
11
 
@@ -1,3 +1,10 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
1
8
  require 'xommelier'
2
9
 
3
10
  require 'xommelier/core_ext/boolean'
@@ -0,0 +1,266 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
8
+ require 'xommelier'
9
+ require 'base64'
10
+ require 'delegate'
11
+
12
+ module Xommelier
13
+ module DS
14
+ include Xommelier::Xml
15
+
16
+ xmlns 'http://www.w3.org/2000/09/xmldsig#', as: :ds
17
+ schema
18
+
19
+ class CryptoBinary < DelegateClass(String)
20
+ def self.from_xommelier(value)
21
+ return unless value
22
+ case value
23
+ when %r(\A[a-zA-Z0-9+/]={0,2}\Z)
24
+ new Base64.decode64(value)
25
+ when String
26
+ new value
27
+ else
28
+ new value.to_s
29
+ end
30
+ end
31
+
32
+ def inspect
33
+ %(#<#{self.class.name} "#{to_s}">)
34
+ end
35
+
36
+ def raw
37
+ __getobj__
38
+ end
39
+
40
+ def to_s
41
+ to_xommelier.to_s
42
+ end
43
+
44
+ def to_xommelier
45
+ Base64.encode64(raw)
46
+ end
47
+ end
48
+
49
+ class Element < Xml::Element
50
+ def self.find_element_name
51
+ name.demodulize
52
+ end
53
+
54
+ # Defines containing attribute
55
+ def self.attribute(name, options = {})
56
+ options[:as] ||= name.to_s.camelcase
57
+ super(name, options)
58
+ end
59
+
60
+ def self.any!(options = {})
61
+ # TODO implement <any /> logic
62
+ end
63
+
64
+ def self.choice!(options = {})
65
+ # TODO implement <choice /> logic
66
+ may do
67
+ yield
68
+ end
69
+ end
70
+
71
+ def self.sequence!(options = {})
72
+ # TODO implement <choice /> logic
73
+ yield
74
+ end
75
+
76
+ def self.has_algorithm(map = {})
77
+ attribute :algorithm, type: Uri, required: true
78
+
79
+ const_set(:ALGORITHMS, map)
80
+ map.each do |name, algorithm|
81
+ define_singleton_method("new_#{name}") do |options = {}|
82
+ new(options.merge(algorithm: algorithm))
83
+ end
84
+ end
85
+
86
+ define_method(:algorithm_name) do
87
+ map.key(algorithm.to_s)
88
+ end
89
+ end
90
+ end
91
+
92
+ class SignatureValue < Element
93
+ attribute :id, optional: true
94
+
95
+ text
96
+ end
97
+
98
+ class CanonicalizationMethod < Element
99
+ any! ns: :any, count: :any
100
+ has_algorithm(
101
+ omit_comments: 'http://www.w3.org/TR/2001/REC-xml-c14n-20010315',
102
+ with_comments: 'http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments'
103
+ )
104
+ end
105
+
106
+ class SignatureMethod < Element
107
+ element :hmac_output_length, as: 'HMACOutputLength', type: Integer, count: :may
108
+ any! ns: :other, count: :any
109
+ has_algorithm(
110
+ rsa_sha1: 'http://www.w3.org/2000/09/xmldsig#rsa-sha1',
111
+ dsa_sha1: 'http://www.w3.org/2000/09/xmldsig#dsa-sha1'
112
+ )
113
+ end
114
+
115
+ class Transform < Element
116
+ choice! count: :any do
117
+ any! ns: :other
118
+ element :xpath, as: 'XPath'
119
+ end
120
+ has_algorithm(
121
+ xslt: 'http://www.w3.org/TR/1999/REC-xslt-19991116',
122
+ xpath: 'http://www.w3.org/TR/1999/REC-xpath-19991116',
123
+ enveloped_signature: 'http://www.w3.org/2000/09/xmldsig#enveloped-signature'
124
+ )
125
+ end
126
+
127
+ class Transforms < Element
128
+ element ref: Transform, count: :many
129
+ end
130
+
131
+ class DigestMethod < Element
132
+ any! ns: :other, count: :any
133
+ has_algorithm(
134
+ sha1: 'http://www.w3.org/2000/09/xmldsig#sha1'
135
+ )
136
+ end
137
+
138
+ class Reference < Element
139
+ element ref: Transforms, count: :may
140
+ element ref: DigestMethod
141
+ element :digest_value, as: 'DigestValue'
142
+ attribute :id, optional: true
143
+ attribute :uri, as: 'URI', type: Uri, optional: true
144
+ attribute :type, type: Uri, optional: true
145
+ end
146
+
147
+ class SignedInfo < Element
148
+ element ref: CanonicalizationMethod
149
+ element ref: SignatureMethod
150
+ element ref: Reference, count: :many
151
+ attribute :id, optional: true
152
+ end
153
+
154
+ class DSAKeyValue < Element
155
+ sequence! count: :may do
156
+ element :p, as: 'P', type: CryptoBinary
157
+ element :q, as: 'Q', type: CryptoBinary
158
+ end
159
+ element :g, as: 'G', type: CryptoBinary, count: :may
160
+ element :y, as: 'Y', type: CryptoBinary
161
+ element :j, as: 'J', type: CryptoBinary, count: :may
162
+ sequence! count: :may do
163
+ element :seed, as: 'Seed', type: CryptoBinary
164
+ element :pgen_counter, as: 'PgenCounter', type: CryptoBinary
165
+ end
166
+ end
167
+
168
+ class RSAKeyValue < Element
169
+ sequence! do
170
+ element :modulus, as: 'Modulus', type: CryptoBinary
171
+ element :exponent, as: 'Exponent', type: CryptoBinary
172
+ end
173
+ end
174
+
175
+ class KeyValue < Element
176
+ choice! do
177
+ element ref: DSAKeyValue
178
+ element ref: RSAKeyValue
179
+ any! ns: :other
180
+ end
181
+ end
182
+
183
+ class RetrievalMethod < Element
184
+ element ref: Transforms, count: :any
185
+ attribute :uri, as: 'URI', type: URI
186
+ attribute :type, type: URI, optional: true
187
+ end
188
+
189
+ class X509IssuerSerial < Element
190
+ element :issuer_name, as: 'X509IssuerName'
191
+ element :serial_number, as: 'X509SerialNumber', type: Integer
192
+ end
193
+
194
+ class X509Data < Element
195
+ sequence! count: :many do
196
+ choice! do
197
+ element :issuer_serial, type: X509IssuerSerial
198
+ element :ski, as: 'X509SKI'
199
+ element :subject_name, as: 'X509SubjectName'
200
+ element :certificate, as: 'X509Certificate'
201
+ element :crl, as: 'X509CRL'
202
+ any! ns: :other
203
+ end
204
+ end
205
+ end
206
+
207
+ class PGPData < Element
208
+ element :key_id, as: 'PGPKeyID', count: :may
209
+ element :key_packet, as: 'PGPKeyPacket', count: :may
210
+ any! ns: :other, count: :any
211
+ end
212
+
213
+ class SPKIData < Element
214
+ element :sexp, as: 'SPKISexp'
215
+ any! ns: :other, count: :may
216
+ end
217
+
218
+ class KeyInfo < Element
219
+ choice! count: :many do
220
+ element :key_name, as: 'KeyName'
221
+ element ref: KeyValue
222
+ element ref: RetrievalMethod
223
+ element ref: X509Data
224
+ element ref: PGPData
225
+ element ref: SPKIData
226
+ element :mgmt_data, as: 'MgmtData'
227
+ any! ns: :other
228
+ end
229
+ attribute :id, optional: true
230
+ end
231
+
232
+ class Manifest < Element
233
+ element ref: Reference, count: :many
234
+ attribute :id, optional: true
235
+ end
236
+
237
+ class SignatureProperty < Element
238
+ choice! do
239
+ any! ns: :other
240
+ end
241
+ attribute :target, type: Uri, optional: true
242
+ attribute :id, optional: true
243
+ end
244
+
245
+ class SignatureProperties < Element
246
+ element ref: SignatureProperty, count: :many
247
+ attribute :id, optional: true
248
+ end
249
+
250
+ class Object < Element
251
+ any! ns: :any, count: :any
252
+ attribute :id, optional: true
253
+ attribute :mime_type, optional: true
254
+ attribute :encoding, type: Uri, optional: true
255
+ end
256
+
257
+ class Signature < Element
258
+ element ref: SignedInfo
259
+ element ref: SignatureValue
260
+ element ref: KeyInfo, count: :may
261
+ element ref: Object, count: :any
262
+
263
+ attribute :id, optional: true
264
+ end
265
+ end
266
+ end
@@ -0,0 +1,111 @@
1
+ # coding: utf-8
2
+
3
+ ################################################
4
+ # © Alexander Semyonov, 2011—2013, MIT License #
5
+ # Author: Alexander Semyonov <al@semyonov.us> #
6
+ ################################################
7
+
8
+ require 'xommelier'
9
+ require 'xommelier/ds'
10
+
11
+ module Xommelier
12
+ module DSIG11
13
+ include Xommelier::Xml
14
+
15
+ xmlns 'http://www.w3.org/2009/xmldsig11#', as: :dsig11
16
+ schema
17
+
18
+ class ECPointType < DS::CryptoBinary
19
+ def self.from_xommelier(value)
20
+ return unless value
21
+ case value
22
+ when DS::CryptoBinary
23
+ new(value.raw)
24
+ else
25
+ new(DS::CryptoBinary.from_xommelier(value))
26
+ end
27
+ end
28
+ end
29
+
30
+ class Element < Xommelier::DS::Element
31
+ xmlns DSIG11.xmlns
32
+ end
33
+
34
+ class NamedCurve < Element
35
+ attribute :uri, as: 'URI', required: true
36
+ end
37
+
38
+ class Curve < Element
39
+ element :a, as: 'A', type: DS::CryptoBinary
40
+ element :b, as: 'B', type: DS::CryptoBinary
41
+ end
42
+
43
+ class Prime < Element
44
+ element :p, as: 'P', type: DS::CryptoBinary
45
+ end
46
+
47
+ class GnB < Element
48
+ element :m, as: 'M', type: Integer # positiveInteger
49
+ end
50
+
51
+ class TnB < GnB
52
+ element :k, as: 'K', type: Integer # positiveInteger
53
+ end
54
+
55
+ class PnB < GnB
56
+ element :k1, as: 'K1', type: Integer # positiveInteger
57
+ element :k2, as: 'K2', type: Integer # positiveInteger
58
+ element :k3, as: 'K3', type: Integer # positiveInteger
59
+ end
60
+
61
+ class FieldID < Element
62
+ choice! do
63
+ element ref: Prime
64
+ element ref: TnB
65
+ element ref: PnB
66
+ element ref: GnB
67
+ any! ns: :other
68
+ end
69
+ end
70
+
71
+ class ValidationData < Element
72
+ element :seed, type: DS::CryptoBinary
73
+ attribute :hash_algorithm, type: Uri, required: true
74
+ end
75
+
76
+ class ECParameters < Element
77
+ element ref: FieldID
78
+ element ref: Curve
79
+ element :base, as: 'Base', type: ECPointType
80
+ element :order, as: 'Order', type: DS::CryptoBinary
81
+ element :co_factor, as: 'CoFactor', type: Integer, count: :may
82
+ element ref: ValidationData, count: :may
83
+ end
84
+
85
+ class ECKeyValue < Element
86
+ choice! do
87
+ element ref: ECParameters
88
+ element ref: NamedCurve
89
+ end
90
+ element :public_key, as: 'PublicKey', type: ECPointType
91
+ attribute :id, optional: true
92
+ end
93
+
94
+ class DEREncodedKeyValue < Element
95
+ text
96
+ attribute :id, optional: true
97
+ end
98
+
99
+ class KeyInfoReference < Element
100
+ attribute :uri, as: 'URI', type: URI, required: true
101
+ attribute :id, type: URI, optional: true
102
+ end
103
+
104
+ class X509Digest < Element
105
+ text
106
+ has_algorithm(
107
+
108
+ )
109
+ end
110
+ end
111
+ end