openssl-ccm 1.2.2 → 1.3.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/README.md +1 -3
- data/lib/openssl/ccm/version.rb +3 -1
- data/lib/openssl/ccm.rb +53 -54
- metadata +12 -155
- data/.rubocop.yml +0 -12
- data/.yardopts +0 -4
- data/Gemfile +0 -8
- data/Rakefile +0 -31
- data/test/data_1 +0 -0
- data/test/data_1-1_e +0 -1
- data/test/data_1-2_e +0 -1
- data/test/data_1-3_e +0 -1
- data/test/data_1-4_e +0 -1
- data/test/data_2 +0 -2
- data/test/data_2-1_e +0 -0
- data/test/data_2-2_e +0 -1
- data/test/data_2-3_e +0 -1
- data/test/data_2-4_e +0 -2
- data/test/data_3 +0 -0
- data/test/data_3-1_e +0 -0
- data/test/data_3-2_e +0 -0
- data/test/data_3-3_e +0 -0
- data/test/data_3-4_e +0 -0
- data/test/test_ccm.rb +0 -344
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5d7496d323bd3e12c63cf6cc2e8e8fec61755b71167dcdf87889d4ed9c35d343
|
|
4
|
+
data.tar.gz: 7e3d5687db5623504750e49c676265ff0f739d4e2d0dccaa67559c852d6b3cea
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f2d6bb787cfc366e0d1b3f2e00459d8fdb450c4baadb335d225faa5c1ef615bb4e64842a71967a9add92fa5873c6192ad5e9b230eac46e29cd031062c0e1a835
|
|
7
|
+
data.tar.gz: e4e0667dfaa18103791c5a94a88bada6ab08df87d6020564d06d789431520ca1e6631a3fc3bd85160b821570e42e52cfa0e86c47cd661c90ff534ee144986983
|
data/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
[](http://badge.fury.io/rb/openssl-ccm)
|
|
2
|
-
[](https://gemnasium.com/SmallLars/openssl-ccm)
|
|
3
|
-
[](https://travis-ci.org/SmallLars/openssl-ccm)
|
|
4
2
|
[](https://coveralls.io/r/SmallLars/openssl-ccm)
|
|
5
|
-
[](https://qlty.sh/gh/SmallLars/projects/openssl-cmac)
|
|
6
4
|
[](http://inch-ci.org/github/smalllars/openssl-ccm)
|
|
7
5
|
|
|
8
6
|
# openssl-ccm
|
data/lib/openssl/ccm/version.rb
CHANGED
data/lib/openssl/ccm.rb
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'openssl'
|
|
2
4
|
|
|
5
|
+
# Extends Ruby's standard OpenSSL module with the CCM (Counter with CBC-MAC) class.
|
|
6
|
+
#
|
|
7
|
+
# This module is part of Ruby's standard library and is only reopened here
|
|
8
|
+
# to provide support for the CCM authenticated encryption mode (as defined in RFC 3610).
|
|
3
9
|
module OpenSSL
|
|
4
10
|
# CCMError used for wrong parameter resonse.
|
|
5
11
|
class CCMError < StandardError
|
|
@@ -21,11 +27,10 @@ module OpenSSL
|
|
|
21
27
|
#
|
|
22
28
|
# @return [[String]] supported algorithms
|
|
23
29
|
def self.ciphers
|
|
24
|
-
|
|
30
|
+
selected = OpenSSL::Cipher.ciphers.select { |c| c.match(/-(128|192|256)-CBC$/i) }
|
|
31
|
+
@ciphers ||= selected.map { |e| e[0..-9].upcase }.uniq
|
|
25
32
|
end
|
|
26
33
|
|
|
27
|
-
public
|
|
28
|
-
|
|
29
34
|
# Creates a new CCM object.
|
|
30
35
|
#
|
|
31
36
|
# @param cipher [String] one of the supported algorithms like 'AES'
|
|
@@ -35,23 +40,16 @@ module OpenSSL
|
|
|
35
40
|
#
|
|
36
41
|
# @return [Object] the new CCM object
|
|
37
42
|
def initialize(cipher, key, mac_len)
|
|
38
|
-
unless CCM.ciphers.include?(cipher.upcase)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
fail CCMError, 'invalid key length' unless key.b.length >= 16
|
|
42
|
-
unless (4..16).step(2).include?(mac_len)
|
|
43
|
-
fail CCMError, 'invalid mac length'
|
|
44
|
-
end
|
|
43
|
+
raise CCMError, "unsupported cipher algorithm (#{cipher})" unless CCM.ciphers.include?(cipher.upcase)
|
|
44
|
+
raise CCMError, 'invalid key length' unless key.b.length >= 16
|
|
45
|
+
raise CCMError, 'invalid mac length' unless (4..16).step(2).include?(mac_len)
|
|
45
46
|
|
|
46
|
-
if key.length < 24
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
else
|
|
51
|
-
cipher_key_size = "256"
|
|
52
|
-
end
|
|
47
|
+
cipher_key_size = if key.length < 24 then '128'
|
|
48
|
+
elsif key.length < 32 then '192'
|
|
49
|
+
else '256' # rubocop:disable Lint/ElseLayout
|
|
50
|
+
end
|
|
53
51
|
|
|
54
|
-
@cipher = OpenSSL::Cipher.new("#{cipher.upcase}
|
|
52
|
+
@cipher = OpenSSL::Cipher.new("#{cipher.upcase}-#{cipher_key_size}-CBC")
|
|
55
53
|
@key = key
|
|
56
54
|
@mac_len = mac_len
|
|
57
55
|
end
|
|
@@ -87,26 +85,22 @@ module OpenSSL
|
|
|
87
85
|
new_data = crypt(data.b[0...-@mac_len], nonce)
|
|
88
86
|
new_mac = mac(new_data, nonce, additional_data)
|
|
89
87
|
return new_data if new_mac == data.b[-@mac_len..-1]
|
|
88
|
+
|
|
90
89
|
''
|
|
91
90
|
end
|
|
92
91
|
|
|
93
92
|
private
|
|
94
93
|
|
|
95
94
|
def valid?(data, nonce, additional_data)
|
|
96
|
-
unless (7..13).include?(nonce.b.length)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
fail CCMError, 'invalid data length'
|
|
101
|
-
end
|
|
102
|
-
unless additional_data.b.length < 2**64
|
|
103
|
-
fail CCMError, 'invalid additional_data length'
|
|
104
|
-
end
|
|
95
|
+
raise CCMError, 'invalid nonce length' unless (7..13).include?(nonce.b.length)
|
|
96
|
+
raise CCMError, 'invalid data length' unless data.b.length < 2**(8 * (15 - nonce.b.length))
|
|
97
|
+
raise CCMError, 'invalid additional_data length' unless additional_data.b.length < 2**64
|
|
98
|
+
|
|
105
99
|
true
|
|
106
100
|
end
|
|
107
101
|
|
|
108
102
|
def crypt(data, nonce)
|
|
109
|
-
result =
|
|
103
|
+
result = String.new
|
|
110
104
|
data.bytes.each_slice(16).with_index(1) do |block, b|
|
|
111
105
|
counter = get_counter(nonce, b).bytes
|
|
112
106
|
block.length.times { |i| counter[i] ^= block[i] }
|
|
@@ -119,39 +113,43 @@ module OpenSSL
|
|
|
119
113
|
@cipher.reset
|
|
120
114
|
@cipher.encrypt
|
|
121
115
|
@cipher.key = @key
|
|
116
|
+
@cipher.iv = "\x00" * 16
|
|
122
117
|
|
|
123
|
-
|
|
124
|
-
|
|
118
|
+
mac = init_with_b0(data, nonce, additional_data)
|
|
119
|
+
!additional_data.empty? && mac = process(additional_data)
|
|
120
|
+
!data.empty? && mac = @cipher.update(data + padding(data)).bytes[-16..-1]
|
|
121
|
+
|
|
122
|
+
a0 = get_counter(nonce, 0).bytes
|
|
123
|
+
16.times { |i| mac[i] ^= a0[i] }
|
|
124
|
+
mac[0...@mac_len].pack('C*')
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def init_with_b0(data, nonce, additional_data)
|
|
128
|
+
b0 = Array.new(8, 0)
|
|
129
|
+
b0[0] = (additional_data.empty? ? 0 : 64) \
|
|
125
130
|
+ (8 * ((@mac_len - 2) / 2)) \
|
|
126
131
|
+ (14 - nonce.b.length)
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
unless additional_data.empty?
|
|
132
|
-
len = additional_data.b.length
|
|
133
|
-
d = case
|
|
134
|
-
when len < (2**16 - 2**8)
|
|
135
|
-
[len].pack('n')
|
|
136
|
-
when len < 2**32
|
|
137
|
-
"\xFF\xFE" + [len].pack('N')
|
|
138
|
-
else
|
|
139
|
-
"\xFF\xFF" + [len].pack('Q').reverse
|
|
140
|
-
end + additional_data
|
|
141
|
-
mac = @cipher.update(d + padding(d)).bytes[-16..-1]
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
unless data.empty?
|
|
145
|
-
mac = @cipher.update(data + padding(data)).bytes[-16..-1]
|
|
146
|
-
end
|
|
132
|
+
b0 += [data.b.length].pack('Q').reverse.bytes
|
|
133
|
+
b0[1, nonce.b.length] = nonce.bytes
|
|
134
|
+
@cipher.update(b0.pack('C*')).bytes
|
|
135
|
+
end
|
|
147
136
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
137
|
+
def process(additional_data)
|
|
138
|
+
len = additional_data.b.length
|
|
139
|
+
d = case
|
|
140
|
+
when len < (2**16) - (2**8)
|
|
141
|
+
[len].pack('n')
|
|
142
|
+
when len < 2**32
|
|
143
|
+
"\xFF\xFE#{[len].pack('N')}"
|
|
144
|
+
else
|
|
145
|
+
"\xFF\xFF#{[len].pack('Q').reverse}"
|
|
146
|
+
end + additional_data
|
|
147
|
+
@cipher.update(d + padding(d)).bytes[-16..-1]
|
|
151
148
|
end
|
|
152
149
|
|
|
153
150
|
def padding(data)
|
|
154
|
-
return '' if (data.b.length % 16)
|
|
151
|
+
return '' if (data.b.length % 16).zero?
|
|
152
|
+
|
|
155
153
|
"\x00" * (16 - (data.b.length % 16))
|
|
156
154
|
end
|
|
157
155
|
|
|
@@ -164,6 +162,7 @@ module OpenSSL
|
|
|
164
162
|
@cipher.reset
|
|
165
163
|
@cipher.encrypt
|
|
166
164
|
@cipher.key = @key
|
|
165
|
+
@cipher.iv = "\x00" * 16
|
|
167
166
|
@cipher.update(a.pack('C*'))
|
|
168
167
|
end
|
|
169
168
|
end
|
metadata
CHANGED
|
@@ -1,172 +1,47 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: openssl-ccm
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Lars Schmertmann
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
13
|
+
name: openssl
|
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
|
16
15
|
requirements:
|
|
17
16
|
- - "~>"
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
20
|
-
|
|
21
|
-
- !ruby/object:Gem::Version
|
|
22
|
-
version: 12.3.2
|
|
23
|
-
type: :development
|
|
24
|
-
prerelease: false
|
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
-
requirements:
|
|
27
|
-
- - "~>"
|
|
28
|
-
- !ruby/object:Gem::Version
|
|
29
|
-
version: '12.3'
|
|
30
|
-
- - ">="
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
version: 12.3.2
|
|
33
|
-
- !ruby/object:Gem::Dependency
|
|
34
|
-
name: rdoc
|
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
|
36
|
-
requirements:
|
|
37
|
-
- - "~>"
|
|
38
|
-
- !ruby/object:Gem::Version
|
|
39
|
-
version: '4.3'
|
|
40
|
-
- - ">="
|
|
41
|
-
- !ruby/object:Gem::Version
|
|
42
|
-
version: 4.3.0
|
|
43
|
-
type: :development
|
|
44
|
-
prerelease: false
|
|
45
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
46
|
-
requirements:
|
|
47
|
-
- - "~>"
|
|
48
|
-
- !ruby/object:Gem::Version
|
|
49
|
-
version: '4.3'
|
|
50
|
-
- - ">="
|
|
51
|
-
- !ruby/object:Gem::Version
|
|
52
|
-
version: 4.3.0
|
|
53
|
-
- !ruby/object:Gem::Dependency
|
|
54
|
-
name: yard
|
|
55
|
-
requirement: !ruby/object:Gem::Requirement
|
|
56
|
-
requirements:
|
|
57
|
-
- - "~>"
|
|
58
|
-
- !ruby/object:Gem::Version
|
|
59
|
-
version: '0.9'
|
|
60
|
-
- - ">="
|
|
61
|
-
- !ruby/object:Gem::Version
|
|
62
|
-
version: 0.9.16
|
|
63
|
-
type: :development
|
|
64
|
-
prerelease: false
|
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
66
|
-
requirements:
|
|
67
|
-
- - "~>"
|
|
68
|
-
- !ruby/object:Gem::Version
|
|
69
|
-
version: '0.9'
|
|
70
|
-
- - ">="
|
|
71
|
-
- !ruby/object:Gem::Version
|
|
72
|
-
version: 0.9.16
|
|
73
|
-
- !ruby/object:Gem::Dependency
|
|
74
|
-
name: rubocop
|
|
75
|
-
requirement: !ruby/object:Gem::Requirement
|
|
76
|
-
requirements:
|
|
77
|
-
- - "~>"
|
|
78
|
-
- !ruby/object:Gem::Version
|
|
79
|
-
version: '0.50'
|
|
80
|
-
- - ">="
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: 0.50.0
|
|
83
|
-
type: :development
|
|
84
|
-
prerelease: false
|
|
85
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0.50'
|
|
90
|
-
- - ">="
|
|
91
|
-
- !ruby/object:Gem::Version
|
|
92
|
-
version: 0.50.0
|
|
93
|
-
- !ruby/object:Gem::Dependency
|
|
94
|
-
name: test-unit
|
|
95
|
-
requirement: !ruby/object:Gem::Requirement
|
|
96
|
-
requirements:
|
|
97
|
-
- - "~>"
|
|
98
|
-
- !ruby/object:Gem::Version
|
|
99
|
-
version: '3.2'
|
|
100
|
-
- - ">="
|
|
101
|
-
- !ruby/object:Gem::Version
|
|
102
|
-
version: 3.2.9
|
|
103
|
-
type: :development
|
|
104
|
-
prerelease: false
|
|
105
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
-
requirements:
|
|
107
|
-
- - "~>"
|
|
108
|
-
- !ruby/object:Gem::Version
|
|
109
|
-
version: '3.2'
|
|
110
|
-
- - ">="
|
|
111
|
-
- !ruby/object:Gem::Version
|
|
112
|
-
version: 3.2.9
|
|
113
|
-
- !ruby/object:Gem::Dependency
|
|
114
|
-
name: coveralls
|
|
115
|
-
requirement: !ruby/object:Gem::Requirement
|
|
116
|
-
requirements:
|
|
117
|
-
- - "~>"
|
|
118
|
-
- !ruby/object:Gem::Version
|
|
119
|
-
version: '0.8'
|
|
120
|
-
- - ">="
|
|
121
|
-
- !ruby/object:Gem::Version
|
|
122
|
-
version: 0.8.22
|
|
123
|
-
type: :development
|
|
18
|
+
version: '3.0'
|
|
19
|
+
type: :runtime
|
|
124
20
|
prerelease: false
|
|
125
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
126
22
|
requirements:
|
|
127
23
|
- - "~>"
|
|
128
24
|
- !ruby/object:Gem::Version
|
|
129
|
-
version: '0
|
|
130
|
-
- - ">="
|
|
131
|
-
- !ruby/object:Gem::Version
|
|
132
|
-
version: 0.8.22
|
|
25
|
+
version: '3.0'
|
|
133
26
|
description: Ruby Gem for RFC 3610 - Counter with CBC-MAC (CCM)
|
|
134
27
|
email:
|
|
135
28
|
- SmallLars@t-online.de
|
|
136
29
|
executables: []
|
|
137
30
|
extensions: []
|
|
138
31
|
extra_rdoc_files:
|
|
139
|
-
- README.md
|
|
140
32
|
- LICENSE
|
|
33
|
+
- README.md
|
|
141
34
|
files:
|
|
142
|
-
- ".rubocop.yml"
|
|
143
|
-
- ".yardopts"
|
|
144
|
-
- Gemfile
|
|
145
35
|
- LICENSE
|
|
146
36
|
- README.md
|
|
147
|
-
- Rakefile
|
|
148
37
|
- lib/openssl/ccm.rb
|
|
149
38
|
- lib/openssl/ccm/version.rb
|
|
150
|
-
- test/data_1
|
|
151
|
-
- test/data_1-1_e
|
|
152
|
-
- test/data_1-2_e
|
|
153
|
-
- test/data_1-3_e
|
|
154
|
-
- test/data_1-4_e
|
|
155
|
-
- test/data_2
|
|
156
|
-
- test/data_2-1_e
|
|
157
|
-
- test/data_2-2_e
|
|
158
|
-
- test/data_2-3_e
|
|
159
|
-
- test/data_2-4_e
|
|
160
|
-
- test/data_3
|
|
161
|
-
- test/data_3-1_e
|
|
162
|
-
- test/data_3-2_e
|
|
163
|
-
- test/data_3-3_e
|
|
164
|
-
- test/data_3-4_e
|
|
165
|
-
- test/test_ccm.rb
|
|
166
39
|
homepage: https://github.com/smalllars/openssl-ccm
|
|
167
40
|
licenses:
|
|
168
41
|
- MIT
|
|
169
|
-
metadata:
|
|
42
|
+
metadata:
|
|
43
|
+
rubygems_mfa_required: 'true'
|
|
44
|
+
source_code_uri: https://github.com/smalllars/openssl-ccm
|
|
170
45
|
post_install_message: Thanks for installing!
|
|
171
46
|
rdoc_options:
|
|
172
47
|
- "-x"
|
|
@@ -184,25 +59,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
184
59
|
- !ruby/object:Gem::Version
|
|
185
60
|
version: '0'
|
|
186
61
|
requirements: []
|
|
187
|
-
|
|
188
|
-
rubygems_version: 2.7.7
|
|
189
|
-
signing_key:
|
|
62
|
+
rubygems_version: 3.6.9
|
|
190
63
|
specification_version: 4
|
|
191
64
|
summary: RFC 3610 - CCM
|
|
192
|
-
test_files:
|
|
193
|
-
- test/test_ccm.rb
|
|
194
|
-
- test/data_3-2_e
|
|
195
|
-
- test/data_3-4_e
|
|
196
|
-
- test/data_3-1_e
|
|
197
|
-
- test/data_3
|
|
198
|
-
- test/data_1-2_e
|
|
199
|
-
- test/data_2-4_e
|
|
200
|
-
- test/data_1-4_e
|
|
201
|
-
- test/data_1-3_e
|
|
202
|
-
- test/data_2-2_e
|
|
203
|
-
- test/data_2-3_e
|
|
204
|
-
- test/data_1
|
|
205
|
-
- test/data_2
|
|
206
|
-
- test/data_1-1_e
|
|
207
|
-
- test/data_2-1_e
|
|
208
|
-
- test/data_3-3_e
|
|
65
|
+
test_files: []
|
data/.rubocop.yml
DELETED
data/.yardopts
DELETED
data/Gemfile
DELETED
data/Rakefile
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
require './lib/openssl/ccm/version'
|
|
2
|
-
require "bundler/gem_tasks"
|
|
3
|
-
require 'rake/testtask'
|
|
4
|
-
|
|
5
|
-
task :default => :build
|
|
6
|
-
|
|
7
|
-
desc "Run tests"
|
|
8
|
-
Rake::TestTask.new do |t|
|
|
9
|
-
t.libs << 'test'
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
desc "Create documentation"
|
|
13
|
-
task :doc do
|
|
14
|
-
sh "gem rdoc --rdoc openssl-ccm"
|
|
15
|
-
sh "yardoc"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
desc "Uninstall and clean documentation"
|
|
19
|
-
task :clean do
|
|
20
|
-
sh "gem uninstall openssl-ccm"
|
|
21
|
-
begin; sh "rm -R ./coverage"; rescue; end
|
|
22
|
-
begin; sh "rm -R ./.yardoc"; rescue; end
|
|
23
|
-
begin; sh "rm -R ./doc"; rescue; end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
desc "Development Dependencies"
|
|
27
|
-
task (:devinst) { sh "gem install --dev ./openssl-ccm-#{OpenSSL::CCM::VERSION}.gem" }
|
|
28
|
-
|
|
29
|
-
desc "Bundle install"
|
|
30
|
-
task (:bundle) { sh "bundle install" }
|
|
31
|
-
|
data/test/data_1
DELETED
|
File without changes
|
data/test/data_1-1_e
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�`��`C��x�J)�
|
data/test/data_1-2_e
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
�3Qȳ��
|
data/test/data_1-3_e
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
��#�=�ʵ��ii3
|
data/test/data_1-4_e
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(����y
|
data/test/data_2
DELETED
data/test/data_2-1_e
DELETED
|
Binary file
|
data/test/data_2-2_e
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Dz�p�5{h�5M���A=��%�֧ސ�ii��@���tS,��Ϲ
|
data/test/data_2-3_e
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
`��gM�T�)~>4�x����O��;�����c���rܮ|��V*���<
|
data/test/data_2-4_e
DELETED
data/test/data_3
DELETED
|
Binary file
|
data/test/data_3-1_e
DELETED
|
Binary file
|
data/test/data_3-2_e
DELETED
|
Binary file
|
data/test/data_3-3_e
DELETED
|
Binary file
|
data/test/data_3-4_e
DELETED
|
Binary file
|
data/test/test_ccm.rb
DELETED
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
require 'coveralls'
|
|
2
|
-
Coveralls.wear!
|
|
3
|
-
require 'test/unit'
|
|
4
|
-
require 'openssl/ccm'
|
|
5
|
-
|
|
6
|
-
# Testclass with Test Vectors from
|
|
7
|
-
# http://tools.ietf.org/html/rfc3610#section-8
|
|
8
|
-
class CCMTest < Test::Unit::TestCase
|
|
9
|
-
KEY = %W(C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF) * 12 \
|
|
10
|
-
+ %W(D7828D13B2B0BDC325A76236DF93CC6B) * 12
|
|
11
|
-
NONCE = %W(
|
|
12
|
-
00000003020100A0A1A2A3A4A5
|
|
13
|
-
00000004030201A0A1A2A3A4A5
|
|
14
|
-
00000005040302A0A1A2A3A4A5
|
|
15
|
-
00000006050403A0A1A2A3A4A5
|
|
16
|
-
00000007060504A0A1A2A3A4A5
|
|
17
|
-
00000008070605A0A1A2A3A4A5
|
|
18
|
-
00000009080706A0A1A2A3A4A5
|
|
19
|
-
0000000A090807A0A1A2A3A4A5
|
|
20
|
-
0000000B0A0908A0A1A2A3A4A5
|
|
21
|
-
0000000C0B0A09A0A1A2A3A4A5
|
|
22
|
-
0000000D0C0B0AA0A1A2A3A4A5
|
|
23
|
-
0000000E0D0C0BA0A1A2A3A4A5
|
|
24
|
-
00412B4EA9CDBE3C9696766CFA
|
|
25
|
-
0033568EF7B2633C9696766CFA
|
|
26
|
-
00103FE41336713C9696766CFA
|
|
27
|
-
00764C63B8058E3C9696766CFA
|
|
28
|
-
00F8B678094E3B3C9696766CFA
|
|
29
|
-
00D560912D3F703C9696766CFA
|
|
30
|
-
0042FFF8F1951C3C9696766CFA
|
|
31
|
-
00920F40E56CDC3C9696766CFA
|
|
32
|
-
0027CA0C7120BC3C9696766CFA
|
|
33
|
-
005B8CCBCD9AF83C9696766CFA
|
|
34
|
-
003EBE94044B9A3C9696766CFA
|
|
35
|
-
008D493B30AE8B3C9696766CFA
|
|
36
|
-
)
|
|
37
|
-
DATA = %W(
|
|
38
|
-
08090A0B0C0D0E0F101112131415161718191A1B1C1D1E
|
|
39
|
-
08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
|
|
40
|
-
08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20
|
|
41
|
-
0C0D0E0F101112131415161718191A1B1C1D1E
|
|
42
|
-
0C0D0E0F101112131415161718191A1B1C1D1E1F
|
|
43
|
-
0C0D0E0F101112131415161718191A1B1C1D1E1F20
|
|
44
|
-
08090A0B0C0D0E0F101112131415161718191A1B1C1D1E
|
|
45
|
-
08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
|
|
46
|
-
08090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20
|
|
47
|
-
0C0D0E0F101112131415161718191A1B1C1D1E
|
|
48
|
-
0C0D0E0F101112131415161718191A1B1C1D1E1F
|
|
49
|
-
0C0D0E0F101112131415161718191A1B1C1D1E1F20
|
|
50
|
-
08E8CF97D820EA258460E96AD9CF5289054D895CEAC47C
|
|
51
|
-
9020EA6F91BDD85AFA0039BA4BAFF9BFB79C7028949CD0EC
|
|
52
|
-
B916E0EACC1C00D7DCEC68EC0B3BBB1A02DE8A2D1AA346132E
|
|
53
|
-
12DAAC5630EFA5396F770CE1A66B21F7B2101C
|
|
54
|
-
E88B6A46C78D63E52EB8C546EFB5DE6F75E9CC0D
|
|
55
|
-
6435ACBAFB11A82E2F071D7CA4A5EBD93A803BA87F
|
|
56
|
-
8A19B950BCF71A018E5E6701C91787659809D67DBEDD18
|
|
57
|
-
1761433C37C5A35FC1F39F406302EB907C6163BE38C98437
|
|
58
|
-
A434A8E58500C6E41530538862D686EA9E81301B5AE4226BFA
|
|
59
|
-
B96B49E21D621741632875DB7F6C9243D2D7C2
|
|
60
|
-
E2FCFBB880442C731BF95167C8FFD7895E337076
|
|
61
|
-
ABF21C0B02FEB88F856DF4A37381BCE3CC128517D4
|
|
62
|
-
)
|
|
63
|
-
ADD_DATA = %W(0001020304050607) * 3 \
|
|
64
|
-
+ %W(000102030405060708090A0B) * 3 \
|
|
65
|
-
+ %W(0001020304050607) * 3 \
|
|
66
|
-
+ %W(000102030405060708090A0B) * 3 \
|
|
67
|
-
+ %W(
|
|
68
|
-
0BE1A88BACE018B1
|
|
69
|
-
63018F76DC8A1BCB
|
|
70
|
-
AA6CFA36CAE86B40
|
|
71
|
-
D0D0735C531E1BECF049C244
|
|
72
|
-
77B60F011C03E1525899BCAE
|
|
73
|
-
CD9044D2B71FDB8120EA60C0
|
|
74
|
-
D85BC7E69F944FB8
|
|
75
|
-
74A0EBC9069F5B37
|
|
76
|
-
44A3AA3AAE6475CA
|
|
77
|
-
EC46BB63B02520C33C49FD70
|
|
78
|
-
47A65AC78B3D594227E85E71
|
|
79
|
-
6E37A6EF546D955D34AB6059
|
|
80
|
-
)
|
|
81
|
-
CTR0001 = %W(
|
|
82
|
-
50859D916DCB6DDDE077C2D1D4EC9F97
|
|
83
|
-
7AC0103DED38F6C0390DBA871C4991F4
|
|
84
|
-
59B8EFFF46147312B47A1D9D393D3CFF
|
|
85
|
-
AE81666A838B886AEEBF4A5B3284508A
|
|
86
|
-
D0FCF5744D8F31E8895B05054B7C90C3
|
|
87
|
-
63CCBE1EE01744984564B23A8D245C80
|
|
88
|
-
093CDBB9C5524FDAC1C5ECD291C470AF
|
|
89
|
-
737C3391CC8E13DDE0AAC54B6DB7EB98
|
|
90
|
-
8A5A106BC0299A555B936B0B0EA0DE5A
|
|
91
|
-
0B392B9B056697063F12568F2B13A10F
|
|
92
|
-
6B66BC0C90A1F112FCBE6F4E122077BC
|
|
93
|
-
CCF2AED9E04AC974E65855B32B9430BF
|
|
94
|
-
4451B0117A8482BF0319AEC1595EBDDA
|
|
95
|
-
DCEBF413383C66A05A7255EF98D7FFAD
|
|
96
|
-
08C4DAC8ECC1C07B4CE1F24C375A47EE
|
|
97
|
-
0608FF95A694D559F40BB79DEFFA41DF
|
|
98
|
-
BDCE955CCFD3810A91EA77A6A45BC04C
|
|
99
|
-
64A2C55650CEE04C7A93D8EEF543E88E
|
|
100
|
-
363834FA28833DB755660D98650D6846
|
|
101
|
-
4F71A5C11242E37D29F0FEE41BE1025F
|
|
102
|
-
568A459E40094867EB85E09E6A2E6476
|
|
103
|
-
88BC194280C1FA3EBEFCEFFB4DC62D54
|
|
104
|
-
0A7E0A6353C8CF9EBC3B6E63159AD097
|
|
105
|
-
58DB19B3889AA38B3CA40B16FF422C73
|
|
106
|
-
)
|
|
107
|
-
CTR0002 = %W(
|
|
108
|
-
7546717AC6DE9AFF640C9C06DE6D0D8F
|
|
109
|
-
D40CDE22D5F92424F7BE9A569DA79F51
|
|
110
|
-
69F122A078C79B8977894C99975C2378
|
|
111
|
-
D1B19206AC939E2FB6DDCE10A774FD8D
|
|
112
|
-
72A0D4219F0DE1D40483BC2D3D0CFC2A
|
|
113
|
-
396DBAA2A7D2CBD4B5E17C107945BBC0
|
|
114
|
-
11578386E2C472B48ECC8AADAB776FCB
|
|
115
|
-
74B77177C5AAC53B04A4F8708E92EB2B
|
|
116
|
-
EA05FDE2AB225CFEB77312CB88D9A54A
|
|
117
|
-
078965252340943B9E69B256CC5EF731
|
|
118
|
-
979E572BBE658AE5CC2011832A9A9B5B
|
|
119
|
-
A2CAAC1163F407E5E5F6E3B3790F79F8
|
|
120
|
-
83EB76E13A44847F9220090776B825C5
|
|
121
|
-
2F542CBA15D66CDFE1EC468F0E68A124
|
|
122
|
-
A7872E6C6DC44E842602504C3FA573C5
|
|
123
|
-
80553A75783804A9648B68DD7FDCDD7A
|
|
124
|
-
432EF232AE36D89222BF6337E6B26CE8
|
|
125
|
-
18E765ACB7B0E9AF092BD0206CA1C83C
|
|
126
|
-
35E96354871672563F0C08AF784431A9
|
|
127
|
-
342BD3F17CB77BC1790B05056159272C
|
|
128
|
-
A600AA929203549AAEEF2CCC59137A57
|
|
129
|
-
3E597DA5AE21CCA4009E4C0C91F62249
|
|
130
|
-
EA2032DA27826E139E1E725C5B0D3EBF
|
|
131
|
-
C32F243D65DC7E9F4B0216AB7FB96B4D
|
|
132
|
-
)
|
|
133
|
-
CIPHER = %W(
|
|
134
|
-
588C979A61C663D2F066D0C2C0F989806D5F6B61DAC384
|
|
135
|
-
72C91A36E135F8CF291CA894085C87E3CC15C439C9E43A3B
|
|
136
|
-
51B1E5F44A197D1DA46B0F8E2D282AE871E838BB64DA859657
|
|
137
|
-
A28C6865939A9A79FAAA5C4C2A9D4A91CDAC8C
|
|
138
|
-
DCF1FB7B5D9E23FB9D4E131253658AD86EBDCA3E
|
|
139
|
-
6FC1B011F006568B5171A42D953D469B2570A4BD87
|
|
140
|
-
0135D1B2C95F41D5D1D4FEC185D166B8094E999DFED96C
|
|
141
|
-
7B75399AC0831DD2F0BBD75879A2FD8F6CAE6B6CD9B7DB24
|
|
142
|
-
82531A60CC24945A4B8279181AB5C84DF21CE7F9B73F42E197
|
|
143
|
-
07342594157785152B074098330ABB141B947B
|
|
144
|
-
676BB20380B0E301E8AB79590A396DA78B834934
|
|
145
|
-
C0FFA0D6F05BDB67F24D43A4338D2AA4BED7B20E43
|
|
146
|
-
4CB97F86A2A4689A877947AB8091EF5386A6FFBDD080F8
|
|
147
|
-
4CCB1E7CA981BEFAA0726C55D378061298C85C92814ABC33
|
|
148
|
-
B1D23A2220DDC0AC900D9AA03C61FCF4A559A4417767089708
|
|
149
|
-
14D253C3967B70609B7CBB7C49916028324526
|
|
150
|
-
5545FF1A085EE2EFBF52B2E04BEE1E2336C73E3F
|
|
151
|
-
009769ECABDF48625594C59251E6035722675E04C8
|
|
152
|
-
BC218DAA947427B6DB386A99AC1AEF23ADE0B52939CB6A
|
|
153
|
-
5810E6FD25874022E80361A478E3E9CF484AB04F447EFFF6
|
|
154
|
-
F2BEED7BC5098E83FEB5B31608F8E29C38819A89C8E776F154
|
|
155
|
-
31D750A09DA3ED7FDDD49A2032AABF17EC8EBF
|
|
156
|
-
E882F1DBD38CE3EDA7C23F04DD65071EB41342AC
|
|
157
|
-
F32905B88A641B04B9C9FFB58CC390900F3DA12AB1
|
|
158
|
-
)
|
|
159
|
-
MAC = %W(
|
|
160
|
-
17E8D12CFDF926E0
|
|
161
|
-
A091D56E10400916
|
|
162
|
-
4ADAA76FBD9FB0C5
|
|
163
|
-
96C861B9C9E61EF1
|
|
164
|
-
51E83F077D9C2D93
|
|
165
|
-
405A0443AC91CB94
|
|
166
|
-
048C56602C97ACBB7490
|
|
167
|
-
C17B4433F434963F34B4
|
|
168
|
-
EA9C07E56B5EB17E5F4E
|
|
169
|
-
566AA9406B4D999988DD
|
|
170
|
-
F53AA2E9107A8B6C022C
|
|
171
|
-
CD1AA31662E7AD65D6DB
|
|
172
|
-
E78CF7CB0CDDD7B3
|
|
173
|
-
C52EE81D7D77C08A
|
|
174
|
-
A776796EDB723506
|
|
175
|
-
9A6F49975BCADEAF
|
|
176
|
-
762C0C7744FE7E3C
|
|
177
|
-
47099E5AE0704551
|
|
178
|
-
637CF9BEC2408897C6BA
|
|
179
|
-
F0A477CC2FC9BF548944
|
|
180
|
-
4D4151A4ED3A8B87B9CE
|
|
181
|
-
7D22C8088C666BE5C197
|
|
182
|
-
DF7E00DCCEC7AE52987D
|
|
183
|
-
6DCE9E82EFA16DA62059
|
|
184
|
-
)
|
|
185
|
-
|
|
186
|
-
def test_aes_init
|
|
187
|
-
assert_raise(OpenSSL::CCMError) { OpenSSL::CCM.new('', 'A' * 16, 8) }
|
|
188
|
-
assert_raise(OpenSSL::CCMError) { OpenSSL::CCM.new('AE', 'A' * 16, 8) }
|
|
189
|
-
|
|
190
|
-
assert_raise(OpenSSL::CCMError) { OpenSSL::CCM.new('AES', '', 8) }
|
|
191
|
-
assert_raise(OpenSSL::CCMError) { OpenSSL::CCM.new('AES', 'A', 8) }
|
|
192
|
-
assert_raise(OpenSSL::CCMError) { OpenSSL::CCM.new('AES', 'A' * 15, 8) }
|
|
193
|
-
|
|
194
|
-
3.step(17, 2) do |l|
|
|
195
|
-
assert_raise(OpenSSL::CCMError) { OpenSSL::CCM.new('AES', 'A' * 16, l) }
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
def test_aes_padding
|
|
200
|
-
ccm = OpenSSL::CCM.new('AES', 'A' * 16, 8)
|
|
201
|
-
|
|
202
|
-
assert_equal(''.b , ccm.send(:padding, '').b)
|
|
203
|
-
assert_equal("\x00".b , ccm.send(:padding, 'A' * 15).b)
|
|
204
|
-
assert_equal(''.b , ccm.send(:padding, 'A' * 16).b)
|
|
205
|
-
assert_equal(("\x00" * 15).b, ccm.send(:padding, 'A').b)
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
def test_aes_valid
|
|
209
|
-
ccm = OpenSSL::CCM.new('AES', 'A' * 16, 8)
|
|
210
|
-
|
|
211
|
-
assert(ccm.send(:valid?, '', 'A' * 13, ''))
|
|
212
|
-
assert(ccm.send(:valid?, 'A' * (256**2 - 1), 'A' * 13, ''))
|
|
213
|
-
assert_raise(OpenSSL::CCMError) do
|
|
214
|
-
ccm.send(:valid?, 'A' * 256**2, 'A' * 13, '')
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
assert_raise OpenSSL::CCMError do
|
|
218
|
-
ccm.send(:valid?, 'Hello!', 'A' * 6, '')
|
|
219
|
-
end
|
|
220
|
-
assert(ccm.send(:valid?, '', 'A' * 7, ''))
|
|
221
|
-
assert(ccm.send(:valid?, '', 'A' * 13, ''))
|
|
222
|
-
assert_raise OpenSSL::CCMError do
|
|
223
|
-
ccm.send(:valid?, 'Hello!', 'A' * 14, '')
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
def test_aes_vectors
|
|
228
|
-
assert(OpenSSL::CCM.ciphers.include?('AES'), 'Missing AES-Cipher')
|
|
229
|
-
KEY.length.times do |i|
|
|
230
|
-
ccm = OpenSSL::CCM.new('AES', [KEY[i]].pack('H*'),
|
|
231
|
-
[MAC[i]].pack('H*').b.length)
|
|
232
|
-
|
|
233
|
-
c = ccm.send(:get_counter, [NONCE[i]].pack('H*'), 1)
|
|
234
|
-
assert_equal(CTR0001[i], c.unpack('H*')[0].upcase,
|
|
235
|
-
"Wrong CTR0001 in Vector #{i + 1}")
|
|
236
|
-
|
|
237
|
-
c = ccm.send(:get_counter, [NONCE[i]].pack('H*'), 2)
|
|
238
|
-
assert_equal(CTR0002[i], c.unpack('H*')[0].upcase,
|
|
239
|
-
"Wrong CTR0002 in Vector #{i + 1}")
|
|
240
|
-
|
|
241
|
-
c = ccm.send(:crypt, [DATA[i]].pack('H*'), [NONCE[i]].pack('H*'))
|
|
242
|
-
assert_equal(CIPHER[i], c.unpack('H*')[0].upcase,
|
|
243
|
-
"Wrong CIPHER in Vector #{i + 1}")
|
|
244
|
-
|
|
245
|
-
c = ccm.send(:mac,
|
|
246
|
-
[DATA[i]].pack('H*'),
|
|
247
|
-
[NONCE[i]].pack('H*'),
|
|
248
|
-
[ADD_DATA[i]].pack('H*'))
|
|
249
|
-
assert_equal(MAC[i], c.unpack('H*')[0].upcase,
|
|
250
|
-
"Wrong MAC in Vector #{i + 1}")
|
|
251
|
-
|
|
252
|
-
c = ccm.send(:encrypt,
|
|
253
|
-
[DATA[i]].pack('H*'),
|
|
254
|
-
[NONCE[i]].pack('H*'),
|
|
255
|
-
[ADD_DATA[i]].pack('H*'))
|
|
256
|
-
assert_equal((CIPHER[i] + MAC[i]), c.unpack('H*')[0].upcase,
|
|
257
|
-
"Wrong ENCRYPT in Vector #{i + 1}")
|
|
258
|
-
|
|
259
|
-
c = ccm.send(:decrypt,
|
|
260
|
-
[CIPHER[i] + MAC[i]].pack('H*'),
|
|
261
|
-
[NONCE[i]].pack('H*'),
|
|
262
|
-
[ADD_DATA[i]].pack('H*'))
|
|
263
|
-
assert_equal(DATA[i], c.unpack('H*')[0].upcase,
|
|
264
|
-
"Wrong ENCRYPT in Vector #{i + 1}")
|
|
265
|
-
end
|
|
266
|
-
end
|
|
267
|
-
|
|
268
|
-
def test_aes_data
|
|
269
|
-
key = %W(
|
|
270
|
-
00000000000000000000000000000000
|
|
271
|
-
001234567890ABCDEFDCAFFEED3921EE
|
|
272
|
-
001234567890ABCDEFDCAFFEED3921EE
|
|
273
|
-
11223344AABB00000000000000000000
|
|
274
|
-
)
|
|
275
|
-
nonce = %W(
|
|
276
|
-
00000000000000000000000000
|
|
277
|
-
00112233445566778899
|
|
278
|
-
001122334455667788990000
|
|
279
|
-
00112233445566778899
|
|
280
|
-
)
|
|
281
|
-
mac_len = [16, 8, 14, 8]
|
|
282
|
-
|
|
283
|
-
assert(OpenSSL::CCM.ciphers.include?('AES'), 'Missing AES-Cipher')
|
|
284
|
-
|
|
285
|
-
for cipher in ['aes', 'AES']
|
|
286
|
-
1.upto(3) do |i|
|
|
287
|
-
open("test/data_#{i}", mode = 'r') do |i_file|
|
|
288
|
-
input = i_file.read
|
|
289
|
-
key.length.times do |j|
|
|
290
|
-
open("test/data_#{i}-#{j + 1}_e", mode = 'r') do |o_file|
|
|
291
|
-
output = o_file.read
|
|
292
|
-
ccm = OpenSSL::CCM.new(cipher, [key[j]].pack('H*'), mac_len[j])
|
|
293
|
-
c = ccm.encrypt(input, [nonce[j]].pack('H*'))
|
|
294
|
-
assert_equal(output.unpack('H*'), c.unpack('H*'),
|
|
295
|
-
"Wrong ENCRYPT in Vector #{i + 1}")
|
|
296
|
-
end
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
|
-
end
|
|
300
|
-
end
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
#Test case from https://github.com/weidai11/cryptopp/blob/master/TestVectors/ccm.txt
|
|
304
|
-
def test_aes_data_256
|
|
305
|
-
key = %W(
|
|
306
|
-
0000000000000000000000000000000000000000000000000000000000000000
|
|
307
|
-
fb7615b23d80891dd470980bc79584c8b2fb64ce60978f4d17fce45a49e830b7
|
|
308
|
-
)
|
|
309
|
-
|
|
310
|
-
nonce = %W(
|
|
311
|
-
000000000000000000000000
|
|
312
|
-
dbd1a3636024b7b402da7d6f
|
|
313
|
-
)
|
|
314
|
-
|
|
315
|
-
plaintext = %W(
|
|
316
|
-
00000000000000000000000000000000
|
|
317
|
-
a845348ec8c5b5f126f50e76fefd1b1e
|
|
318
|
-
)
|
|
319
|
-
|
|
320
|
-
ciphertext = %W(
|
|
321
|
-
c1944044c8e7aa95d2de9513c7f3dd8c
|
|
322
|
-
cc881261c6a7fa72b96a1739176b277f
|
|
323
|
-
)
|
|
324
|
-
|
|
325
|
-
mac = %W(
|
|
326
|
-
4b0a3e5e51f151eb0ffae7c43d010fdb
|
|
327
|
-
3472e1145f2c0cbe146349062cf0e423
|
|
328
|
-
)
|
|
329
|
-
|
|
330
|
-
assert(OpenSSL::CCM.ciphers.include?('AES'), 'Missing AES-Cipher')
|
|
331
|
-
|
|
332
|
-
for cipher in ['aes', 'AES']
|
|
333
|
-
key.length.times do |i|
|
|
334
|
-
mac_len = mac[i].length / 2
|
|
335
|
-
ccm = OpenSSL::CCM.new(cipher, [key[i]].pack('H*'), mac_len)
|
|
336
|
-
c = ccm.encrypt([plaintext[i]].pack('H*'), [nonce[i]].pack('H*'))
|
|
337
|
-
assert_equal([mac[i]], c[-mac_len..-1].unpack('H*'),
|
|
338
|
-
"Wrong MAC ENCRYPT in Test #{i} ")
|
|
339
|
-
assert_equal([ciphertext[i]], c[0..-mac_len - 1].unpack('H*'),
|
|
340
|
-
"Wrong ciphertext ENCRYPT in Test #{i}")
|
|
341
|
-
end
|
|
342
|
-
end
|
|
343
|
-
end
|
|
344
|
-
end
|