removed obslete code
This commit is contained in:
@ -1,30 +0,0 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>de.muehlencord.shared</groupId>
|
||||
<artifactId>jmpass</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>jmpass</name>
|
||||
<url>http://www.mühlencord.de/</url>
|
||||
|
||||
<issueManagement>
|
||||
<system>Bugzilla</system>
|
||||
<url>https://jomu.timelord.de/bugzilla/</url>
|
||||
</issueManagement>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.10</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@ -1,56 +0,0 @@
|
||||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package de.muehlencord.shared.jmpass;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author jomu
|
||||
*/
|
||||
public class Bcrypt {
|
||||
|
||||
// http://en.wikipedia.org/wiki/Bcrypt
|
||||
|
||||
public String bcrypt(long cost, byte[] salt, String input) {
|
||||
String state = eksBlowfishSetup(cost, salt, input);
|
||||
String cText = "OrpheanBeholderScryDoubt"; // FIXME - what is this string for, 3 64 bit blocks
|
||||
for (int i=0; i<64; i++) { // FIXME - why 64?
|
||||
cText = encryptECB(state, cText);
|
||||
}
|
||||
return concatenate(cost, salt, cText);
|
||||
}
|
||||
|
||||
private String eksBlowfishSetup(long cost, String salt, String key) {
|
||||
String state = initState();
|
||||
state = expandKey (state, salt, key);
|
||||
// TODO buffer overflow check, max size of cost
|
||||
long rounds = Math.round(Math.pow(2, cost));
|
||||
for (int i=0; i<rounds; i++) {
|
||||
state = expandKey (state, 0, key);
|
||||
state = expandKey (state, 0, salt);
|
||||
}
|
||||
}
|
||||
|
||||
private String initState() {
|
||||
throw new UnsupportedOperationException("Not yet implemented");
|
||||
}
|
||||
|
||||
private String expandKey(String state, String salt, String input) {
|
||||
throw new UnsupportedOperationException("Not yet implemented");
|
||||
}
|
||||
|
||||
|
||||
private String encryptECB(String state, String cText) {
|
||||
throw new UnsupportedOperationException("Not yet implemented");
|
||||
}
|
||||
|
||||
private String concatenate(long cost, byte[] salt, String cText) {
|
||||
throw new UnsupportedOperationException("Not yet implemented");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -1,82 +0,0 @@
|
||||
package de.muehlencord.shared.jmpass;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.SecureRandom;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author joern@muehlencord.de
|
||||
*/
|
||||
public class Password {
|
||||
|
||||
private final static int SALT_BYTES = 16;
|
||||
private long rounds;
|
||||
private byte[] hash;
|
||||
private byte[] salt;
|
||||
|
||||
public Password(int iterations) {
|
||||
rounds = Math.round(Math.pow(2, iterations));
|
||||
}
|
||||
|
||||
public void hashPassword(String password) throws PasswordException {
|
||||
try {
|
||||
salt = createSalt();
|
||||
hash = createHash(password, salt);
|
||||
} catch (Exception ex) {
|
||||
throw new PasswordException("Error while hashing password. Reason: " + ex.getMessage(), ex);
|
||||
}
|
||||
}
|
||||
|
||||
public String getPasswordHashString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("$");
|
||||
sb.append(rounds);
|
||||
sb.append("$");
|
||||
sb.append(salt);
|
||||
sb.append(hash);
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
private int getIterationsFromString(String hashedPassword) throws PasswordException {
|
||||
if (hashedPassword.length() < 20) {
|
||||
throw new PasswordException("Given string is not a valid hashed password");
|
||||
}
|
||||
|
||||
String roundsString = hashedPassword.substring(0, 3);
|
||||
if ((!roundsString.startsWith("$")) || (!roundsString.endsWith("$"))) {
|
||||
throw new PasswordException("Cannot read iterations value from given string");
|
||||
}
|
||||
|
||||
try {
|
||||
int rounds = Integer.parseInt(roundsString.substring(1, 2));
|
||||
return rounds;
|
||||
} catch (Exception ex) {
|
||||
throw new PasswordException("Cannot parse iterations value from given string", ex);
|
||||
}
|
||||
}
|
||||
|
||||
private byte[] createSalt() throws NoSuchAlgorithmException {
|
||||
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
|
||||
// Salt generation 64 bits long
|
||||
byte[] bSalt = new byte[SALT_BYTES];
|
||||
random.nextBytes(bSalt);
|
||||
return bSalt;
|
||||
}
|
||||
|
||||
private byte[] createHash(String password, byte[] salt) throws UnsupportedEncodingException, NoSuchAlgorithmException {
|
||||
MessageDigest digest = MessageDigest.getInstance("SHA-1");
|
||||
digest.reset();
|
||||
digest.update(salt);
|
||||
|
||||
byte[] input = digest.digest(password.getBytes("UTF-8"));
|
||||
for (int i = 0; i < rounds; i++) {
|
||||
digest.reset();
|
||||
input = digest.digest(input);
|
||||
}
|
||||
return input;
|
||||
}
|
||||
}
|
||||
@ -1,26 +0,0 @@
|
||||
package de.muehlencord.shared.jmpass;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author joern@muehlencord.de
|
||||
*/
|
||||
class PasswordException extends Exception {
|
||||
|
||||
/**
|
||||
* creats an instance of PasswordException with the given message
|
||||
* @param msg the msg of the exception
|
||||
*/
|
||||
public PasswordException(String msg) {
|
||||
super (msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* creats an instance of PasswordException with the given message
|
||||
* @param msg the msg of the exception
|
||||
* @param th the causing exception
|
||||
*/
|
||||
public PasswordException(String msg, Throwable th) {
|
||||
super (msg);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,16 +0,0 @@
|
||||
package de.muehlencord.shared.jmpass;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author joern@muehlencord.de
|
||||
*/
|
||||
public class PasswordValidator {
|
||||
|
||||
public static boolean validatePassword(String plainPassword, String hashedPassword) {
|
||||
Password pw = new Password(8);
|
||||
pw.hashPassword(plainPassword);
|
||||
|
||||
String hash = pw.getPasswordHashString();
|
||||
return hashedPassword.equals(hash);
|
||||
}
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
package de.muehlencord.shared.jmpass;
|
||||
|
||||
import junit.framework.Test;
|
||||
import junit.framework.TestCase;
|
||||
import junit.framework.TestSuite;
|
||||
|
||||
/**
|
||||
* Unit test for simple App.
|
||||
*/
|
||||
public class AppTest
|
||||
extends TestCase
|
||||
{
|
||||
/**
|
||||
* Create the test case
|
||||
*
|
||||
* @param testName name of the test case
|
||||
*/
|
||||
public AppTest( String testName )
|
||||
{
|
||||
super( testName );
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the suite of tests being tested
|
||||
*/
|
||||
public static Test suite()
|
||||
{
|
||||
return new TestSuite( AppTest.class );
|
||||
}
|
||||
|
||||
/**
|
||||
* Rigourous Test :-)
|
||||
*/
|
||||
public void testApp()
|
||||
{
|
||||
assertTrue( true );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user