001    /**
002     *  Licensed to the Apache Software Foundation (ASF) under one or more
003     *  contributor license agreements.  See the NOTICE file distributed with
004     *  this work for additional information regarding copyright ownership.
005     *  The ASF licenses this file to You under the Apache License, Version 2.0
006     *  (the "License"); you may not use this file except in compliance with
007     *  the License.  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     *  Unless required by applicable law or agreed to in writing, software
012     *  distributed under the License is distributed on an "AS IS" BASIS,
013     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     *  See the License for the specific language governing permissions and
015     *  limitations under the License.
016     */
017    
018    package org.apache.geronimo.util.crypto.params;
019    
020    public class DESedeParameters
021        extends DESParameters
022    {
023        /*
024         * DES-EDE Key length in bytes.
025         */
026        static public final int DES_EDE_KEY_LENGTH = 24;
027    
028        public DESedeParameters(
029            byte[]  key)
030        {
031            super(key);
032    
033            if (isWeakKey(key, 0, key.length))
034            {
035                throw new IllegalArgumentException("attempt to create weak DESede key");
036            }
037        }
038    
039        /**
040         * return true if the passed in key is a DES-EDE weak key.
041         *
042         * @param key bytes making up the key
043         * @param offset offset into the byte array the key starts at
044         * @param length number of bytes making up the key
045         */
046        public static boolean isWeakKey(
047            byte[]  key,
048            int     offset,
049            int     length)
050        {
051            for (int i = offset; i < length; i += DES_KEY_LENGTH)
052            {
053                if (DESParameters.isWeakKey(key, i))
054                {
055                    return true;
056                }
057            }
058    
059            return false;
060        }
061    
062        /**
063         * return true if the passed in key is a DES-EDE weak key.
064         *
065         * @param key bytes making up the key
066         * @param offset offset into the byte array the key starts at
067         */
068        public static boolean isWeakKey(
069            byte[]  key,
070            int     offset)
071        {
072            return isWeakKey(key, offset, key.length - offset);
073        }
074    }