blob: 3a81262be2fbe7e8e850355d2a87b43c4d2a7521 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.api.ldap.model.password;
import org.apache.directory.api.ldap.model.constants.LdapSecurityConstants;
import org.apache.directory.api.util.Strings;
/**
* A class to store all informations about the existing
* password found in the cache or get from the backend.
*
* This is necessary as we have to compute :
* - the used algorithm
* - the salt if any
* - the password itself.
*
* If we have a on-way encrypted password, it is stored using this
* format :
* {<algorithm>}<encrypted password>
* where the encrypted password format can be :
* - MD5/SHA : base64(<password>)
* - SMD5/SSH/PKCS5S2 : base64(<salted-password-digest><salt (4 or 8 bytes)>)
* - crypt : <salt (2 btytes)><password>
*
* Algorithm are currently MD5, SMD5, SHA, SSHA, SHA2, SSHA-2 (except SHA-224), PKCS5S2, CRYPT and empty
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class EncryptionMethod
{
private byte[] salt;
private LdapSecurityConstants algorithm;
public EncryptionMethod( LdapSecurityConstants algorithm, byte[] salt )
{
this.algorithm = algorithm;
this.salt = salt;
}
public LdapSecurityConstants getAlgorithm()
{
return algorithm;
}
public byte[] getSalt()
{
return salt;
}
public void setSalt( byte[] salt )
{
// just to make this class immutable, though we have a setter
if ( this.salt != null )
{
throw new IllegalStateException( "salt will only be allowed to set once" );
}
this.salt = salt;
}
@Override
public String toString()
{
return "EncryptionMethod [algorithm=" + algorithm.getName().toUpperCase() + ", salt="
+ Strings.dumpBytes( salt ) + "]";
}
}