package de.persosim.simulator.perso.xstream; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import java.io.StringReader; import java.io.StringWriter; import java.math.BigInteger; import java.security.spec.ECField; import java.security.spec.ECFieldFp; import java.security.spec.ECParameterSpec; import java.security.spec.ECPoint; import java.security.spec.EllipticCurve; import org.junit.Before; import org.junit.Test; import com.thoughtworks.xstream.converters.ConversionException; import de.persosim.simulator.perso.PersonalizationFactory; import de.persosim.simulator.test.PersoSimTestCase; public class ECParameterSpecConverterTest extends PersoSimTestCase { ECField field; EllipticCurve curve; CurveConverter curveConverter; ECParameterSpec spec; ECPoint point; BigInteger n; int h; @Before public void setUp() { curveConverter = new CurveConverter(); field = new ECFieldFp(new BigInteger("76884956397045344220809746629001649093037950200943055203735601445031516197751")); curve = new EllipticCurve(field, new BigInteger("56698187605326110043627228396178346077120614539475214109386828188763884139993"), new BigInteger("17577232497321838841075697789794520262950426058923084567046852300633325438902")); point = new ECPoint(new BigInteger("63243729749562333355292243550312970334778175571054726587095381623627144114786"), new BigInteger("38218615093753523893122277964030810387585405539772602581557831887485717997975")); n = new BigInteger("76884956397045344220809746629001649092737531784414529538755519063063536359079"); h = 1; spec = new ECParameterSpec(curve, point, n, h); } /** * Marshals a ECParameterSpec object unmarshals it and marshals it again. * * All attributes must be equal. */ @Test public void testECParameterSpecConverter_MarshalUnmarshal_ECParameterSpec() { StringWriter writer = new StringWriter(); PersonalizationFactory.marshal(spec, writer); ECParameterSpec spec_unmarshal = (ECParameterSpec) PersonalizationFactory.unmarshal(new StringReader(writer.toString())); assertEquals("unmarshalled curve", spec.getCurve(), spec_unmarshal.getCurve()); assertEquals("unmarshalled G", spec.getGenerator(), spec_unmarshal.getGenerator()); assertEquals("unmarshalled order", spec.getOrder(), spec_unmarshal.getOrder()); assertEquals("unmarshalled cofactor", spec.getCofactor(), spec_unmarshal.getCofactor()); } /** * Marshals a ECParameterSpec object unmarshals it and marshals it again. * * All unmarshalled object content (from both objects) must be identical. */ @Test public void testECParameterSpecConverter_MarshalUnmarshalMarshal_ECParameterSpec() { StringWriter writer = new StringWriter(); PersonalizationFactory.marshal(spec, writer); ECParameterSpec specUnmarshal = (ECParameterSpec) PersonalizationFactory.unmarshal(new StringReader(writer.toString())); StringWriter writer2 = new StringWriter(); PersonalizationFactory.marshal(specUnmarshal, writer2); assertEquals("ECParameterSpecXml", writer.toString(), writer2.toString()); } /** * Try to to unmarshal ECParameterSpec, but the point object inside the curve is null. * * @throws ConversionException */ @Test(expected = ConversionException.class) public void testECParameterSpecConverter_UnmarshalECParameterSpec_PointIsNull() throws ConversionException{ spec = new ECParameterSpec(curve, point, n, h); StringWriter writer = new StringWriter(); PersonalizationFactory.marshal(spec, writer); String xmlParamSpec = writer.toString(); xmlParamSpec = xmlParamSpec.replace("<x>63243729749562333355292243550312970334778175571054726587095381623627144114786</x>", ""); assertNull(PersonalizationFactory.unmarshal(new StringReader(xmlParamSpec))); } /** * Try to to unmarshal ECParameterSpec, but the point curve is null. * * @throws ConversionException */ @Test(expected = ConversionException.class) public void testECParameterSpecConverter_UnmarshalECParameterSpec_CurveIsNull() throws ConversionException{ spec = new ECParameterSpec(curve, point, n, h); StringWriter writer = new StringWriter(); PersonalizationFactory.marshal(spec, writer); String xmlParamSpec = writer.toString(); xmlParamSpec = xmlParamSpec.replace("<p>76884956397045344220809746629001649093037950200943055203735601445031516197751</p>", ""); assertNull(PersonalizationFactory.unmarshal(new StringReader(xmlParamSpec))); } /** * Try to to unmarshal ECParameterSpec, but the point curve is null. * * @throws ConversionException */ @Test(expected = ConversionException.class) public void testECParameterSpecConverter_UnmarshalECParameterSpec_ECSpecIsNull() throws ConversionException{ spec = new ECParameterSpec(curve, point, n, h); StringWriter writer = new StringWriter(); PersonalizationFactory.marshal(spec, writer); String xmlParamSpec = writer.toString(); xmlParamSpec = xmlParamSpec.replace("<n>76884956397045344220809746629001649092737531784414529538755519063063536359079</n>", ""); assertNull(PersonalizationFactory.unmarshal(new StringReader(xmlParamSpec))); } }