/**
* TLS-Attacker - A Modular Penetration Testing Framework for TLS
*
* Copyright 2014-2016 Ruhr University Bochum / Hackmanit GmbH
*
* Licensed under Apache License 2.0
* http://www.apache.org/licenses/LICENSE-2.0
*/
package de.rub.nds.tlsattacker.attacks.ec;
import de.rub.nds.tlsattacker.tls.exceptions.ConfigurationException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
*
* @author Juraj Somorovsky - juraj.somorovsky@rub.de
*/
public class ICEPointReader {
static Logger LOGGER = LogManager.getLogger(ICEPointReader.class);
private ICEPointReader() {
}
/**
* Reads points for the attack on elliptic curves from a file specific for
* this named curve
*
* @param namedCurve
* @return
*/
public static List<ICEPoint> readPoints(String namedCurve) {
String namedCurveLow = namedCurve.toLowerCase();
String fileName = "points_" + namedCurveLow + ".txt";
BufferedReader br = new BufferedReader(new InputStreamReader(ICEPointReader.class.getClassLoader()
.getResourceAsStream(fileName)));
String line;
List<ICEPoint> points = new LinkedList<>();
try {
while ((line = br.readLine()) != null) {
if (line.length() != 0 && !line.startsWith("#")) {
String[] nums = line.split("\\s+,\\s+");
int order = Integer.parseInt(nums[0]);
BigInteger x = new BigInteger(nums[1], 16);
BigInteger y = new BigInteger(nums[2], 16);
points.add(new ICEPoint(order, x, y));
}
}
Collections.sort(points, new ICEPointCopmparator());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Using the following curves and points");
for (ICEPoint p : points) {
LOGGER.debug(p.getOrder() + " , " + p.getX().toString(16) + " , " + p.getY().toString(16));
}
}
return points;
} catch (IOException | NumberFormatException ex) {
throw new ConfigurationException(ex.getLocalizedMessage(), ex);
}
}
}