@@ -52,6 +52,8 @@ abstract class MacUnitTest {
52
52
return copyOf(max)
53
53
}
54
54
55
+ private fun ByteArray.hex (): String = encodeToString(TestData .base16)
56
+
55
57
open val maxKeyLength: Int? = null
56
58
abstract val expectedResetSmallHash: String
57
59
abstract val expectedResetMediumHash: String
@@ -72,53 +74,86 @@ abstract class MacUnitTest {
72
74
open fun givenMac_whenResetSmallKey_thenDoFinalReturnsExpected () {
73
75
assertExpectedHashes
74
76
val mac = mac(KEY_SMALL .toMaxKeyLen())
75
- val empty = mac.doFinal().encodeToString( TestData .base16 )
77
+ val empty = mac.doFinal().hex( )
76
78
updateSmall(mac)
77
79
mac.reset()
78
- val actual = mac.doFinal().encodeToString( TestData .base16 )
80
+ val actual = mac.doFinal().hex( )
79
81
assertEquals(empty, actual)
80
82
assertEquals(expectedResetSmallHash, actual)
83
+
84
+ updateSmall(mac)
85
+ mac.reset()
86
+ val into = ByteArray (mac.macLength() + 16 )
87
+ mac.doFinalInto(into, 16 )
88
+ for (i in 0 .. < 16 ) {
89
+ assertEquals(0 , into[i])
90
+ }
91
+ assertEquals(expectedResetSmallHash, into.copyInto(ByteArray (mac.macLength()), startIndex = 16 ).hex())
81
92
}
82
93
83
94
open fun givenMac_whenResetMediumKey_thenDoFinalReturnsExpected () {
84
95
assertExpectedHashes
85
96
val mac = mac(KEY_MEDIUM .toMaxKeyLen())
86
- val empty = mac.doFinal().encodeToString( TestData .base16 )
97
+ val empty = mac.doFinal().hex( )
87
98
updateSmall(mac)
88
99
mac.reset()
89
- val actual = mac.doFinal().encodeToString( TestData .base16 )
100
+ val actual = mac.doFinal().hex( )
90
101
assertEquals(empty, actual)
91
102
assertEquals(expectedResetMediumHash, actual)
103
+
104
+ updateSmall(mac)
105
+ mac.reset()
106
+ val into = ByteArray (mac.macLength() + 16 )
107
+ mac.doFinalInto(into, 0 )
108
+ for (i in (into.size - 16 ) until into.size) {
109
+ assertEquals(0 , into[i])
110
+ }
111
+ assertEquals(expectedResetMediumHash, into.copyInto(ByteArray (mac.macLength()), endIndex = into.size - 16 ).hex())
92
112
}
93
113
94
114
open fun givenMac_whenResetLargeKey_thenDoFinalReturnsExpected () {
95
115
assertExpectedHashes
96
116
val mac = mac(KEY_LARGE .toMaxKeyLen())
97
- val empty = mac.doFinal().encodeToString( TestData .base16 )
117
+ val empty = mac.doFinal().hex( )
98
118
updateSmall(mac)
99
119
mac.reset()
100
- val actual = mac.doFinal().encodeToString( TestData .base16 )
120
+ val actual = mac.doFinal().hex( )
101
121
assertEquals(empty, actual)
102
122
assertEquals(expectedResetLargeHash, actual)
123
+
124
+ updateSmall(mac)
125
+ mac.reset()
126
+ val into = ByteArray (mac.macLength())
127
+ mac.doFinalInto(into, 0 )
128
+ assertEquals(expectedResetLargeHash, into.hex())
103
129
}
104
130
105
131
open fun givenMac_whenUpdatedSmall_thenDoFinalReturnsExpected () {
106
132
assertExpectedHashes
107
133
val mac = mac(KEY_SMALL .toMaxKeyLen())
108
134
mac.doFinal()
109
135
updateSmall(mac)
110
- val actual = mac.doFinal().encodeToString( TestData .base16 )
136
+ val actual = mac.doFinal().hex( )
111
137
assertEquals(expectedUpdateSmallHash, actual)
138
+
139
+ updateSmall(mac)
140
+ val into = ByteArray (mac.macLength())
141
+ mac.doFinalInto(into, 0 )
142
+ assertEquals(expectedUpdateSmallHash, into.hex())
112
143
}
113
144
114
145
open fun givenMac_whenUpdatedMedium_thenDoFinalReturnsExpected () {
115
146
assertExpectedHashes
116
147
val mac = mac(KEY_MEDIUM .toMaxKeyLen())
117
148
mac.doFinal()
118
149
updateMedium(mac)
119
-
120
- val actual = mac.doFinal().encodeToString(TestData .base16)
150
+ val actual = mac.doFinal().hex()
121
151
assertEquals(expectedUpdateMediumHash, actual)
152
+
153
+ updateMedium(mac)
154
+ val into = ByteArray (mac.macLength())
155
+ mac.doFinalInto(into, 0 )
156
+ assertEquals(expectedUpdateMediumHash, into.hex())
122
157
}
123
158
124
159
open fun givenMac_whenCopied_thenIsDifferentInstance () {
@@ -128,30 +163,30 @@ abstract class MacUnitTest {
128
163
129
164
val copy = mac.copy()
130
165
assertNotEquals(copy, mac)
131
- assertEquals(expectedUpdateSmallHash, copy.doFinal().encodeToString( TestData .base16 ))
132
- assertEquals(expectedResetSmallHash, copy.doFinal().encodeToString( TestData .base16 ))
166
+ assertEquals(expectedUpdateSmallHash, copy.doFinal().hex( ))
167
+ assertEquals(expectedResetSmallHash, copy.doFinal().hex( ))
133
168
134
169
updateSmall(copy)
135
- assertEquals(expectedUpdateSmallHash, copy.doFinal().encodeToString( TestData .base16 ))
136
- assertEquals(expectedUpdateSmallHash, mac.doFinal().encodeToString( TestData .base16 ))
170
+ assertEquals(expectedUpdateSmallHash, copy.doFinal().hex( ))
171
+ assertEquals(expectedUpdateSmallHash, mac.doFinal().hex( ))
137
172
}
138
173
139
174
open fun givenMac_whenDoFinal_thenLengthMatchesOutput () {
140
175
assertExpectedHashes
141
- assertEquals(mac(KEY_SMALL .toMaxKeyLen()).doFinal().encodeToString( TestData .base16 ).length, expectedResetSmallHash.length)
176
+ assertEquals(mac(KEY_SMALL .toMaxKeyLen()).doFinal().hex( ).length, expectedResetSmallHash.length)
142
177
}
143
178
144
179
open fun givenMac_whenInstanceResetWithNewKey_thenDoFinalReturnsExpected () {
145
180
assertExpectedHashes
146
181
val mac = mac(KEY_SMALL .toMaxKeyLen())
147
182
updateSmall(mac)
148
- assertEquals(mac.doFinal().encodeToString( TestData .base16 ), expectedUpdateSmallHash)
149
- assertEquals(mac.doFinal().encodeToString( TestData .base16 ), expectedResetSmallHash)
183
+ assertEquals(mac.doFinal().hex( ), expectedUpdateSmallHash)
184
+ assertEquals(mac.doFinal().hex( ), expectedResetSmallHash)
150
185
151
186
mac.reset(KEY_MEDIUM .toMaxKeyLen())
152
187
updateMedium(mac)
153
- assertEquals(mac.doFinal().encodeToString( TestData .base16 ), expectedUpdateMediumHash)
154
- assertEquals(mac.doFinal().encodeToString( TestData .base16 ), expectedResetMediumHash)
188
+ assertEquals(mac.doFinal().hex( ), expectedUpdateMediumHash)
189
+ assertEquals(mac.doFinal().hex( ), expectedResetMediumHash)
155
190
}
156
191
157
192
protected companion object {
0 commit comments