Home | History | Annotate | Download | only in spec
      1 /*
      2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
      3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
      4  *
      5  * This code is free software; you can redistribute it and/or modify it
      6  * under the terms of the GNU General Public License version 2 only, as
      7  * published by the Free Software Foundation.  Oracle designates this
      8  * particular file as subject to the "Classpath" exception as provided
      9  * by Oracle in the LICENSE file that accompanied this code.
     10  *
     11  * This code is distributed in the hope that it will be useful, but WITHOUT
     12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
     13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     14  * version 2 for more details (a copy is included in the LICENSE file that
     15  * accompanied this code).
     16  *
     17  * You should have received a copy of the GNU General Public License version
     18  * 2 along with this work; if not, write to the Free Software Foundation,
     19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
     20  *
     21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
     22  * or visit www.oracle.com if you need additional information or have any
     23  * questions.
     24  */
     25 
     26 package javax.crypto.spec;
     27 
     28 import java.security.spec.AlgorithmParameterSpec;
     29 
     30 /**
     31  * This class specifies the set of parameters used with password-based
     32  * encryption (PBE), as defined in the
     33  * <a href="http://www.ietf.org/rfc/rfc2898.txt">PKCS #5</a>
     34  * standard.
     35  *
     36  * @author Jan Luehe
     37  *
     38  * @since 1.4
     39  */
     40 public class PBEParameterSpec implements AlgorithmParameterSpec {
     41 
     42     private byte[] salt;
     43     private int iterationCount;
     44     private AlgorithmParameterSpec paramSpec = null;
     45 
     46     /**
     47      * Constructs a parameter set for password-based encryption as defined in
     48      * the PKCS #5 standard.
     49      *
     50      * @param salt the salt. The contents of <code>salt</code> are copied
     51      * to protect against subsequent modification.
     52      * @param iterationCount the iteration count.
     53      * @exception NullPointerException if <code>salt</code> is null.
     54      */
     55     public PBEParameterSpec(byte[] salt, int iterationCount) {
     56         this.salt = salt.clone();
     57         this.iterationCount = iterationCount;
     58     }
     59 
     60     /**
     61      * Constructs a parameter set for password-based encryption as defined in
     62      * the PKCS #5 standard.
     63      *
     64      * @param salt the salt. The contents of <code>salt</code> are copied
     65      * to protect against subsequent modification.
     66      * @param iterationCount the iteration count.
     67      * @param paramSpec the cipher algorithm parameter specification, which
     68      * may be null.
     69      * @exception NullPointerException if <code>salt</code> is null.
     70      *
     71      * @since 1.8
     72      */
     73     public PBEParameterSpec(byte[] salt, int iterationCount,
     74             AlgorithmParameterSpec paramSpec) {
     75         this.salt = salt.clone();
     76         this.iterationCount = iterationCount;
     77         this.paramSpec = paramSpec;
     78     }
     79 
     80     /**
     81      * Returns the salt.
     82      *
     83      * @return the salt. Returns a new array
     84      * each time this method is called.
     85      */
     86     public byte[] getSalt() {
     87         return this.salt.clone();
     88     }
     89 
     90     /**
     91      * Returns the iteration count.
     92      *
     93      * @return the iteration count
     94      */
     95     public int getIterationCount() {
     96         return this.iterationCount;
     97     }
     98 
     99     /**
    100      * Returns the cipher algorithm parameter specification.
    101      *
    102      * @return the parameter specification, or null if none was set.
    103      *
    104      * @since 1.8
    105      */
    106     public AlgorithmParameterSpec getParameterSpec() {
    107         return this.paramSpec;
    108     }
    109 }
    110