View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.codec.digest;
19  
20  import static org.junit.jupiter.api.Assertions.assertNotNull;
21  import static org.junit.jupiter.api.Assertions.assertThrowsExactly;
22  
23  import org.junit.jupiter.api.Test;
24  import org.junitpioneer.jupiter.SetSystemProperty;
25  
26  class Sha2CryptKeyLengthTest {
27  
28      private static final String SHA256_SALT = "$5$abcdefghijklmnop";
29  
30      private static final String SHA512_SALT = "$6$abcdefghijklmnop";
31  
32      @Test
33      void testKeyLengthAboveCeilingRejectedByCrypt() {
34          assertThrowsExactly(IllegalArgumentException.class, () -> Crypt.crypt(new byte[4097], SHA256_SALT));
35          assertThrowsExactly(IllegalArgumentException.class, () -> Crypt.crypt(new byte[4097], SHA512_SALT));
36          assertThrowsExactly(IllegalArgumentException.class, () -> Crypt.crypt(new byte[4097]));
37      }
38  
39      @Test
40      void testKeyLengthAboveCeilingRejectedBySha2Crypt() {
41          assertThrowsExactly(IllegalArgumentException.class, () -> Sha2Crypt.sha256Crypt(new byte[4097], SHA256_SALT));
42          assertThrowsExactly(IllegalArgumentException.class, () -> Sha2Crypt.sha512Crypt(new byte[4097], SHA512_SALT));
43      }
44  
45      @Test
46      void testKeyLengthAtCeilingAccepted() {
47          assertNotNull(Sha2Crypt.sha256Crypt(new byte[4096], SHA256_SALT));
48          assertNotNull(Sha2Crypt.sha512Crypt(new byte[4096], SHA512_SALT));
49      }
50  
51      @Test
52      @SetSystemProperty(key = Sha2Crypt.KEY_MAX_PROPERTY, value = "8192")
53      void testKeyLengthCeilingOverrideRestoresPreviousValue() {
54          assertNotNull(Sha2Crypt.sha512Crypt(new byte[8192], SHA512_SALT));
55      }
56  }