cbor-deterministic 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/cbor-deterministic.gemspec +17 -0
- data/lib/cbor-deterministic.rb +44 -0
- data/test/test-deterministic.rb +22 -0
- metadata +47 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e8bab53925e925691a37509249a3119bb19b1b25fef664a69e307ab83e7a81c1
|
4
|
+
data.tar.gz: 9602e855db2ebafb94171595ad5c3108595723968f01d9c1a7a8bae4145ea2a4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: af750d061c49f527ba24f830e44cf300c18a2bf35ef2516bec3d87ed051dfebe5ca17b4a6adcad5b106c4f2e97ae7a357a6b8fc00fc335fea201ebde1d3cabf8
|
7
|
+
data.tar.gz: 6f2d971e10ff3b275d416f715e0c337c1a11c3a172f15e6f218a7fa41ba67b6d0cfe86431b75b45297ebfc8c3854bd7a957ff5581120409e65427bb78004817c
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "cbor-deterministic"
|
3
|
+
s.version = "0.1.2"
|
4
|
+
s.summary = "CBOR (Concise Binary Object Representation) deterministic encoding"
|
5
|
+
s.description = %q{cbor-deterministic implements deterministic encoding for CBOR, RFC 8949 Section 4.2}
|
6
|
+
s.author = "Carsten Bormann"
|
7
|
+
s.email = "cabo@tzi.org"
|
8
|
+
s.license = "Apache-2.0"
|
9
|
+
s.homepage = "http://cbor.io/"
|
10
|
+
s.has_rdoc = false
|
11
|
+
s.test_files = Dir['test/**/*.rb']
|
12
|
+
s.files = Dir['lib/**/*.rb'] + %w(cbor-deterministic.gemspec) + Dir['bin/**/*.rb']
|
13
|
+
s.executables = Dir['bin/**/*.rb'].map {|x| File.basename(x)}
|
14
|
+
s.required_ruby_version = '>= 1.9.2'
|
15
|
+
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require "cbor" unless defined? CBOR
|
4
|
+
|
5
|
+
module CBOR
|
6
|
+
module Deterministic
|
7
|
+
|
8
|
+
module Object_Deterministic_CBOR
|
9
|
+
def cbor_prepare_deterministic
|
10
|
+
self
|
11
|
+
end
|
12
|
+
def to_deterministic_cbor
|
13
|
+
cbor_prepare_deterministic.to_cbor
|
14
|
+
end
|
15
|
+
end
|
16
|
+
Object.send(:include, Object_Deterministic_CBOR)
|
17
|
+
|
18
|
+
module Array_Deterministic_CBOR
|
19
|
+
def cbor_prepare_deterministic
|
20
|
+
map(&:cbor_prepare_deterministic)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
Array.send(:include, Array_Deterministic_CBOR)
|
24
|
+
|
25
|
+
module Hash_Deterministic_CBOR
|
26
|
+
def cbor_prepare_deterministic
|
27
|
+
Hash[map {|k, v|
|
28
|
+
k = k.cbor_prepare_deterministic
|
29
|
+
v = v.cbor_prepare_deterministic
|
30
|
+
cc = k.to_cbor # already prepared
|
31
|
+
[cc, k, v]}.
|
32
|
+
sort.map{|cc, k, v| [k, v]}]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
Hash.send(:include, Hash_Deterministic_CBOR)
|
36
|
+
|
37
|
+
module Tagged_Deterministic_CBOR
|
38
|
+
def cbor_prepare_deterministic
|
39
|
+
CBOR::Tagged.new(tag, value.cbor_prepare_deterministic)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
CBOR::Tagged.send(:include, Tagged_Deterministic_CBOR)
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'cbor-deterministic'
|
2
|
+
|
3
|
+
[[1], [false], [10.3], [10.5], [Float::NAN],
|
4
|
+
[{a: 1, b: [1, 2]}],
|
5
|
+
[{[] => 1, bb: 2}, {bb: 2, [] => 1}],
|
6
|
+
[{b: {mm: 2, m: 3}, "b".b => 1}, {"b".b => 1, b: {m: 3, mm: 2}}],
|
7
|
+
[CBOR::Tagged.new(4711, {aa: 1, b: 2}),
|
8
|
+
CBOR::Tagged.new(4711, {b: 2, aa: 1})],
|
9
|
+
].each do |ex1, ex2, ex3|
|
10
|
+
c1 = ex1.to_cbor
|
11
|
+
cc1 = ex1.to_deterministic_cbor
|
12
|
+
# p cc1
|
13
|
+
if ex2.nil?
|
14
|
+
raise [:eq1, c1, cc1].inspect unless c1 == cc1
|
15
|
+
else
|
16
|
+
raise [:ne1, c1, cc1].inspect if c1 == cc1
|
17
|
+
c2 = ex2.to_cbor
|
18
|
+
raise [:eq2, cc1, c2].inspect unless cc1 == c2
|
19
|
+
cc2 = ex2.to_deterministic_cbor
|
20
|
+
raise [:eq3, cc1, cc2].inspect unless cc1 == cc2
|
21
|
+
end
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cbor-deterministic
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Carsten Bormann
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-03-03 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: cbor-deterministic implements deterministic encoding for CBOR, RFC 8949
|
14
|
+
Section 4.2
|
15
|
+
email: cabo@tzi.org
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- cbor-deterministic.gemspec
|
21
|
+
- lib/cbor-deterministic.rb
|
22
|
+
- test/test-deterministic.rb
|
23
|
+
homepage: http://cbor.io/
|
24
|
+
licenses:
|
25
|
+
- Apache-2.0
|
26
|
+
metadata: {}
|
27
|
+
post_install_message:
|
28
|
+
rdoc_options: []
|
29
|
+
require_paths:
|
30
|
+
- lib
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: 1.9.2
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
requirements: []
|
42
|
+
rubygems_version: 3.2.3
|
43
|
+
signing_key:
|
44
|
+
specification_version: 4
|
45
|
+
summary: CBOR (Concise Binary Object Representation) deterministic encoding
|
46
|
+
test_files:
|
47
|
+
- test/test-deterministic.rb
|