1 /*
2  * Copyright 2014 The Netty Project
3  *
4  * The Netty Project licenses this file to you under the Apache License,
5  * version 2.0 (the "License"); you may not use this file except in compliance
6  * with the License. You may obtain a copy of the License at:
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations
14  * under the License.
15  */

16 package io.netty.handler.ssl;
17
18 import io.netty.util.internal.ObjectUtil;
19
20 import javax.net.ssl.SSLEngine;
21 import java.util.ArrayList;
22 import java.util.List;
23 import java.util.Set;
24
25 /**
26  * This class will filter all requested ciphers out that are not supported by the current {@link SSLEngine}.
27  */

28 public final class SupportedCipherSuiteFilter implements CipherSuiteFilter {
29     public static final SupportedCipherSuiteFilter INSTANCE = new SupportedCipherSuiteFilter();
30
31     private SupportedCipherSuiteFilter() { }
32
33     @Override
34     public String[] filterCipherSuites(Iterable<String> ciphers, List<String> defaultCiphers,
35             Set<String> supportedCiphers) {
36         ObjectUtil.checkNotNull(defaultCiphers, "defaultCiphers");
37         ObjectUtil.checkNotNull(supportedCiphers, "supportedCiphers");
38
39         final List<String> newCiphers;
40         if (ciphers == null) {
41             newCiphers = new ArrayList<String>(defaultCiphers.size());
42             ciphers = defaultCiphers;
43         } else {
44             newCiphers = new ArrayList<String>(supportedCiphers.size());
45         }
46         for (String c : ciphers) {
47             if (c == null) {
48                 break;
49             }
50             if (supportedCiphers.contains(c)) {
51                 newCiphers.add(c);
52             }
53         }
54         return newCiphers.toArray(new String[0]);
55     }
56
57 }
58