qrest 1.0.0 → 1.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28f37a9b5e5fb20a07f781323ce9f2381ecadd873bec290b5b65811849adb563
4
- data.tar.gz: 7ba9b8e971a1e76bb5869455a15f0973f29575a82a11d671656070a16ae1cfe0
3
+ metadata.gz: fa479ca4948c34f366ab8c290b4f89f2cca17d0cbe642b1104c010b0e0c83570
4
+ data.tar.gz: 724aa39b76303cc0c965e0f322aacb263a0d9ec2d7f18017c522509774fbfedb
5
5
  SHA512:
6
- metadata.gz: 5d592804716c69561ceb2cd556c7581302a485c7925c6908d956ebeeb7277011da21cf07867af837942813073d7e0307b7af27e74f7911180b8bbf1a8c11ff23
7
- data.tar.gz: 72830cd5baadaefc25cade7df5a7a82af010a79ecb78f54e576c90551b09a2e072f943c42306f31e8fd873befaba0d63fdb495b26cb4188f9cbca3234b8c0e30
6
+ metadata.gz: 1ede4940c060aeaa5dfc861b204b1b340999b645943e5505a9e8d04a7962d759a92feb19f09258b7f3667b556e3dfa3531a6ce9fde71b5333e8fa619a8ac8a9a
7
+ data.tar.gz: 38b9da529c02d8b9631f996cbaabc79df840eacf82077d71afdf4ef3e3da20d8223b5badc0a3cf635ccf054cb36e2039e7a14a14583d66dc531e3620c6108c12
data/lib/qrest/bch.rb CHANGED
@@ -24,9 +24,9 @@ module QRest
24
24
 
25
25
  end
26
26
 
27
- G15 = 0b000010100110111
28
- G15_MASK = 0b101010000010010
29
- G18 = 0b001111100100101
27
+ G15 = 0b0_0000_0101_0011_0111
28
+ G15_MASK = 0b0_0101_0100_0001_0010
29
+ G18 = 0b0_0001_1111_0010_0101
30
30
 
31
31
  G15D = digit G15
32
32
  G18D = digit G18
@@ -34,19 +34,19 @@ module QRest
34
34
  class <<self
35
35
 
36
36
  def format_info data
37
- d = data << 10
37
+ d = e = data << 10
38
38
  until (m = (digit d) - G15D) < 0 do
39
39
  d ^= G15 << m
40
40
  end
41
- ((data << 10) | d) ^ G15_MASK
41
+ (e | d) ^ G15_MASK
42
42
  end
43
43
 
44
44
  def version data
45
- d = data << 12
45
+ d = e = data << 12
46
46
  until (m = (digit d) - G18D) < 0 do
47
47
  d ^= G18 << m
48
48
  end
49
- (data << 12) | d
49
+ e | d
50
50
  end
51
51
 
52
52
  end
data/lib/qrest/modules.rb CHANGED
@@ -271,7 +271,8 @@ module QRest
271
271
  def walk_fields mask_pattern
272
272
  # An image says more than a thousand statements:
273
273
  # <https://en.wikipedia.org/wiki/QR_code#Message_placement>
274
- mp = MASK_PATTERNS[ mask_pattern] or raise ArgumentError, "Bad mask_pattern: #{mask_pattern}"
274
+ mp = MASK_PATTERNS[ mask_pattern] or
275
+ raise ArgumentError, "Bad mask_pattern: #{mask_pattern}"
275
276
  row = c2 = @fields.size - 1
276
277
  inc = -1
277
278
  loop do
@@ -18,7 +18,7 @@ module QRest
18
18
  if error_correct_length > 0 then
19
19
  e = error_correct_length - 1
20
20
  ge = new [1, 0]
21
- ge.gexp! 1, e
21
+ ge.gfexp! 1, e
22
22
  (error_correct e).multiply ge
23
23
  else
24
24
  new [1]
@@ -57,55 +57,61 @@ module QRest
57
57
  @num.unshift 0 until @num.length >= n
58
58
  end
59
59
 
60
- def first_glog
61
- Polynomial.glog @num.first
60
+ def first_gflog
61
+ Polynomial.gflog @num.first
62
62
  end
63
63
 
64
- def each_glog
64
+ def each_gflog
65
65
  @num.each_with_index { |n,i|
66
- yield (Polynomial.glog n), i
66
+ yield (Polynomial.gflog n), i
67
67
  }
68
68
  end
69
69
 
70
- def gexp! i, n
71
- @num[ i] ^= Polynomial.gexp n
70
+ def gfexp! i, n
71
+ @num[ i] ^= Polynomial.gfexp n
72
72
  end
73
73
 
74
74
  def multiply e
75
75
  r = Polynomial.zeroes length + e.length - 1
76
- each_glog { |gi,i|
77
- e.each_glog { |gj,j|
78
- r.gexp! i + j, gi + gj
76
+ each_gflog { |gi,i|
77
+ e.each_gflog { |gj,j|
78
+ r.gfexp! i + j, gi + gj
79
79
  }
80
80
  }
81
81
  r
82
82
  end
83
83
 
84
84
  def error_mod error_count
85
- e = Polynomial.error_correct error_count
86
- ef = e.first_glog
87
85
  p = dup
88
- p.extend! error_count
86
+ p.error_mod! error_count
87
+ end
88
+
89
+ def error_mod! error_count
90
+ e = Polynomial.error_correct error_count
91
+ extend! error_count
89
92
  loop do
90
- p.norm!
91
- break if p.length < e.length
92
- ratio = p.first_glog - ef
93
- e.each_glog { |gi,i|
94
- p.gexp! i, ratio + gi
93
+ norm!
94
+ break if length < e.length
95
+ f = first_gflog
96
+ e.each_gflog { |gi,i|
97
+ gfexp! i, gi + f
95
98
  }
96
99
  end
97
- p.grow! error_count
98
- p
100
+ grow! error_count
101
+ self
99
102
  end
100
103
 
101
104
 
102
- EXP_TABLE = []
103
- (0...8).each do |i|
104
- EXP_TABLE.push 1 << i
105
- end
106
- (8...256).each do |i|
107
- EXP_TABLE.push EXP_TABLE[i-4] ^ EXP_TABLE[i-5] ^ EXP_TABLE[i-6] ^ EXP_TABLE[i-8]
105
+ EXP_TABLE = [1]
106
+ loop do
107
+ x = x_ = EXP_TABLE.last << 1
108
+ x &= 0xff
109
+ x ^= 0x1d if x != x_
110
+ break if x == EXP_TABLE.first
111
+ EXP_TABLE.push x
108
112
  end
113
+ EXP_TABLE
114
+
109
115
 
110
116
  LOG_TABLE = [nil] * 256
111
117
  255.times do |i|
@@ -117,15 +123,12 @@ module QRest
117
123
 
118
124
  class <<self
119
125
 
120
- def glog n
121
- n >= 1 or raise Error, "Internal error: glog(#{n})."
122
- LOG_TABLE[n]
126
+ def gflog n
127
+ LOG_TABLE[n] or raise ArgumentError, "Argument is out of domain: gflog(#{n})."
123
128
  end
124
129
 
125
- def gexp n
126
- while n < 0 do n += 255 end
127
- while n >= 256 do n -= 255 end
128
- EXP_TABLE[n]
130
+ def gfexp n
131
+ EXP_TABLE[n % 255]
129
132
  end
130
133
 
131
134
  end
@@ -46,8 +46,9 @@ module QRest
46
46
  each do |rs|
47
47
  p = Polynomial.new buffer[ i, rs.data_count]
48
48
  i += rs.data_count
49
- dcdata.push p.num
50
- ecdata.push (p.error_mod rs.error_count).num
49
+ dcdata.push p.num.dup
50
+ p.error_mod! rs.error_count
51
+ ecdata.push p.num
51
52
  end
52
53
  data = []
53
54
  (max :data_count).times do |j|
data/lib/qrest/version.rb CHANGED
@@ -6,7 +6,7 @@
6
6
  module QRest
7
7
 
8
8
  NAME = "qrest"
9
- VERSION = "1.0.0"
9
+ VERSION = "1.0.1"
10
10
 
11
11
  end
12
12
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qrest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bertram Scharpf
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-03-16 00:00:00.000000000 Z
10
+ date: 2025-03-26 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  description: |
13
13
  A Ruby library that generates QR Codes
@@ -50,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
50
50
  - !ruby/object:Gem::Version
51
51
  version: '0'
52
52
  requirements: []
53
- rubygems_version: 3.6.4
53
+ rubygems_version: 3.6.6
54
54
  specification_version: 4
55
55
  summary: Generate QR Codes
56
56
  test_files: []