ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/CBOR-XS/README
Revision: 1.22
Committed: Thu Oct 21 01:14:58 2021 UTC (2 years, 6 months ago) by root
Branch: MAIN
CVS Tags: rel-1_86, rel-1_84, rel-1_85
Changes since 1.21: +9 -4 lines
Log Message:
1.84

File Contents

# User Rev Content
1 root 1.2 NAME
2     CBOR::XS - Concise Binary Object Representation (CBOR, RFC7049)
3    
4     SYNOPSIS
5     use CBOR::XS;
6    
7     $binary_cbor_data = encode_cbor $perl_value;
8     $perl_value = decode_cbor $binary_cbor_data;
9    
10     # OO-interface
11    
12     $coder = CBOR::XS->new;
13 root 1.5 $binary_cbor_data = $coder->encode ($perl_value);
14     $perl_value = $coder->decode ($binary_cbor_data);
15    
16     # prefix decoding
17    
18     my $many_cbor_strings = ...;
19     while (length $many_cbor_strings) {
20     my ($data, $length) = $cbor->decode_prefix ($many_cbor_strings);
21     # data was decoded
22     substr $many_cbor_strings, 0, $length, ""; # remove decoded cbor string
23     }
24 root 1.2
25     DESCRIPTION
26 root 1.4 This module converts Perl data structures to the Concise Binary Object
27     Representation (CBOR) and vice versa. CBOR is a fast binary
28 root 1.10 serialisation format that aims to use an (almost) superset of the JSON
29     data model, i.e. when you can represent something useful in JSON, you
30     should be able to represent it in CBOR.
31 root 1.4
32 root 1.10 In short, CBOR is a faster and quite compact binary alternative to JSON,
33 root 1.6 with the added ability of supporting serialisation of Perl objects.
34 root 1.7 (JSON often compresses better than CBOR though, so if you plan to
35 root 1.10 compress the data later and speed is less important you might want to
36     compare both formats first).
37 root 1.4
38 root 1.19 The primary goal of this module is to be *correct* and the secondary
39     goal is to be *fast*. To reach the latter goal it was written in C.
40    
41 root 1.8 To give you a general idea about speed, with texts in the megabyte
42     range, "CBOR::XS" usually encodes roughly twice as fast as Storable or
43     JSON::XS and decodes about 15%-30% faster than those. The shorter the
44     data, the worse Storable performs in comparison.
45    
46 root 1.10 Regarding compactness, "CBOR::XS"-encoded data structures are usually
47     about 20% smaller than the same data encoded as (compact) JSON or
48     Storable.
49 root 1.8
50 root 1.9 In addition to the core CBOR data format, this module implements a
51 root 1.10 number of extensions, to support cyclic and shared data structures (see
52 root 1.11 "allow_sharing" and "allow_cycles"), string deduplication (see
53     "pack_strings") and scalar references (always enabled).
54 root 1.9
55 root 1.2 See MAPPING, below, on how CBOR::XS maps perl values to CBOR values and
56     vice versa.
57    
58     FUNCTIONAL INTERFACE
59     The following convenience methods are provided by this module. They are
60     exported by default:
61    
62     $cbor_data = encode_cbor $perl_scalar
63     Converts the given Perl data structure to CBOR representation.
64     Croaks on error.
65    
66     $perl_scalar = decode_cbor $cbor_data
67     The opposite of "encode_cbor": expects a valid CBOR string to parse,
68     returning the resulting perl scalar. Croaks on error.
69    
70     OBJECT-ORIENTED INTERFACE
71     The object oriented interface lets you configure your own encoding or
72     decoding style, within the limits of supported formats.
73    
74     $cbor = new CBOR::XS
75     Creates a new CBOR::XS object that can be used to de/encode CBOR
76     strings. All boolean flags described below are by default
77     *disabled*.
78    
79     The mutators for flags all return the CBOR object again and thus
80     calls can be chained:
81    
82 root 1.9 my $cbor = CBOR::XS->new->encode ({a => [1,2]});
83 root 1.2
84 root 1.18 $cbor = new_safe CBOR::XS
85     Create a new, safe/secure CBOR::XS object. This is similar to "new",
86     but configures the coder object to be safe to use with untrusted
87     data. Currently, this is equivalent to:
88    
89     my $cbor = CBOR::XS
90     ->new
91 root 1.22 ->validate_utf8
92 root 1.18 ->forbid_objects
93     ->filter (\&CBOR::XS::safe_filter)
94     ->max_size (1e8);
95    
96     But is more future proof (it is better to crash because of a change
97     than to be exploited in other ways).
98    
99 root 1.2 $cbor = $cbor->max_depth ([$maximum_nesting_depth])
100     $max_depth = $cbor->get_max_depth
101     Sets the maximum nesting level (default 512) accepted while encoding
102     or decoding. If a higher nesting level is detected in CBOR data or a
103     Perl data structure, then the encoder and decoder will stop and
104     croak at that point.
105    
106     Nesting level is defined by number of hash- or arrayrefs that the
107     encoder needs to traverse to reach a given point or the number of
108     "{" or "[" characters without their matching closing parenthesis
109     crossed to reach a given character in a string.
110    
111     Setting the maximum depth to one disallows any nesting, so that
112     ensures that the object is only a single hash/object or array.
113    
114     If no argument is given, the highest possible setting will be used,
115     which is rarely useful.
116    
117     Note that nesting is implemented by recursion in C. The default
118     value has been chosen to be as large as typical operating systems
119     allow without crashing.
120    
121 root 1.18 See "SECURITY CONSIDERATIONS", below, for more info on why this is
122 root 1.2 useful.
123    
124     $cbor = $cbor->max_size ([$maximum_string_size])
125     $max_size = $cbor->get_max_size
126     Set the maximum length a CBOR string may have (in bytes) where
127     decoding is being attempted. The default is 0, meaning no limit.
128     When "decode" is called on a string that is longer then this many
129     bytes, it will not attempt to decode the string but throw an
130     exception. This setting has no effect on "encode" (yet).
131    
132     If no argument is given, the limit check will be deactivated (same
133     as when 0 is specified).
134    
135 root 1.18 See "SECURITY CONSIDERATIONS", below, for more info on why this is
136 root 1.2 useful.
137    
138 root 1.9 $cbor = $cbor->allow_unknown ([$enable])
139     $enabled = $cbor->get_allow_unknown
140     If $enable is true (or missing), then "encode" will *not* throw an
141     exception when it encounters values it cannot represent in CBOR (for
142     example, filehandles) but instead will encode a CBOR "error" value.
143    
144     If $enable is false (the default), then "encode" will throw an
145     exception when it encounters anything it cannot encode as CBOR.
146    
147     This option does not affect "decode" in any way, and it is
148     recommended to leave it off unless you know your communications
149     partner.
150    
151     $cbor = $cbor->allow_sharing ([$enable])
152     $enabled = $cbor->get_allow_sharing
153     If $enable is true (or missing), then "encode" will not
154     double-encode values that have been referenced before (e.g. when the
155     same object, such as an array, is referenced multiple times), but
156     instead will emit a reference to the earlier value.
157    
158     This means that such values will only be encoded once, and will not
159     result in a deep cloning of the value on decode, in decoders
160 root 1.10 supporting the value sharing extension. This also makes it possible
161 root 1.18 to encode cyclic data structures (which need "allow_cycles" to be
162 root 1.11 enabled to be decoded by this module).
163 root 1.9
164     It is recommended to leave it off unless you know your communication
165     partner supports the value sharing extensions to CBOR
166 root 1.10 (<http://cbor.schmorp.de/value-sharing>), as without decoder
167     support, the resulting data structure might be unusable.
168 root 1.9
169     Detecting shared values incurs a runtime overhead when values are
170     encoded that have a reference counter large than one, and might
171     unnecessarily increase the encoded size, as potentially shared
172 root 1.19 values are encoded as shareable whether or not they are actually
173 root 1.9 shared.
174    
175     At the moment, only targets of references can be shared (e.g.
176     scalars, arrays or hashes pointed to by a reference). Weirder
177     constructs, such as an array with multiple "copies" of the *same*
178     string, which are hard but not impossible to create in Perl, are not
179 root 1.10 supported (this is the same as with Storable).
180 root 1.9
181 root 1.10 If $enable is false (the default), then "encode" will encode shared
182     data structures repeatedly, unsharing them in the process. Cyclic
183     data structures cannot be encoded in this mode.
184 root 1.9
185     This option does not affect "decode" in any way - shared values and
186     references will always be decoded properly if present.
187    
188 root 1.11 $cbor = $cbor->allow_cycles ([$enable])
189     $enabled = $cbor->get_allow_cycles
190     If $enable is true (or missing), then "decode" will happily decode
191     self-referential (cyclic) data structures. By default these will not
192     be decoded, as they need manual cleanup to avoid memory leaks, so
193     code that isn't prepared for this will not leak memory.
194    
195     If $enable is false (the default), then "decode" will throw an error
196     when it encounters a self-referential/cyclic data structure.
197    
198 root 1.14 FUTURE DIRECTION: the motivation behind this option is to avoid
199     *real* cycles - future versions of this module might chose to decode
200     cyclic data structures using weak references when this option is
201     off, instead of throwing an error.
202    
203 root 1.11 This option does not affect "encode" in any way - shared values and
204 root 1.14 references will always be encoded properly if present.
205 root 1.11
206 root 1.18 $cbor = $cbor->forbid_objects ([$enable])
207     $enabled = $cbor->get_forbid_objects
208     Disables the use of the object serialiser protocol.
209    
210     If $enable is true (or missing), then "encode" will will throw an
211     exception when it encounters perl objects that would be encoded
212     using the perl-object tag (26). When "decode" encounters such tags,
213     it will fall back to the general filter/tagged logic as if this were
214     an unknown tag (by default resulting in a "CBOR::XC::Tagged"
215     object).
216    
217     If $enable is false (the default), then "encode" will use the
218     Types::Serialiser object serialisation protocol to serialise objects
219     into perl-object tags, and "decode" will do the same to decode such
220     tags.
221    
222     See "SECURITY CONSIDERATIONS", below, for more info on why
223     forbidding this protocol can be useful.
224    
225 root 1.10 $cbor = $cbor->pack_strings ([$enable])
226     $enabled = $cbor->get_pack_strings
227 root 1.9 If $enable is true (or missing), then "encode" will try not to
228     encode the same string twice, but will instead encode a reference to
229 root 1.10 the string instead. Depending on your data format, this can save a
230 root 1.9 lot of space, but also results in a very large runtime overhead
231     (expect encoding times to be 2-4 times as high as without).
232    
233     It is recommended to leave it off unless you know your
234     communications partner supports the stringref extension to CBOR
235 root 1.10 (<http://cbor.schmorp.de/stringref>), as without decoder support,
236     the resulting data structure might not be usable.
237 root 1.9
238 root 1.10 If $enable is false (the default), then "encode" will encode strings
239     the standard CBOR way.
240 root 1.9
241     This option does not affect "decode" in any way - string references
242     will always be decoded properly if present.
243    
244 root 1.17 $cbor = $cbor->text_keys ([$enable])
245     $enabled = $cbor->get_text_keys
246     If $enabled is true (or missing), then "encode" will encode all perl
247     hash keys as CBOR text strings/UTF-8 string, upgrading them as
248     needed.
249    
250     If $enable is false (the default), then "encode" will encode hash
251     keys normally - upgraded perl strings (strings internally encoded as
252     UTF-8) as CBOR text strings, and downgraded perl strings as CBOR
253     byte strings.
254    
255     This option does not affect "decode" in any way.
256    
257     This option is useful for interoperability with CBOR decoders that
258     don't treat byte strings as a form of text. It is especially useful
259     as Perl gives very little control over hash keys.
260    
261     Enabling this option can be slow, as all downgraded hash keys that
262     are encoded need to be scanned and converted to UTF-8.
263    
264     $cbor = $cbor->text_strings ([$enable])
265     $enabled = $cbor->get_text_strings
266     This option works similar to "text_keys", above, but works on all
267     strings (including hash keys), so "text_keys" has no further effect
268     after enabling "text_strings".
269    
270     If $enabled is true (or missing), then "encode" will encode all perl
271     strings as CBOR text strings/UTF-8 strings, upgrading them as
272     needed.
273    
274     If $enable is false (the default), then "encode" will encode strings
275     normally (but see "text_keys") - upgraded perl strings (strings
276     internally encoded as UTF-8) as CBOR text strings, and downgraded
277     perl strings as CBOR byte strings.
278    
279     This option does not affect "decode" in any way.
280    
281     This option has similar advantages and disadvantages as "text_keys".
282 root 1.19 In addition, this option effectively removes the ability to
283     automatically encode byte strings, which might break some "FREEZE"
284     and "TO_CBOR" methods that rely on this.
285    
286     A workaround is to use explicit type casts, which are unaffected by
287     this option.
288 root 1.17
289 root 1.12 $cbor = $cbor->validate_utf8 ([$enable])
290     $enabled = $cbor->get_validate_utf8
291     If $enable is true (or missing), then "decode" will validate that
292     elements (text strings) containing UTF-8 data in fact contain valid
293     UTF-8 data (instead of blindly accepting it). This validation
294     obviously takes extra time during decoding.
295    
296     The concept of "valid UTF-8" used is perl's concept, which is a
297     superset of the official UTF-8.
298    
299     If $enable is false (the default), then "decode" will blindly accept
300     UTF-8 data, marking them as valid UTF-8 in the resulting data
301 root 1.17 structure regardless of whether that's true or not.
302 root 1.12
303     Perl isn't too happy about corrupted UTF-8 in strings, but should
304     generally not crash or do similarly evil things. Extensions might be
305     not so forgiving, so it's recommended to turn on this setting if you
306     receive untrusted CBOR.
307    
308     This option does not affect "encode" in any way - strings that are
309     supposedly valid UTF-8 will simply be dumped into the resulting CBOR
310     string without checking whether that is, in fact, true or not.
311    
312 root 1.9 $cbor = $cbor->filter ([$cb->($tag, $value)])
313     $cb_or_undef = $cbor->get_filter
314     Sets or replaces the tagged value decoding filter (when $cb is
315     specified) or clears the filter (if no argument or "undef" is
316     provided).
317    
318     The filter callback is called only during decoding, when a
319     non-enforced tagged value has been decoded (see "TAG HANDLING AND
320     EXTENSIONS" for a list of enforced tags). For specific tags, it's
321     often better to provide a default converter using the
322     %CBOR::XS::FILTER hash (see below).
323    
324     The first argument is the numerical tag, the second is the (decoded)
325     value that has been tagged.
326    
327     The filter function should return either exactly one value, which
328     will replace the tagged value in the decoded data structure, or no
329     values, which will result in default handling, which currently means
330     the decoder creates a "CBOR::XS::Tagged" object to hold the tag and
331     the value.
332    
333     When the filter is cleared (the default state), the default filter
334     function, "CBOR::XS::default_filter", is used. This function simply
335     looks up the tag in the %CBOR::XS::FILTER hash. If an entry exists
336     it must be a code reference that is called with tag and value, and
337     is responsible for decoding the value. If no entry exists, it
338 root 1.18 returns no values. "CBOR::XS" provides a number of default filter
339     functions already, the the %CBOR::XS::FILTER hash can be freely
340     extended with more.
341    
342     "CBOR::XS" additionally provides an alternative filter function that
343     is supposed to be safe to use with untrusted data (which the default
344     filter might not), called "CBOR::XS::safe_filter", which works the
345     same as the "default_filter" but uses the %CBOR::XS::SAFE_FILTER
346     variable instead. It is prepopulated with the tag decoding functions
347     that are deemed safe (basically the same as %CBOR::XS::FILTER
348     without all the bignum tags), and can be extended by user code as
349     wlel, although, obviously, one should be very careful about adding
350     decoding functions here, since the expectation is that they are safe
351     to use on untrusted data, after all.
352 root 1.9
353     Example: decode all tags not handled internally into
354 root 1.10 "CBOR::XS::Tagged" objects, with no other special handling (useful
355 root 1.9 when working with potentially "unsafe" CBOR data).
356    
357     CBOR::XS->new->filter (sub { })->decode ($cbor_data);
358    
359     Example: provide a global filter for tag 1347375694, converting the
360     value into some string form.
361    
362     $CBOR::XS::FILTER{1347375694} = sub {
363     my ($tag, $value);
364    
365     "tag 1347375694 value $value"
366     };
367    
368 root 1.18 Example: provide your own filter function that looks up tags in your
369     own hash:
370    
371     my %my_filter = (
372     998347484 => sub {
373     my ($tag, $value);
374    
375     "tag 998347484 value $value"
376     };
377     );
378    
379     my $coder = CBOR::XS->new->filter (sub {
380     &{ $my_filter{$_[0]} or return }
381     });
382    
383     Example: use the safe filter function (see "SECURITY CONSIDERATIONS"
384     for more considerations on security).
385    
386     CBOR::XS->new->filter (\&CBOR::XS::safe_filter)->decode ($cbor_data);
387    
388 root 1.2 $cbor_data = $cbor->encode ($perl_scalar)
389     Converts the given Perl data structure (a scalar value) to its CBOR
390     representation.
391    
392     $perl_scalar = $cbor->decode ($cbor_data)
393     The opposite of "encode": expects CBOR data and tries to parse it,
394     returning the resulting simple scalar or reference. Croaks on error.
395    
396     ($perl_scalar, $octets) = $cbor->decode_prefix ($cbor_data)
397     This works like the "decode" method, but instead of raising an
398     exception when there is trailing garbage after the CBOR string, it
399     will silently stop parsing there and return the number of characters
400     consumed so far.
401    
402     This is useful if your CBOR texts are not delimited by an outer
403     protocol and you need to know where the first CBOR string ends amd
404 root 1.19 the next one starts - CBOR strings are self-delimited, so it is
405     possible to concatenate CBOR strings without any delimiters or size
406     fields and recover their data.
407 root 1.2
408     CBOR::XS->new->decode_prefix ("......")
409     => ("...", 3)
410    
411 root 1.13 INCREMENTAL PARSING
412     In some cases, there is the need for incremental parsing of JSON texts.
413     While this module always has to keep both CBOR text and resulting Perl
414     data structure in memory at one time, it does allow you to parse a CBOR
415     stream incrementally, using a similar to using "decode_prefix" to see if
416     a full CBOR object is available, but is much more efficient.
417    
418     It basically works by parsing as much of a CBOR string as possible - if
419     the CBOR data is not complete yet, the pasrer will remember where it
420     was, to be able to restart when more data has been accumulated. Once
421     enough data is available to either decode a complete CBOR value or raise
422     an error, a real decode will be attempted.
423    
424     A typical use case would be a network protocol that consists of sending
425     and receiving CBOR-encoded messages. The solution that works with CBOR
426     and about anything else is by prepending a length to every CBOR value,
427     so the receiver knows how many octets to read. More compact (and
428     slightly slower) would be to just send CBOR values back-to-back, as
429     "CBOR::XS" knows where a CBOR value ends, and doesn't need an explicit
430     length.
431    
432     The following methods help with this:
433    
434     @decoded = $cbor->incr_parse ($buffer)
435     This method attempts to decode exactly one CBOR value from the
436     beginning of the given $buffer. The value is removed from the
437     $buffer on success. When $buffer doesn't contain a complete value
438     yet, it returns nothing. Finally, when the $buffer doesn't start
439     with something that could ever be a valid CBOR value, it raises an
440     exception, just as "decode" would. In the latter case the decoder
441     state is undefined and must be reset before being able to parse
442     further.
443    
444     This method modifies the $buffer in place. When no CBOR value can be
445     decoded, the decoder stores the current string offset. On the next
446     call, continues decoding at the place where it stopped before. For
447     this to make sense, the $buffer must begin with the same octets as
448     on previous unsuccessful calls.
449    
450     You can call this method in scalar context, in which case it either
451     returns a decoded value or "undef". This makes it impossible to
452     distinguish between CBOR null values (which decode to "undef") and
453     an unsuccessful decode, which is often acceptable.
454    
455     @decoded = $cbor->incr_parse_multiple ($buffer)
456     Same as "incr_parse", but attempts to decode as many CBOR values as
457     possible in one go, instead of at most one. Calls to "incr_parse"
458     and "incr_parse_multiple" can be interleaved.
459    
460     $cbor->incr_reset
461     Resets the incremental decoder. This throws away any saved state, so
462     that subsequent calls to "incr_parse" or "incr_parse_multiple" start
463     to parse a new CBOR value from the beginning of the $buffer again.
464    
465 root 1.18 This method can be called at any time, but it *must* be called if
466     you want to change your $buffer or there was a decoding error and
467     you want to reuse the $cbor object for future incremental parsings.
468 root 1.13
469 root 1.2 MAPPING
470     This section describes how CBOR::XS maps Perl values to CBOR values and
471     vice versa. These mappings are designed to "do the right thing" in most
472     circumstances automatically, preserving round-tripping characteristics
473     (what you put in comes out as something equivalent).
474    
475     For the more enlightened: note that in the following descriptions,
476     lowercase *perl* refers to the Perl interpreter, while uppercase *Perl*
477     refers to the abstract Perl language itself.
478    
479     CBOR -> PERL
480 root 1.4 integers
481     CBOR integers become (numeric) perl scalars. On perls without 64 bit
482     support, 64 bit integers will be truncated or otherwise corrupted.
483    
484     byte strings
485 root 1.10 Byte strings will become octet strings in Perl (the Byte values
486 root 1.4 0..255 will simply become characters of the same value in Perl).
487    
488     UTF-8 strings
489     UTF-8 strings in CBOR will be decoded, i.e. the UTF-8 octets will be
490     decoded into proper Unicode code points. At the moment, the validity
491     of the UTF-8 octets will not be validated - corrupt input will
492     result in corrupted Perl strings.
493    
494     arrays, maps
495     CBOR arrays and CBOR maps will be converted into references to a
496     Perl array or hash, respectively. The keys of the map will be
497     stringified during this process.
498    
499 root 1.5 null
500     CBOR null becomes "undef" in Perl.
501    
502     true, false, undefined
503     These CBOR values become "Types:Serialiser::true",
504     "Types:Serialiser::false" and "Types::Serialiser::error",
505 root 1.2 respectively. They are overloaded to act almost exactly like the
506 root 1.5 numbers 1 and 0 (for true and false) or to throw an exception on
507     access (for error). See the Types::Serialiser manpage for details.
508    
509 root 1.9 tagged values
510     Tagged items consists of a numeric tag and another CBOR value.
511 root 1.2
512 root 1.9 See "TAG HANDLING AND EXTENSIONS" and the description of "->filter"
513 root 1.10 for details on which tags are handled how.
514 root 1.4
515     anything else
516     Anything else (e.g. unsupported simple values) will raise a decoding
517     error.
518 root 1.2
519     PERL -> CBOR
520     The mapping from Perl to CBOR is slightly more difficult, as Perl is a
521 root 1.10 typeless language. That means this module can only guess which CBOR type
522     is meant by a perl value.
523 root 1.2
524     hash references
525     Perl hash references become CBOR maps. As there is no inherent
526     ordering in hash keys (or CBOR maps), they will usually be encoded
527 root 1.10 in a pseudo-random order. This order can be different each time a
528 root 1.17 hash is encoded.
529 root 1.2
530 root 1.4 Currently, tied hashes will use the indefinite-length format, while
531     normal hashes will use the fixed-length format.
532    
533 root 1.2 array references
534 root 1.4 Perl array references become fixed-length CBOR arrays.
535 root 1.2
536     other references
537 root 1.10 Other unblessed references will be represented using the indirection
538     tag extension (tag value 22098,
539     <http://cbor.schmorp.de/indirection>). CBOR decoders are guaranteed
540     to be able to decode these values somehow, by either "doing the
541     right thing", decoding into a generic tagged object, simply ignoring
542     the tag, or something else.
543 root 1.4
544     CBOR::XS::Tagged objects
545     Objects of this type must be arrays consisting of a single "[tag,
546     value]" pair. The (numerical) tag will be encoded as a CBOR tag, the
547 root 1.10 value will be encoded as appropriate for the value. You must use
548 root 1.7 "CBOR::XS::tag" to create such objects.
549 root 1.2
550 root 1.5 Types::Serialiser::true, Types::Serialiser::false,
551     Types::Serialiser::error
552     These special values become CBOR true, CBOR false and CBOR undefined
553     values, respectively. You can also use "\1", "\0" and "\undef"
554     directly if you want.
555    
556     other blessed objects
557     Other blessed objects are serialised via "TO_CBOR" or "FREEZE". See
558 root 1.9 "TAG HANDLING AND EXTENSIONS" for specific classes handled by this
559     module, and "OBJECT SERIALISATION" for generic object serialisation.
560 root 1.2
561     simple scalars
562 root 1.9 Simple Perl scalars (any scalar that is not a reference) are the
563     most difficult objects to encode: CBOR::XS will encode undefined
564 root 1.4 scalars as CBOR null values, scalars that have last been used in a
565 root 1.2 string context before encoding as CBOR strings, and anything else as
566     number value:
567    
568     # dump as number
569     encode_cbor [2] # yields [2]
570     encode_cbor [-3.0e17] # yields [-3e+17]
571     my $value = 5; encode_cbor [$value] # yields [5]
572    
573 root 1.10 # used as string, so dump as string (either byte or text)
574 root 1.2 print $value;
575     encode_cbor [$value] # yields ["5"]
576    
577     # undef becomes null
578     encode_cbor [undef] # yields [null]
579    
580     You can force the type to be a CBOR string by stringifying it:
581    
582     my $x = 3.1; # some variable containing a number
583     "$x"; # stringified
584     $x .= ""; # another, more awkward way to stringify
585     print $x; # perl does it for you, too, quite often
586    
587 root 1.17 You can force whether a string is encoded as byte or text string by
588     using "utf8::upgrade" and "utf8::downgrade" (if "text_strings" is
589 root 1.19 disabled).
590 root 1.10
591     utf8::upgrade $x; # encode $x as text string
592     utf8::downgrade $x; # encode $x as byte string
593    
594 root 1.19 More options are available, see "TYPE CASTS", below, and the
595     "text_keys" and "text_strings" options.
596    
597 root 1.10 Perl doesn't define what operations up- and downgrade strings, so if
598     the difference between byte and text is important, you should up- or
599 root 1.17 downgrade your string as late as possible before encoding. You can
600     also force the use of CBOR text strings by using "text_keys" or
601     "text_strings".
602 root 1.10
603 root 1.2 You can force the type to be a CBOR number by numifying it:
604    
605     my $x = "3"; # some variable containing a string
606     $x += 0; # numify it, ensuring it will be dumped as a number
607     $x *= 1; # same thing, the choice is yours.
608    
609     You can not currently force the type in other, less obscure, ways.
610     Tell me if you need this capability (but don't forget to explain why
611     it's needed :).
612    
613 root 1.4 Perl values that seem to be integers generally use the shortest
614     possible representation. Floating-point values will use either the
615     IEEE single format if possible without loss of precision, otherwise
616     the IEEE double format will be used. Perls that use formats other
617     than IEEE double to represent numerical values are supported, but
618     might suffer loss of precision.
619 root 1.2
620 root 1.19 TYPE CASTS
621     EXPERIMENTAL: As an experimental extension, "CBOR::XS" allows you to
622 root 1.22 force specific CBOR types to be used when encoding. That allows you to
623 root 1.19 encode types not normally accessible (e.g. half floats) as well as force
624     string types even when "text_strings" is in effect.
625    
626     Type forcing is done by calling a special "cast" function which keeps a
627     copy of the value and returns a new value that can be handed over to any
628     CBOR encoder function.
629    
630     The following casts are currently available (all of which are unary
631 root 1.22 operators, that is, have a prototype of "$"):
632 root 1.19
633     CBOR::XS::as_int $value
634     Forces the value to be encoded as some form of (basic, not bignum)
635     integer type.
636    
637     CBOR::XS::as_text $value
638     Forces the value to be encoded as (UTF-8) text values.
639    
640     CBOR::XS::as_bytes $value
641     Forces the value to be encoded as a (binary) string value.
642    
643 root 1.21 Example: encode a perl string as binary even though "text_strings"
644     is in effect.
645    
646     CBOR::XS->new->text_strings->encode ([4, "text", CBOR::XS::bytes "bytevalue"]);
647    
648 root 1.20 CBOR::XS::as_bool $value
649     Converts a Perl boolean (which can be any kind of scalar) into a
650     CBOR boolean. Strictly the same, but shorter to write, than:
651    
652     $value ? Types::Serialiser::true : Types::Serialiser::false
653    
654 root 1.19 CBOR::XS::as_float16 $value
655     Forces half-float (IEEE 754 binary16) encoding of the given value.
656    
657     CBOR::XS::as_float32 $value
658     Forces single-float (IEEE 754 binary32) encoding of the given value.
659    
660     CBOR::XS::as_float64 $value
661     Forces double-float (IEEE 754 binary64) encoding of the given value.
662    
663 root 1.21 CBOR::XS::as_cbor $cbor_text
664 root 1.22 Not a type cast per-se, this type cast forces the argument to be
665 root 1.19 encoded as-is. This can be used to embed pre-encoded CBOR data.
666    
667     Note that no checking on the validity of the $cbor_text is done -
668     it's the callers responsibility to correctly encode values.
669    
670 root 1.21 CBOR::XS::as_map [key => value...]
671     Treat the array reference as key value pairs and output a CBOR map.
672     This allows you to generate CBOR maps with arbitrary key types (or,
673 root 1.22 if you don't care about semantics, duplicate keys or pairs in a
674 root 1.21 custom order), which is otherwise hard to do with Perl.
675    
676     The single argument must be an array reference with an even number
677     of elements.
678    
679 root 1.22 Note that only the reference to the array is copied, the array
680     itself is not. Modifications done to the array before calling an
681     encoding function will be reflected in the encoded output.
682    
683 root 1.21 Example: encode a CBOR map with a string and an integer as keys.
684 root 1.19
685 root 1.21 encode_cbor CBOR::XS::as_map [string => "value", 5 => "value"]
686 root 1.19
687 root 1.5 OBJECT SERIALISATION
688 root 1.11 This module implements both a CBOR-specific and the generic
689     Types::Serialier object serialisation protocol. The following
690     subsections explain both methods.
691    
692     ENCODING
693 root 1.5 This module knows two way to serialise a Perl object: The CBOR-specific
694     way, and the generic way.
695    
696 root 1.11 Whenever the encoder encounters a Perl object that it cannot serialise
697 root 1.5 directly (most of them), it will first look up the "TO_CBOR" method on
698     it.
699    
700     If it has a "TO_CBOR" method, it will call it with the object as only
701     argument, and expects exactly one return value, which it will then
702     substitute and encode it in the place of the object.
703    
704     Otherwise, it will look up the "FREEZE" method. If it exists, it will
705     call it with the object as first argument, and the constant string
706     "CBOR" as the second argument, to distinguish it from other serialisers.
707    
708     The "FREEZE" method can return any number of values (i.e. zero or more).
709     These will be encoded as CBOR perl object, together with the classname.
710    
711 root 1.11 These methods *MUST NOT* change the data structure that is being
712     serialised. Failure to comply to this can result in memory corruption -
713     and worse.
714    
715 root 1.5 If an object supports neither "TO_CBOR" nor "FREEZE", encoding will fail
716     with an error.
717    
718 root 1.11 DECODING
719     Objects encoded via "TO_CBOR" cannot (normally) be automatically
720     decoded, but objects encoded via "FREEZE" can be decoded using the
721     following protocol:
722 root 1.5
723     When an encoded CBOR perl object is encountered by the decoder, it will
724     look up the "THAW" method, by using the stored classname, and will fail
725     if the method cannot be found.
726    
727     After the lookup it will call the "THAW" method with the stored
728     classname as first argument, the constant string "CBOR" as second
729     argument, and all values returned by "FREEZE" as remaining arguments.
730    
731     EXAMPLES
732     Here is an example "TO_CBOR" method:
733    
734     sub My::Object::TO_CBOR {
735     my ($obj) = @_;
736    
737     ["this is a serialised My::Object object", $obj->{id}]
738     }
739    
740     When a "My::Object" is encoded to CBOR, it will instead encode a simple
741     array with two members: a string, and the "object id". Decoding this
742     CBOR string will yield a normal perl array reference in place of the
743     object.
744    
745     A more useful and practical example would be a serialisation method for
746     the URI module. CBOR has a custom tag value for URIs, namely 32:
747    
748     sub URI::TO_CBOR {
749     my ($self) = @_;
750     my $uri = "$self"; # stringify uri
751     utf8::upgrade $uri; # make sure it will be encoded as UTF-8 string
752 root 1.10 CBOR::XS::tag 32, "$_[0]"
753 root 1.5 }
754    
755     This will encode URIs as a UTF-8 string with tag 32, which indicates an
756     URI.
757    
758     Decoding such an URI will not (currently) give you an URI object, but
759     instead a CBOR::XS::Tagged object with tag number 32 and the string -
760     exactly what was returned by "TO_CBOR".
761    
762     To serialise an object so it can automatically be deserialised, you need
763     to use "FREEZE" and "THAW". To take the URI module as example, this
764     would be a possible implementation:
765    
766     sub URI::FREEZE {
767     my ($self, $serialiser) = @_;
768     "$self" # encode url string
769     }
770    
771     sub URI::THAW {
772     my ($class, $serialiser, $uri) = @_;
773     $class->new ($uri)
774     }
775    
776     Unlike "TO_CBOR", multiple values can be returned by "FREEZE". For
777     example, a "FREEZE" method that returns "type", "id" and "variant"
778     values would cause an invocation of "THAW" with 5 arguments:
779    
780     sub My::Object::FREEZE {
781     my ($self, $serialiser) = @_;
782    
783     ($self->{type}, $self->{id}, $self->{variant})
784     }
785    
786     sub My::Object::THAW {
787     my ($class, $serialiser, $type, $id, $variant) = @_;
788    
789     $class-<new (type => $type, id => $id, variant => $variant)
790     }
791    
792     MAGIC HEADER
793 root 1.3 There is no way to distinguish CBOR from other formats programmatically.
794     To make it easier to distinguish CBOR from other formats, the CBOR
795     specification has a special "magic string" that can be prepended to any
796 root 1.9 CBOR string without changing its meaning.
797 root 1.3
798     This string is available as $CBOR::XS::MAGIC. This module does not
799 root 1.9 prepend this string to the CBOR data it generates, but it will ignore it
800 root 1.3 if present, so users can prepend this string as a "file type" indicator
801     as required.
802    
803 root 1.7 THE CBOR::XS::Tagged CLASS
804     CBOR has the concept of tagged values - any CBOR value can be tagged
805     with a numeric 64 bit number, which are centrally administered.
806    
807     "CBOR::XS" handles a few tags internally when en- or decoding. You can
808     also create tags yourself by encoding "CBOR::XS::Tagged" objects, and
809     the decoder will create "CBOR::XS::Tagged" objects itself when it hits
810     an unknown tag.
811    
812     These objects are simply blessed array references - the first member of
813     the array being the numerical tag, the second being the value.
814    
815     You can interact with "CBOR::XS::Tagged" objects in the following ways:
816    
817     $tagged = CBOR::XS::tag $tag, $value
818     This function(!) creates a new "CBOR::XS::Tagged" object using the
819     given $tag (0..2**64-1) to tag the given $value (which can be any
820     Perl value that can be encoded in CBOR, including serialisable Perl
821     objects and "CBOR::XS::Tagged" objects).
822    
823     $tagged->[0]
824     $tagged->[0] = $new_tag
825     $tag = $tagged->tag
826     $new_tag = $tagged->tag ($new_tag)
827     Access/mutate the tag.
828    
829     $tagged->[1]
830     $tagged->[1] = $new_value
831     $value = $tagged->value
832     $new_value = $tagged->value ($new_value)
833     Access/mutate the tagged value.
834    
835     EXAMPLES
836     Here are some examples of "CBOR::XS::Tagged" uses to tag objects.
837    
838     You can look up CBOR tag value and emanings in the IANA registry at
839     <http://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml>.
840    
841     Prepend a magic header ($CBOR::XS::MAGIC):
842    
843     my $cbor = encode_cbor CBOR::XS::tag 55799, $value;
844     # same as:
845     my $cbor = $CBOR::XS::MAGIC . encode_cbor $value;
846    
847     Serialise some URIs and a regex in an array:
848    
849     my $cbor = encode_cbor [
850     (CBOR::XS::tag 32, "http://www.nethype.de/"),
851     (CBOR::XS::tag 32, "http://software.schmorp.de/"),
852     (CBOR::XS::tag 35, "^[Pp][Ee][Rr][lL]\$"),
853     ];
854    
855     Wrap CBOR data in CBOR:
856    
857     my $cbor_cbor = encode_cbor
858     CBOR::XS::tag 24,
859     encode_cbor [1, 2, 3];
860    
861 root 1.9 TAG HANDLING AND EXTENSIONS
862     This section describes how this module handles specific tagged values
863     and extensions. If a tag is not mentioned here and no additional filters
864     are provided for it, then the default handling applies (creating a
865     CBOR::XS::Tagged object on decoding, and only encoding the tag when
866     explicitly requested).
867    
868     Tags not handled specifically are currently converted into a
869     CBOR::XS::Tagged object, which is simply a blessed array reference
870     consisting of the numeric tag value followed by the (decoded) CBOR
871     value.
872    
873     Future versions of this module reserve the right to special case
874     additional tags (such as base64url).
875    
876     ENFORCED TAGS
877     These tags are always handled when decoding, and their handling cannot
878 root 1.17 be overridden by the user.
879 root 1.9
880 root 1.10 26 (perl-object, <http://cbor.schmorp.de/perl-object>)
881 root 1.9 These tags are automatically created (and decoded) for serialisable
882     objects using the "FREEZE/THAW" methods (the Types::Serialier object
883     serialisation protocol). See "OBJECT SERIALISATION" for details.
884    
885 root 1.16 28, 29 (shareable, sharedref, <http://cbor.schmorp.de/value-sharing>)
886 root 1.11 These tags are automatically decoded when encountered (and they do
887     not result in a cyclic data structure, see "allow_cycles"),
888     resulting in shared values in the decoded object. They are only
889     encoded, however, when "allow_sharing" is enabled.
890    
891     Not all shared values can be successfully decoded: values that
892     reference themselves will *currently* decode as "undef" (this is not
893     the same as a reference pointing to itself, which will be
894     represented as a value that contains an indirect reference to itself
895     - these will be decoded properly).
896    
897     Note that considerably more shared value data structures can be
898     decoded than will be encoded - currently, only values pointed to by
899     references will be shared, others will not. While non-reference
900     shared values can be generated in Perl with some effort, they were
901     considered too unimportant to be supported in the encoder. The
902     decoder, however, will decode these values as shared values.
903 root 1.9
904 root 1.16 256, 25 (stringref-namespace, stringref,
905 root 1.9 <http://cbor.schmorp.de/stringref>)
906     These tags are automatically decoded when encountered. They are only
907 root 1.10 encoded, however, when "pack_strings" is enabled.
908 root 1.9
909     22098 (indirection, <http://cbor.schmorp.de/indirection>)
910     This tag is automatically generated when a reference are encountered
911 root 1.17 (with the exception of hash and array references). It is converted
912     to a reference when decoding.
913 root 1.9
914     55799 (self-describe CBOR, RFC 7049)
915     This value is not generated on encoding (unless explicitly requested
916     by the user), and is simply ignored when decoding.
917    
918     NON-ENFORCED TAGS
919     These tags have default filters provided when decoding. Their handling
920 root 1.17 can be overridden by changing the %CBOR::XS::FILTER entry for the tag,
921     or by providing a custom "filter" callback when decoding.
922 root 1.9
923     When they result in decoding into a specific Perl class, the module
924     usually provides a corresponding "TO_CBOR" method as well.
925    
926     When any of these need to load additional modules that are not part of
927     the perl core distribution (e.g. URI), it is (currently) up to the user
928     to provide these modules. The decoding usually fails with an exception
929     if the required module cannot be loaded.
930    
931 root 1.12 0, 1 (date/time string, seconds since the epoch)
932     These tags are decoded into Time::Piece objects. The corresponding
933     "Time::Piece::TO_CBOR" method always encodes into tag 1 values
934     currently.
935    
936     The Time::Piece API is generally surprisingly bad, and fractional
937     seconds are only accidentally kept intact, so watch out. On the plus
938     side, the module comes with perl since 5.10, which has to count for
939     something.
940    
941 root 1.9 2, 3 (positive/negative bignum)
942     These tags are decoded into Math::BigInt objects. The corresponding
943     "Math::BigInt::TO_CBOR" method encodes "small" bigints into normal
944     CBOR integers, and others into positive/negative CBOR bignums.
945    
946 root 1.17 4, 5, 264, 265 (decimal fraction/bigfloat)
947 root 1.9 Both decimal fractions and bigfloats are decoded into Math::BigFloat
948     objects. The corresponding "Math::BigFloat::TO_CBOR" method *always*
949 root 1.17 encodes into a decimal fraction (either tag 4 or 264).
950    
951     NaN and infinities are not encoded properly, as they cannot be
952     represented in CBOR.
953 root 1.9
954 root 1.17 See "BIGNUM SECURITY CONSIDERATIONS" for more info.
955 root 1.9
956 root 1.17 30 (rational numbers)
957     These tags are decoded into Math::BigRat objects. The corresponding
958     "Math::BigRat::TO_CBOR" method encodes rational numbers with
959     denominator 1 via their numerator only, i.e., they become normal
960     integers or "bignums".
961    
962     See "BIGNUM SECURITY CONSIDERATIONS" for more info.
963 root 1.9
964     21, 22, 23 (expected later JSON conversion)
965     CBOR::XS is not a CBOR-to-JSON converter, and will simply ignore
966     these tags.
967    
968     32 (URI)
969     These objects decode into URI objects. The corresponding
970     "URI::TO_CBOR" method again results in a CBOR URI value.
971    
972 root 1.5 CBOR and JSON
973 root 1.4 CBOR is supposed to implement a superset of the JSON data model, and is,
974     with some coercion, able to represent all JSON texts (something that
975     other "binary JSON" formats such as BSON generally do not support).
976    
977     CBOR implements some extra hints and support for JSON interoperability,
978     and the spec offers further guidance for conversion between CBOR and
979     JSON. None of this is currently implemented in CBOR, and the guidelines
980     in the spec do not result in correct round-tripping of data. If JSON
981     interoperability is improved in the future, then the goal will be to
982     ensure that decoded JSON data will round-trip encoding and decoding to
983     CBOR intact.
984 root 1.2
985     SECURITY CONSIDERATIONS
986 root 1.18 Tl;dr... if you want to decode or encode CBOR from untrusted sources,
987 root 1.19 you should start with a coder object created via "new_safe" (which
988     implements the mitigations explained below):
989 root 1.18
990     my $coder = CBOR::XS->new_safe;
991    
992     my $data = $coder->decode ($cbor_text);
993     my $cbor = $coder->encode ($data);
994 root 1.2
995 root 1.18 Longer version: When you are using CBOR in a protocol, talking to
996     untrusted potentially hostile creatures requires some thought:
997    
998     Security of the CBOR decoder itself
999     First and foremost, your CBOR decoder should be secure, that is,
1000     should not have any buffer overflows or similar bugs that could
1001     potentially be exploited. Obviously, this module should ensure that
1002     and I am trying hard on making that true, but you never know.
1003    
1004     CBOR::XS can invoke almost arbitrary callbacks during decoding
1005     CBOR::XS supports object serialisation - decoding CBOR can cause
1006     calls to *any* "THAW" method in *any* package that exists in your
1007     process (that is, CBOR::XS will not try to load modules, but any
1008     existing "THAW" method or function can be called, so they all have
1009     to be secure).
1010    
1011     Less obviously, it will also invoke "TO_CBOR" and "FREEZE" methods -
1012     even if all your "THAW" methods are secure, encoding data structures
1013     from untrusted sources can invoke those and trigger bugs in those.
1014    
1015     So, if you are not sure about the security of all the modules you
1016     have loaded (you shouldn't), you should disable this part using
1017 root 1.19 "forbid_objects" or using "new_safe".
1018 root 1.18
1019     CBOR can be extended with tags that call library code
1020     CBOR can be extended with tags, and "CBOR::XS" has a registry of
1021     conversion functions for many existing tags that can be extended via
1022     third-party modules (see the "filter" method).
1023    
1024     If you don't trust these, you should configure the "safe" filter
1025 root 1.19 function, "CBOR::XS::safe_filter" ("new_safe" does this), which by
1026     default only includes conversion functions that are considered
1027     "safe" by the author (but again, they can be extended by third party
1028     modules).
1029 root 1.18
1030     Depending on your level of paranoia, you can use the "safe" filter:
1031    
1032     $cbor->filter (\&CBOR::XS::safe_filter);
1033    
1034     ... your own filter...
1035    
1036     $cbor->filter (sub { ... do your stuffs here ... });
1037    
1038     ... or even no filter at all, disabling all tag decoding:
1039    
1040     $cbor->filter (sub { });
1041    
1042     This is never a problem for encoding, as the tag mechanism only
1043     exists in CBOR texts.
1044    
1045     Resource-starving attacks: object memory usage
1046     You need to avoid resource-starving attacks. That means you should
1047     limit the size of CBOR data you accept, or make sure then when your
1048     resources run out, that's just fine (e.g. by using a separate
1049     process that can crash safely). The size of a CBOR string in octets
1050     is usually a good indication of the size of the resources required
1051     to decode it into a Perl structure. While CBOR::XS can check the
1052 root 1.19 size of the CBOR text (using "max_size" - done by "new_safe"), it
1053     might be too late when you already have it in memory, so you might
1054     want to check the size before you accept the string.
1055 root 1.18
1056     As for encoding, it is possible to construct data structures that
1057     are relatively small but result in large CBOR texts (for example by
1058     having an array full of references to the same big data structure,
1059     which will all be deep-cloned during encoding by default). This is
1060     rarely an actual issue (and the worst case is still just running out
1061     of memory), but you can reduce this risk by using "allow_sharing".
1062    
1063     Resource-starving attacks: stack overflows
1064     CBOR::XS recurses using the C stack when decoding objects and
1065     arrays. The C stack is a limited resource: for instance, on my amd64
1066     machine with 8MB of stack size I can decode around 180k nested
1067     arrays but only 14k nested CBOR objects (due to perl itself
1068     recursing deeply on croak to free the temporary). If that is
1069     exceeded, the program crashes. To be conservative, the default
1070     nesting limit is set to 512. If your process has a smaller stack,
1071     you should adjust this setting accordingly with the "max_depth"
1072     method.
1073    
1074     Resource-starving attacks: CPU en-/decoding complexity
1075     CBOR::XS will use the Math::BigInt, Math::BigFloat and Math::BigRat
1076     libraries to represent encode/decode bignums. These can be very slow
1077     (as in, centuries of CPU time) and can even crash your program (and
1078 root 1.19 are generally not very trustworthy). See the next section on bignum
1079     security for details.
1080 root 1.18
1081     Data breaches: leaking information in error messages
1082     CBOR::XS might leak contents of your Perl data structures in its
1083     error messages, so when you serialise sensitive information you
1084     might want to make sure that exceptions thrown by CBOR::XS will not
1085     end up in front of untrusted eyes.
1086    
1087     Something else...
1088     Something else could bomb you, too, that I forgot to think of. In
1089     that case, you get to keep the pieces. I am always open for hints,
1090     though...
1091 root 1.2
1092 root 1.17 BIGNUM SECURITY CONSIDERATIONS
1093     CBOR::XS provides a "TO_CBOR" method for both Math::BigInt and
1094     Math::BigFloat that tries to encode the number in the simplest possible
1095     way, that is, either a CBOR integer, a CBOR bigint/decimal fraction (tag
1096     4) or an arbitrary-exponent decimal fraction (tag 264). Rational numbers
1097     (Math::BigRat, tag 30) can also contain bignums as members.
1098    
1099     CBOR::XS will also understand base-2 bigfloat or arbitrary-exponent
1100     bigfloats (tags 5 and 265), but it will never generate these on its own.
1101    
1102     Using the built-in Math::BigInt::Calc support, encoding and decoding
1103     decimal fractions is generally fast. Decoding bigints can be slow for
1104     very big numbers (tens of thousands of digits, something that could
1105     potentially be caught by limiting the size of CBOR texts), and decoding
1106     bigfloats or arbitrary-exponent bigfloats can be *extremely* slow
1107     (minutes, decades) for large exponents (roughly 40 bit and longer).
1108    
1109     Additionally, Math::BigInt can take advantage of other bignum libraries,
1110     such as Math::GMP, which cannot handle big floats with large exponents,
1111     and might simply abort or crash your program, due to their code quality.
1112    
1113     This can be a concern if you want to parse untrusted CBOR. If it is, you
1114     might want to disable decoding of tag 2 (bigint) and 3 (negative bigint)
1115     types. You should also disable types 5 and 265, as these can be slow
1116     even without bigints.
1117    
1118     Disabling bigints will also partially or fully disable types that rely
1119     on them, e.g. rational numbers that use bignums.
1120    
1121 root 1.2 CBOR IMPLEMENTATION NOTES
1122     This section contains some random implementation notes. They do not
1123     describe guaranteed behaviour, but merely behaviour as-is implemented
1124     right now.
1125    
1126     64 bit integers are only properly decoded when Perl was built with 64
1127     bit support.
1128    
1129     Strings and arrays are encoded with a definite length. Hashes as well,
1130     unless they are tied (or otherwise magical).
1131    
1132     Only the double data type is supported for NV data types - when Perl
1133     uses long double to represent floating point values, they might not be
1134     encoded properly. Half precision types are accepted, but not encoded.
1135    
1136     Strict mode and canonical mode are not implemented.
1137    
1138 root 1.11 LIMITATIONS ON PERLS WITHOUT 64-BIT INTEGER SUPPORT
1139     On perls that were built without 64 bit integer support (these are rare
1140 root 1.15 nowadays, even on 32 bit architectures, as all major Perl distributions
1141     are built with 64 bit integer support), support for any kind of 64 bit
1142 root 1.19 value in CBOR is very limited - most likely, these 64 bit values will be
1143     truncated, corrupted, or otherwise not decoded correctly. This also
1144     includes string, float, array and map sizes that are stored as 64 bit
1145     integers.
1146 root 1.11
1147 root 1.2 THREADS
1148     This module is *not* guaranteed to be thread safe and there are no plans
1149     to change this until Perl gets thread support (as opposed to the
1150     horribly slow so-called "threads" which are simply slow and bloated
1151     process simulations - use fork, it's *much* faster, cheaper, better).
1152    
1153     (It might actually work, but you have been warned).
1154    
1155     BUGS
1156     While the goal of this module is to be correct, that unfortunately does
1157     not mean it's bug-free, only that I think its design is bug-free. If you
1158     keep reporting bugs they will be fixed swiftly, though.
1159    
1160     Please refrain from using rt.cpan.org or any other bug reporting
1161     service. I put the contact address into my modules for a reason.
1162    
1163     SEE ALSO
1164     The JSON and JSON::XS modules that do similar, but human-readable,
1165     serialisation.
1166    
1167 root 1.5 The Types::Serialiser module provides the data model for true, false and
1168     error values.
1169    
1170 root 1.2 AUTHOR
1171     Marc Lehmann <schmorp@schmorp.de>
1172     http://home.schmorp.de/
1173