1 // Copyright 2023 Google LLC 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 // 15 //////////////////////////////////////////////////////////////////////////////// 16 17 package com.google.crypto.tink.aead; 18 19 import static com.google.common.truth.Truth.assertThat; 20 import static org.junit.Assert.assertThrows; 21 22 import java.security.GeneralSecurityException; 23 import org.junit.Test; 24 import org.junit.runner.RunWith; 25 import org.junit.runners.JUnit4; 26 27 @RunWith(JUnit4.class) 28 public final class AesCtrHmacAeadParametersTest { 29 @Test buildParametersAndGetProperties()30 public void buildParametersAndGetProperties() throws Exception { 31 AesCtrHmacAeadParameters parameters = 32 AesCtrHmacAeadParameters.builder() 33 .setAesKeySizeBytes(16) 34 .setHmacKeySizeBytes(16) 35 .setIvSizeBytes(16) 36 .setTagSizeBytes(21) 37 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 38 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 39 .build(); 40 assertThat(parameters.getAesKeySizeBytes()).isEqualTo(16); 41 assertThat(parameters.getHmacKeySizeBytes()).isEqualTo(16); 42 assertThat(parameters.getCiphertextOverheadSizeBytes()).isEqualTo(37); 43 assertThat(parameters.getIvSizeBytes()).isEqualTo(16); 44 assertThat(parameters.getTagSizeBytes()).isEqualTo(21); 45 assertThat(parameters.getHashType()).isEqualTo(AesCtrHmacAeadParameters.HashType.SHA256); 46 assertThat(parameters.getVariant()).isEqualTo(AesCtrHmacAeadParameters.Variant.NO_PREFIX); 47 assertThat(parameters.hasIdRequirement()).isFalse(); 48 } 49 50 @Test buildParametersWithoutSettingVariant_hasNoPrefix()51 public void buildParametersWithoutSettingVariant_hasNoPrefix() throws Exception { 52 AesCtrHmacAeadParameters parameters = 53 AesCtrHmacAeadParameters.builder() 54 .setAesKeySizeBytes(16) 55 .setHmacKeySizeBytes(16) 56 .setIvSizeBytes(16) 57 .setTagSizeBytes(21) 58 .setHashType(AesCtrHmacAeadParameters.HashType.SHA512) 59 .build(); 60 assertThat(parameters.getCiphertextOverheadSizeBytes()).isEqualTo(37); 61 assertThat(parameters.getTagSizeBytes()).isEqualTo(21); 62 assertThat(parameters.getVariant()).isEqualTo(AesCtrHmacAeadParameters.Variant.NO_PREFIX); 63 assertThat(parameters.hasIdRequirement()).isFalse(); 64 } 65 66 @Test buildParametersWithoutSettingAesKeySize_fails()67 public void buildParametersWithoutSettingAesKeySize_fails() throws Exception { 68 assertThrows( 69 GeneralSecurityException.class, 70 () -> 71 AesCtrHmacAeadParameters.builder() 72 .setHmacKeySizeBytes(16) 73 .setIvSizeBytes(16) 74 .setTagSizeBytes(21) 75 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 76 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 77 .build()); 78 } 79 80 @Test buildParametersWithoutSettingHmacKeySize_fails()81 public void buildParametersWithoutSettingHmacKeySize_fails() throws Exception { 82 assertThrows( 83 GeneralSecurityException.class, 84 () -> 85 AesCtrHmacAeadParameters.builder() 86 .setAesKeySizeBytes(16) 87 .setTagSizeBytes(21) 88 .setIvSizeBytes(16) 89 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 90 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 91 .build()); 92 } 93 94 @Test buildParametersWithoutSettingTagSize_fails()95 public void buildParametersWithoutSettingTagSize_fails() throws Exception { 96 assertThrows( 97 GeneralSecurityException.class, 98 () -> 99 AesCtrHmacAeadParameters.builder() 100 .setAesKeySizeBytes(16) 101 .setHmacKeySizeBytes(16) 102 .setIvSizeBytes(16) 103 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 104 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 105 .build()); 106 } 107 108 @Test buildParametersWithoutSettingIvSize_fails()109 public void buildParametersWithoutSettingIvSize_fails() throws Exception { 110 assertThrows( 111 GeneralSecurityException.class, 112 () -> 113 AesCtrHmacAeadParameters.builder() 114 .setAesKeySizeBytes(16) 115 .setHmacKeySizeBytes(16) 116 .setTagSizeBytes(21) 117 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 118 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 119 .build()); 120 } 121 122 @Test buildParametersWithoutSettingHashType_fails()123 public void buildParametersWithoutSettingHashType_fails() throws Exception { 124 assertThrows( 125 GeneralSecurityException.class, 126 () -> 127 AesCtrHmacAeadParameters.builder() 128 .setAesKeySizeBytes(16) 129 .setHmacKeySizeBytes(16) 130 .setIvSizeBytes(16) 131 .setTagSizeBytes(21) 132 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 133 .build()); 134 } 135 136 @Test buildParametersWithVariantSetToNull_fails()137 public void buildParametersWithVariantSetToNull_fails() throws Exception { 138 assertThrows( 139 GeneralSecurityException.class, 140 () -> 141 AesCtrHmacAeadParameters.builder() 142 .setAesKeySizeBytes(16) 143 .setHmacKeySizeBytes(16) 144 .setIvSizeBytes(16) 145 .setTagSizeBytes(21) 146 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 147 .setVariant(null) 148 .build()); 149 } 150 151 @Test buildParametersWithTinkPrefix()152 public void buildParametersWithTinkPrefix() throws Exception { 153 AesCtrHmacAeadParameters parameters = 154 AesCtrHmacAeadParameters.builder() 155 .setAesKeySizeBytes(16) 156 .setHmacKeySizeBytes(16) 157 .setTagSizeBytes(21) 158 .setIvSizeBytes(16) 159 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 160 .setVariant(AesCtrHmacAeadParameters.Variant.TINK) 161 .build(); 162 assertThat(parameters.getCiphertextOverheadSizeBytes()).isEqualTo(42); 163 assertThat(parameters.getTagSizeBytes()).isEqualTo(21); 164 assertThat(parameters.getVariant()).isEqualTo(AesCtrHmacAeadParameters.Variant.TINK); 165 assertThat(parameters.hasIdRequirement()).isTrue(); 166 } 167 168 @Test buildParametersWithCrunchyPrefix()169 public void buildParametersWithCrunchyPrefix() throws Exception { 170 AesCtrHmacAeadParameters parameters = 171 AesCtrHmacAeadParameters.builder() 172 .setAesKeySizeBytes(16) 173 .setHmacKeySizeBytes(16) 174 .setTagSizeBytes(21) 175 .setIvSizeBytes(16) 176 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 177 .setVariant(AesCtrHmacAeadParameters.Variant.CRUNCHY) 178 .build(); 179 assertThat(parameters.getCiphertextOverheadSizeBytes()).isEqualTo(42); 180 assertThat(parameters.getTagSizeBytes()).isEqualTo(21); 181 assertThat(parameters.getVariant()).isEqualTo(AesCtrHmacAeadParameters.Variant.CRUNCHY); 182 assertThat(parameters.hasIdRequirement()).isTrue(); 183 } 184 185 @Test buildParametersWithBadAesKeySize_fails()186 public void buildParametersWithBadAesKeySize_fails() throws Exception { 187 assertThrows( 188 GeneralSecurityException.class, 189 () -> 190 AesCtrHmacAeadParameters.builder() 191 .setAesKeySizeBytes(40) 192 .setHmacKeySizeBytes(16) 193 .setTagSizeBytes(21) 194 .setIvSizeBytes(11) 195 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 196 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 197 .build()); 198 } 199 200 @Test buildParametersWithBadHmacKeySize_fails()201 public void buildParametersWithBadHmacKeySize_fails() throws Exception { 202 assertThrows( 203 GeneralSecurityException.class, 204 () -> 205 AesCtrHmacAeadParameters.builder() 206 .setAesKeySizeBytes(16) 207 .setHmacKeySizeBytes(12) 208 .setTagSizeBytes(21) 209 .setIvSizeBytes(16) 210 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 211 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 212 .build()); 213 } 214 215 @Test buildParametersWithBadIvSize_fails()216 public void buildParametersWithBadIvSize_fails() throws Exception { 217 assertThrows( 218 GeneralSecurityException.class, 219 () -> 220 AesCtrHmacAeadParameters.builder() 221 .setAesKeySizeBytes(16) 222 .setHmacKeySizeBytes(12) 223 .setTagSizeBytes(21) 224 .setIvSizeBytes(11) 225 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 226 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 227 .build()); 228 229 assertThrows( 230 GeneralSecurityException.class, 231 () -> 232 AesCtrHmacAeadParameters.builder() 233 .setAesKeySizeBytes(16) 234 .setHmacKeySizeBytes(12) 235 .setTagSizeBytes(21) 236 .setIvSizeBytes(17) 237 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 238 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 239 .build()); 240 } 241 242 @Test buildParametersWithSha1_acceptsTagSizesBetween10And20()243 public void buildParametersWithSha1_acceptsTagSizesBetween10And20() throws Exception { 244 assertThrows( 245 GeneralSecurityException.class, 246 () -> 247 AesCtrHmacAeadParameters.builder() 248 .setAesKeySizeBytes(16) 249 .setHmacKeySizeBytes(16) 250 .setTagSizeBytes(9) 251 .setIvSizeBytes(16) 252 .setHashType(AesCtrHmacAeadParameters.HashType.SHA1) 253 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 254 .build()); 255 assertThrows( 256 GeneralSecurityException.class, 257 () -> 258 AesCtrHmacAeadParameters.builder() 259 .setAesKeySizeBytes(16) 260 .setHmacKeySizeBytes(16) 261 .setTagSizeBytes(21) 262 .setIvSizeBytes(16) 263 .setHashType(AesCtrHmacAeadParameters.HashType.SHA1) 264 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 265 .build()); 266 267 AesCtrHmacAeadParameters unused = 268 AesCtrHmacAeadParameters.builder() 269 .setAesKeySizeBytes(16) 270 .setHmacKeySizeBytes(16) 271 .setTagSizeBytes(10) 272 .setIvSizeBytes(16) 273 .setHashType(AesCtrHmacAeadParameters.HashType.SHA1) 274 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 275 .build(); 276 unused = 277 AesCtrHmacAeadParameters.builder() 278 .setAesKeySizeBytes(16) 279 .setHmacKeySizeBytes(16) 280 .setTagSizeBytes(20) 281 .setIvSizeBytes(16) 282 .setHashType(AesCtrHmacAeadParameters.HashType.SHA1) 283 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 284 .build(); 285 } 286 287 @Test buildParametersWithSha224_acceptsTagSizesBetween10And28()288 public void buildParametersWithSha224_acceptsTagSizesBetween10And28() throws Exception { 289 assertThrows( 290 GeneralSecurityException.class, 291 () -> 292 AesCtrHmacAeadParameters.builder() 293 .setAesKeySizeBytes(16) 294 .setHmacKeySizeBytes(16) 295 .setTagSizeBytes(9) 296 .setIvSizeBytes(16) 297 .setHashType(AesCtrHmacAeadParameters.HashType.SHA224) 298 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 299 .build()); 300 assertThrows( 301 GeneralSecurityException.class, 302 () -> 303 AesCtrHmacAeadParameters.builder() 304 .setAesKeySizeBytes(16) 305 .setHmacKeySizeBytes(16) 306 .setTagSizeBytes(29) 307 .setIvSizeBytes(16) 308 .setHashType(AesCtrHmacAeadParameters.HashType.SHA224) 309 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 310 .build()); 311 312 AesCtrHmacAeadParameters unused = 313 AesCtrHmacAeadParameters.builder() 314 .setAesKeySizeBytes(16) 315 .setHmacKeySizeBytes(16) 316 .setTagSizeBytes(10) 317 .setIvSizeBytes(16) 318 .setHashType(AesCtrHmacAeadParameters.HashType.SHA224) 319 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 320 .build(); 321 unused = 322 AesCtrHmacAeadParameters.builder() 323 .setAesKeySizeBytes(16) 324 .setHmacKeySizeBytes(16) 325 .setTagSizeBytes(28) 326 .setIvSizeBytes(16) 327 .setHashType(AesCtrHmacAeadParameters.HashType.SHA224) 328 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 329 .build(); 330 } 331 332 @Test buildParametersWithSha256_acceptsTagSizesBetween10And32()333 public void buildParametersWithSha256_acceptsTagSizesBetween10And32() throws Exception { 334 assertThrows( 335 GeneralSecurityException.class, 336 () -> 337 AesCtrHmacAeadParameters.builder() 338 .setAesKeySizeBytes(16) 339 .setHmacKeySizeBytes(16) 340 .setTagSizeBytes(9) 341 .setIvSizeBytes(16) 342 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 343 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 344 .build()); 345 assertThrows( 346 GeneralSecurityException.class, 347 () -> 348 AesCtrHmacAeadParameters.builder() 349 .setAesKeySizeBytes(16) 350 .setHmacKeySizeBytes(16) 351 .setTagSizeBytes(33) 352 .setIvSizeBytes(16) 353 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 354 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 355 .build()); 356 357 AesCtrHmacAeadParameters unused = 358 AesCtrHmacAeadParameters.builder() 359 .setAesKeySizeBytes(16) 360 .setHmacKeySizeBytes(16) 361 .setTagSizeBytes(10) 362 .setIvSizeBytes(16) 363 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 364 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 365 .build(); 366 unused = 367 AesCtrHmacAeadParameters.builder() 368 .setAesKeySizeBytes(16) 369 .setHmacKeySizeBytes(16) 370 .setTagSizeBytes(32) 371 .setIvSizeBytes(16) 372 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 373 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 374 .build(); 375 } 376 377 @Test buildParametersWithSha384_acceptsTagSizesBetween10And48()378 public void buildParametersWithSha384_acceptsTagSizesBetween10And48() throws Exception { 379 assertThrows( 380 GeneralSecurityException.class, 381 () -> 382 AesCtrHmacAeadParameters.builder() 383 .setAesKeySizeBytes(16) 384 .setHmacKeySizeBytes(16) 385 .setTagSizeBytes(9) 386 .setIvSizeBytes(16) 387 .setHashType(AesCtrHmacAeadParameters.HashType.SHA384) 388 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 389 .build()); 390 assertThrows( 391 GeneralSecurityException.class, 392 () -> 393 AesCtrHmacAeadParameters.builder() 394 .setAesKeySizeBytes(16) 395 .setHmacKeySizeBytes(16) 396 .setTagSizeBytes(49) 397 .setIvSizeBytes(16) 398 .setHashType(AesCtrHmacAeadParameters.HashType.SHA384) 399 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 400 .build()); 401 AesCtrHmacAeadParameters unused = 402 AesCtrHmacAeadParameters.builder() 403 .setAesKeySizeBytes(16) 404 .setHmacKeySizeBytes(16) 405 .setTagSizeBytes(10) 406 .setIvSizeBytes(16) 407 .setHashType(AesCtrHmacAeadParameters.HashType.SHA384) 408 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 409 .build(); 410 unused = 411 AesCtrHmacAeadParameters.builder() 412 .setAesKeySizeBytes(16) 413 .setHmacKeySizeBytes(16) 414 .setTagSizeBytes(48) 415 .setIvSizeBytes(16) 416 .setHashType(AesCtrHmacAeadParameters.HashType.SHA384) 417 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 418 .build(); 419 } 420 421 @Test buildParametersWithSha512_acceptsTagSizesBetween10And64()422 public void buildParametersWithSha512_acceptsTagSizesBetween10And64() throws Exception { 423 assertThrows( 424 GeneralSecurityException.class, 425 () -> 426 AesCtrHmacAeadParameters.builder() 427 .setAesKeySizeBytes(16) 428 .setHmacKeySizeBytes(16) 429 .setTagSizeBytes(9) 430 .setIvSizeBytes(16) 431 .setHashType(AesCtrHmacAeadParameters.HashType.SHA512) 432 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 433 .build()); 434 assertThrows( 435 GeneralSecurityException.class, 436 () -> 437 AesCtrHmacAeadParameters.builder() 438 .setAesKeySizeBytes(16) 439 .setHmacKeySizeBytes(16) 440 .setTagSizeBytes(65) 441 .setIvSizeBytes(16) 442 .setHashType(AesCtrHmacAeadParameters.HashType.SHA512) 443 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 444 .build()); 445 AesCtrHmacAeadParameters unused = 446 AesCtrHmacAeadParameters.builder() 447 .setAesKeySizeBytes(16) 448 .setHmacKeySizeBytes(16) 449 .setTagSizeBytes(10) 450 .setIvSizeBytes(16) 451 .setHashType(AesCtrHmacAeadParameters.HashType.SHA512) 452 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 453 .build(); 454 unused = 455 AesCtrHmacAeadParameters.builder() 456 .setAesKeySizeBytes(16) 457 .setHmacKeySizeBytes(16) 458 .setTagSizeBytes(64) 459 .setIvSizeBytes(16) 460 .setHashType(AesCtrHmacAeadParameters.HashType.SHA512) 461 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 462 .build(); 463 } 464 465 @Test testEqualsAndEqualHashCode()466 public void testEqualsAndEqualHashCode() throws Exception { 467 AesCtrHmacAeadParameters parameters1 = 468 AesCtrHmacAeadParameters.builder() 469 .setAesKeySizeBytes(16) 470 .setHmacKeySizeBytes(16) 471 .setTagSizeBytes(21) 472 .setIvSizeBytes(16) 473 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 474 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 475 .build(); 476 AesCtrHmacAeadParameters parameters2 = 477 AesCtrHmacAeadParameters.builder() 478 .setAesKeySizeBytes(16) 479 .setHmacKeySizeBytes(16) 480 .setTagSizeBytes(21) 481 .setIvSizeBytes(16) 482 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 483 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 484 .build(); 485 486 assertThat(parameters1).isEqualTo(parameters2); 487 assertThat(parameters1.hashCode()).isEqualTo(parameters2.hashCode()); 488 } 489 490 @Test testNotEqualandNotEqualHashCode()491 public void testNotEqualandNotEqualHashCode() throws Exception { 492 AesCtrHmacAeadParameters parameters1 = 493 AesCtrHmacAeadParameters.builder() 494 .setAesKeySizeBytes(16) 495 .setHmacKeySizeBytes(16) 496 .setTagSizeBytes(21) 497 .setIvSizeBytes(16) 498 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 499 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 500 .build(); 501 502 AesCtrHmacAeadParameters parameters2 = 503 AesCtrHmacAeadParameters.builder() 504 .setAesKeySizeBytes(32) 505 .setHmacKeySizeBytes(16) 506 .setTagSizeBytes(21) 507 .setIvSizeBytes(16) 508 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 509 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 510 .build(); 511 assertThat(parameters1).isNotEqualTo(parameters2); 512 assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode()); 513 514 parameters2 = 515 AesCtrHmacAeadParameters.builder() 516 .setAesKeySizeBytes(16) 517 .setHmacKeySizeBytes(16) 518 .setTagSizeBytes(22) 519 .setIvSizeBytes(16) 520 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 521 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 522 .build(); 523 assertThat(parameters1).isNotEqualTo(parameters2); 524 assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode()); 525 526 parameters2 = 527 AesCtrHmacAeadParameters.builder() 528 .setAesKeySizeBytes(16) 529 .setHmacKeySizeBytes(16) 530 .setTagSizeBytes(21) 531 .setIvSizeBytes(16) 532 .setHashType(AesCtrHmacAeadParameters.HashType.SHA384) 533 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 534 .build(); 535 assertThat(parameters1).isNotEqualTo(parameters2); 536 assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode()); 537 538 parameters2 = 539 AesCtrHmacAeadParameters.builder() 540 .setAesKeySizeBytes(16) 541 .setHmacKeySizeBytes(16) 542 .setTagSizeBytes(21) 543 .setIvSizeBytes(14) 544 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 545 .setVariant(AesCtrHmacAeadParameters.Variant.NO_PREFIX) 546 .build(); 547 assertThat(parameters1).isNotEqualTo(parameters2); 548 assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode()); 549 550 parameters2 = 551 AesCtrHmacAeadParameters.builder() 552 .setAesKeySizeBytes(16) 553 .setHmacKeySizeBytes(16) 554 .setTagSizeBytes(21) 555 .setIvSizeBytes(16) 556 .setHashType(AesCtrHmacAeadParameters.HashType.SHA256) 557 .setVariant(AesCtrHmacAeadParameters.Variant.TINK) 558 .build(); 559 assertThat(parameters1).isNotEqualTo(parameters2); 560 assertThat(parameters1.hashCode()).isNotEqualTo(parameters2.hashCode()); 561 } 562 } 563