ob64 0.1.0 → 0.2.0
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 +4 -4
- data/.github/workflows/main.yml +20 -4
- data/{LICENSE.txt → LICENSE} +1 -1
- data/README.md +34 -2
- data/benchmark.rb +42 -3
- data/lib/ob64/version.rb +1 -1
- data/lib/ob64.rb +46 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4697c65d1300ef0e6ec98cd12884ea07b3ab33a2a2b398a2a19ccb02d43d46d6
|
4
|
+
data.tar.gz: ce016702f7b2c43c183c43ab87974d74fe8efc56ba1e983e465f66e69f9edba2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca030510d227fac302d0dcf723bb78ff43f0e093b164293512d2fe5989fd05c43fb05c10ea5e2bbca5b3f31a8692b144979e80c956da54e03344ce5785c787a8
|
7
|
+
data.tar.gz: d9cf2b043bf838add8daec7ef0882ab204b23d35ce1b019a5aa614621fba5c7e83234579ba8b1d3372fd7e9f477a3a2c9af8c7b96a63f78d865a2f1a09e7fbf5
|
data/.github/workflows/main.yml
CHANGED
@@ -10,9 +10,25 @@ jobs:
|
|
10
10
|
ruby: ['2.5', '2.6', '2.7', '3.0']
|
11
11
|
runs-on: ubuntu-latest
|
12
12
|
steps:
|
13
|
-
-
|
14
|
-
|
13
|
+
- name: repository checkout
|
14
|
+
uses: actions/checkout@v2
|
15
|
+
with:
|
16
|
+
submodules: true
|
17
|
+
|
18
|
+
- name: load ruby
|
19
|
+
uses: ruby/setup-ruby@v1
|
15
20
|
with:
|
16
21
|
ruby-version: ${{ matrix.ruby }}
|
17
|
-
|
18
|
-
-
|
22
|
+
|
23
|
+
- name: RubyGems, Bundler Update
|
24
|
+
run: gem update --system --no-document --conservative
|
25
|
+
|
26
|
+
- name: bundle install
|
27
|
+
run: bundle install --path .bundle/gems --without development
|
28
|
+
|
29
|
+
- name: compile
|
30
|
+
run: bundle exec rake compile
|
31
|
+
|
32
|
+
- name: test
|
33
|
+
run: bundle exec rake spec
|
34
|
+
timeout-minutes: 10
|
data/{LICENSE.txt → LICENSE}
RENAMED
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Ob64 gem
|
2
2
|
|
3
|
+
[](http://rubygems.org/gems/ob64)
|
4
|
+
[](https://github.com/jcmfernandes/ob64/actions?query=workflow:Test)
|
5
|
+
[](http://www.rubydoc.info/gems/ob64/0.1.0)
|
6
|
+
|
3
7
|
A *fast* Base64 encoder and decoder as a Ruby gem.
|
4
8
|
|
5
9
|
How fast? Try it yourself, execute:
|
@@ -39,7 +43,6 @@ require "ob64"
|
|
39
43
|
|
40
44
|
bin1 = "This is data!"
|
41
45
|
string = Ob64.encode(bin1)
|
42
|
-
|
43
46
|
# string = "VGhpcyBpcyBkYXRhIQ=="
|
44
47
|
|
45
48
|
bin2 = Ob64.decode(string)
|
@@ -82,7 +85,36 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/jcmfer
|
|
82
85
|
|
83
86
|
## License
|
84
87
|
|
85
|
-
|
88
|
+
Released under the MIT License. See [{file:LICENSE}](LICENSE).
|
89
|
+
|
90
|
+
Copyright (c) 2021, João Fernandes
|
91
|
+
|
92
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
93
|
+
of this software and associated documentation files (the "Software"), to deal
|
94
|
+
in the Software without restriction, including without limitation the rights
|
95
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
96
|
+
copies of the Software, and to permit persons to whom the Software is
|
97
|
+
furnished to do so, subject to the following conditions:
|
98
|
+
|
99
|
+
The above copyright notice and this permission notice shall be included in
|
100
|
+
all copies or substantial portions of the Software.
|
101
|
+
|
102
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
103
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
104
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
105
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
106
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
107
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
108
|
+
THE SOFTWARE.
|
109
|
+
|
110
|
+
### libbase64
|
111
|
+
|
112
|
+
Released under the BSD 2-clause License. See [LICENSE](https://github.com/jcmfernandes/base64-cmake/blob/feature/cmake/LICENSE).
|
113
|
+
|
114
|
+
Copyright (c) 2005-2007, Nick Galbreath
|
115
|
+
Copyright (c) 2013-2019, Alfred Klomp
|
116
|
+
Copyright (c) 2015-2017, Wojciech Mula
|
117
|
+
Copyright (c) 2016-2017, Matthieu Darbois
|
86
118
|
|
87
119
|
## Code of Conduct
|
88
120
|
|
data/benchmark.rb
CHANGED
@@ -4,6 +4,11 @@ require "securerandom"
|
|
4
4
|
require "ob64"
|
5
5
|
require "base64"
|
6
6
|
|
7
|
+
$run_encode_benchmark = false
|
8
|
+
$run_decode_benchmark = false
|
9
|
+
$run_urlsafe_encode_benchmark = false
|
10
|
+
$run_urlsafe_decode_benchmark = true
|
11
|
+
|
7
12
|
def to_size(bytes)
|
8
13
|
bytes >= 2**20 ? "#{bytes / 2**20} MB" : "#{bytes / 2**10} kB"
|
9
14
|
end
|
@@ -59,7 +64,7 @@ encode_benchmark do
|
|
59
64
|
|
60
65
|
x.compare!
|
61
66
|
end
|
62
|
-
end
|
67
|
+
end if $run_encode_benchmark
|
63
68
|
|
64
69
|
decode_benchmark do
|
65
70
|
Benchmark.ips do |x|
|
@@ -71,9 +76,43 @@ decode_benchmark do
|
|
71
76
|
end
|
72
77
|
|
73
78
|
x.report("ob64 .decode") do
|
74
|
-
Ob64.
|
79
|
+
Ob64.decode($encoded)
|
75
80
|
end
|
76
81
|
|
77
82
|
x.compare!
|
78
83
|
end
|
79
|
-
end
|
84
|
+
end if $run_decode_benchmark
|
85
|
+
|
86
|
+
encode_benchmark do
|
87
|
+
Benchmark.ips do |x|
|
88
|
+
x.time = 5
|
89
|
+
x.warmup = 2
|
90
|
+
|
91
|
+
x.report("base64 .urlsafe_encode64") do
|
92
|
+
Base64.urlsafe_encode64($unencoded)
|
93
|
+
end
|
94
|
+
|
95
|
+
x.report("ob64 .urlsafe_encode") do
|
96
|
+
Ob64.urlsafe_encode($unencoded)
|
97
|
+
end
|
98
|
+
|
99
|
+
x.compare!
|
100
|
+
end
|
101
|
+
end if $run_urlsafe_encode_benchmark
|
102
|
+
|
103
|
+
decode_benchmark do
|
104
|
+
Benchmark.ips do |x|
|
105
|
+
x.time = 5
|
106
|
+
x.warmup = 2
|
107
|
+
|
108
|
+
x.report("base64 .urlsafe_decode64") do
|
109
|
+
Base64.urlsafe_decode64($encoded)
|
110
|
+
end
|
111
|
+
|
112
|
+
x.report("ob64 .urlsafe_decode") do
|
113
|
+
Ob64.urlsafe_decode($encoded)
|
114
|
+
end
|
115
|
+
|
116
|
+
x.compare!
|
117
|
+
end
|
118
|
+
end if $run_urlsafe_decode_benchmark
|
data/lib/ob64/version.rb
CHANGED
data/lib/ob64.rb
CHANGED
@@ -3,20 +3,45 @@
|
|
3
3
|
require_relative "ob64/version"
|
4
4
|
require_relative "ob64_ext"
|
5
5
|
|
6
|
+
# Methods for base64-encoding and -decoding strings.
|
6
7
|
module Ob64
|
7
8
|
include LibBase64
|
8
9
|
extend LibBase64
|
9
10
|
|
10
11
|
module_function
|
11
12
|
|
13
|
+
# Returns the Base64-encoded version of +bin+.
|
14
|
+
# This method complies with RFC 4648.
|
15
|
+
# No line feeds are added.
|
16
|
+
#
|
17
|
+
# @param bin [String]
|
18
|
+
# @return [String]
|
12
19
|
def encode(bin)
|
13
20
|
__encode(bin)
|
14
21
|
end
|
15
22
|
|
23
|
+
# Returns the Base64-decoded version of +string+.
|
24
|
+
# This method complies with RFC 4648.
|
25
|
+
# ArgumentError is raised if +string+ is incorrectly padded or contains
|
26
|
+
# non-alphabet characters. Note that CR or LF are also rejected.
|
27
|
+
#
|
28
|
+
# @param string [String]
|
29
|
+
# @return [String]
|
30
|
+
# @raise [ArgumentError] if +string+ cannot be decoded
|
16
31
|
def decode(string)
|
17
32
|
__decode(string)
|
18
33
|
end
|
19
34
|
|
35
|
+
# Returns the Base64-encoded version of +bin+.
|
36
|
+
# This method complies with ``Base 64 Encoding with URL and Filename Safe
|
37
|
+
# Alphabet'' in RFC 4648.
|
38
|
+
# The alphabet uses '-' instead of '+' and '_' instead of '/'.
|
39
|
+
# Note that the result can still contain '='.
|
40
|
+
# You can remove the padding by setting +padding+ as false.
|
41
|
+
#
|
42
|
+
# @param bin [String]
|
43
|
+
# @param padding [Boolean] - if the output must be padded
|
44
|
+
# @return [String]
|
20
45
|
def urlsafe_encode(bin, padding: true)
|
21
46
|
string = __encode(bin)
|
22
47
|
string.chomp!("==") || string.chomp!("=") unless padding
|
@@ -24,6 +49,18 @@ module Ob64
|
|
24
49
|
string
|
25
50
|
end
|
26
51
|
|
52
|
+
# Returns the Base64-decoded version of +string+.
|
53
|
+
# This method complies with ``Base 64 Encoding with URL and Filename Safe
|
54
|
+
# Alphabet'' in RFC 4648.
|
55
|
+
# The alphabet uses '-' instead of '+' and '_' instead of '/'.
|
56
|
+
#
|
57
|
+
# The padding character is optional.
|
58
|
+
# This method accepts both correctly-padded and unpadded input.
|
59
|
+
# Note that it still rejects incorrectly-padded input.
|
60
|
+
#
|
61
|
+
# @param string [String]
|
62
|
+
# @return [String]
|
63
|
+
# @raise [ArgumentError] if +string+ cannot be decoded
|
27
64
|
def urlsafe_decode(string)
|
28
65
|
if !string.end_with?("=") && string.length % 4 != 0
|
29
66
|
string = string.ljust((string.length + 3) & ~3, "=")
|
@@ -34,10 +71,19 @@ module Ob64
|
|
34
71
|
__decode(string)
|
35
72
|
end
|
36
73
|
|
74
|
+
# Returns the length of the Base64-encoded version of +bin+.
|
75
|
+
#
|
76
|
+
# @param bin [String]
|
77
|
+
# @param paddding [Boolean] - if the Base64-encoded version of +bin+ will be padded
|
78
|
+
# @return [Integer]
|
37
79
|
def encoded_length_of(bin, padding: true)
|
38
80
|
__encoded_length_of(bin, padding)
|
39
81
|
end
|
40
82
|
|
83
|
+
# Returns the length of the Base64-decoded version of +string+.
|
84
|
+
#
|
85
|
+
# @param string [String]
|
86
|
+
# @return [Integer]
|
41
87
|
def decoded_length_of(string)
|
42
88
|
__decoded_length_of(string)
|
43
89
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ob64
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- João Fernandes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-09-
|
11
|
+
date: 2021-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A fast Base64 encoder and decoder that makes use of SIMD extensions.
|
14
14
|
email:
|
@@ -30,7 +30,7 @@ files:
|
|
30
30
|
- CODE_OF_CONDUCT.md
|
31
31
|
- Gemfile
|
32
32
|
- Guardfile
|
33
|
-
- LICENSE
|
33
|
+
- LICENSE
|
34
34
|
- README.md
|
35
35
|
- Rakefile
|
36
36
|
- benchmark.rb
|