/**
 * This file is part of OCPsoft SocialPM: Agile Project Management Tools (SocialPM) 
 *
 * Copyright (c)2011 Lincoln Baxter, III <lincoln@ocpsoft.com> (OCPsoft)
 * Copyright (c)2011 OCPsoft.com (http://ocpsoft.com)
 * 
 * If you are developing and distributing open source applications under 
 * the GNU General Public License (GPL), then you are free to re-distribute SocialPM 
 * under the terms of the GPL, as follows:
 *
 * SocialPM is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * SocialPM is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with SocialPM.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * For individuals or entities who wish to use SocialPM privately, or
 * internally, the following terms do not apply:
 *  
 * For OEMs, ISVs, and VARs who wish to distribute SocialPM with their 
 * products, or host their product online, OCPsoft provides flexible 
 * OEM commercial licenses.
 * 
 * Optionally, Customers may choose a Commercial License. For additional 
 * details, contact an OCPsoft representative (sales@ocpsoft.com)
 */
package com.ocpsoft.socialpm.util.crypt;

import java.security.MessageDigest;

import javax.enterprise.inject.Typed;

import org.apache.commons.codec.binary.Base64;

@Typed(PasswordEncryptor.class)
public class MD5PasswordEncryptor implements PasswordEncryptor
{
   private static final long serialVersionUID = 1422059557145039442L;

   @Override
   public String encodePassword(final String password, final Object salt)
   {
      try
      {
         MessageDigest digest = MessageDigest.getInstance("MD5");
         digest.reset();
         digest.update(salt.toString().getBytes());
         byte[] passwordHash = digest.digest(password.getBytes());

         Base64 encoder = new Base64();
         byte[] encoded = encoder.encode(passwordHash);
         return new String(encoded);
      }
      catch (Exception e)
      {
         throw new RuntimeException(e);
      }
   }

   @Override
   public boolean isPasswordValid(final String cypherPass, final String password, final Object salt)
   {
      return cypherPass.equals(this.encodePassword(password, salt));
   }

}