ob64 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/ob64.svg)](http://rubygems.org/gems/ob64)
|
4
|
+
[![Build Status](https://github.com/jcmfernandes/ob64/workflows/Test/badge.svg?branch=master&event=push)](https://github.com/jcmfernandes/ob64/actions?query=workflow:Test)
|
5
|
+
[![Yard Docs](https://img.shields.io/badge/yard-docs-blue.svg)](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
|