Skip to content

Commit ea6d7c6

Browse files
committed
[refactor] EC spec conversion to go through same place
1 parent 4234dd5 commit ea6d7c6

File tree

1 file changed

+28
-28
lines changed

1 file changed

+28
-28
lines changed

src/main/java/org/jruby/ext/openssl/PKeyEC.java

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -600,9 +600,13 @@ public IRubyObject set_public_key(final ThreadContext context, final IRubyObject
600600
}
601601
}
602602

603+
/**
604+
* @see ECNamedCurveSpec
605+
*/
603606
private static ECParameterSpec getParamSpec(final String curveName) {
604-
ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec(curveName);
605-
return new ECNamedCurveSpec(spec.getName(), spec.getCurve(), spec.getG(), spec.getN(), spec.getH(), spec.getSeed());
607+
final ECNamedCurveParameterSpec ecCurveParamSpec = ECNamedCurveTable.getParameterSpec(curveName);
608+
final EllipticCurve curve = EC5Util.convertCurve(ecCurveParamSpec.getCurve(), ecCurveParamSpec.getSeed());
609+
return EC5Util.convertSpec(curve, ecCurveParamSpec);
606610
}
607611

608612
private ECParameterSpec getParamSpec() {
@@ -722,7 +726,7 @@ static void createGroup(final Ruby runtime, final RubyClass EC, final RubyClass
722726
}
723727

724728
private transient PKeyEC key;
725-
private ECParameterSpec paramSpec;
729+
private transient ECParameterSpec paramSpec;
726730

727731
private PointConversion conversionForm = PointConversion.UNCOMPRESSED;
728732

@@ -752,10 +756,6 @@ public IRubyObject initialize(final ThreadContext context, final IRubyObject[] a
752756
}
753757

754758
this.curve_name = arg.convertToString();
755-
756-
final ECNamedCurveParameterSpec ecCurveParamSpec = ECNamedCurveTable.getParameterSpec(curve_name.toString());
757-
final EllipticCurve curve = EC5Util.convertCurve(ecCurveParamSpec.getCurve(), ecCurveParamSpec.getSeed());
758-
this.paramSpec = EC5Util.convertSpec(curve, ecCurveParamSpec);
759759
}
760760
return this;
761761
}
@@ -768,59 +768,56 @@ private String getCurveName() {
768768
@Override
769769
@JRubyMethod(name = { "==", "eql?" })
770770
public IRubyObject op_equal(final ThreadContext context, final IRubyObject obj) {
771-
if ( paramSpec == null ) return context.nil;
771+
final Ruby runtime = context.runtime;
772772
if ( obj instanceof Group ) {
773773
final Group that = (Group) obj;
774-
boolean equals = this.paramSpec.equals(that.paramSpec);
775-
return context.runtime.newBoolean(equals);
774+
return context.runtime.newBoolean(this.implCurveName(runtime).equals(that.implCurveName(runtime)));
776775
}
777776
return context.runtime.getFalse();
778777
}
779778

780779
@JRubyMethod
781780
public IRubyObject curve_name(final ThreadContext context) {
781+
return implCurveName(context.runtime).dup();
782+
}
783+
784+
private RubyString implCurveName(final Ruby runtime) {
782785
if (curve_name == null) {
783786
String prefix, curveName = key.getCurveName();
784787
// BC 1.54: "brainpoolP512t1" 1.55: "brainpoolp512t1"
785788
if (curveName.startsWith(prefix = "brainpoolp")) {
786789
curveName = "brainpoolP" + curveName.substring(prefix.length());
787790
}
788-
curve_name = RubyString.newString(context.runtime, curveName);
791+
curve_name = RubyString.newString(runtime, curveName);
789792
}
790-
return curve_name.dup();
793+
return curve_name;
791794
}
792795

793796
@JRubyMethod
794797
public IRubyObject order(final ThreadContext context) {
795-
if ( paramSpec == null ) return context.nil;
796-
return BN.newBN(context.runtime, paramSpec.getOrder());
798+
return BN.newBN(context.runtime, getParamSpec().getOrder());
797799
}
798800

799801
@JRubyMethod
800802
public IRubyObject cofactor(final ThreadContext context) {
801-
if ( paramSpec == null ) return context.nil;
802-
return context.runtime.newFixnum(paramSpec.getCofactor());
803+
return context.runtime.newFixnum(getParamSpec().getCofactor());
803804
}
804805

805806
@JRubyMethod
806807
public IRubyObject seed(final ThreadContext context) {
807-
if ( paramSpec == null ) return context.nil;
808-
final byte[] seed = paramSpec.getCurve().getSeed();
808+
final byte[] seed = getCurve().getSeed();
809809
return seed == null ? context.nil : StringHelper.newString(context.runtime, seed);
810810
}
811811

812812
@JRubyMethod
813813
public IRubyObject degree(final ThreadContext context) {
814-
if ( paramSpec == null ) return context.nil;
815-
final int fieldSize = paramSpec.getCurve().getField().getFieldSize();
814+
final int fieldSize = getCurve().getField().getFieldSize();
816815
return context.runtime.newFixnum(fieldSize);
817816
}
818817

819818
@JRubyMethod
820819
public IRubyObject generator(final ThreadContext context) {
821-
if ( paramSpec == null ) return context.nil;
822-
final ECPoint generator = paramSpec.getGenerator();
823-
//final int bitLength = paramSpec.getOrder().bitLength();
820+
final ECPoint generator = getParamSpec().getGenerator();
824821
return new Point(context.runtime, generator, this);
825822
}
826823

@@ -846,11 +843,15 @@ public RubyString to_pem(final ThreadContext context, final IRubyObject[] args)
846843
}
847844
}
848845

849-
EllipticCurve getCurve() {
846+
private ECParameterSpec getParamSpec() {
850847
if (paramSpec == null) {
851-
paramSpec = getParamSpec(getCurveName());
848+
paramSpec = PKeyEC.getParamSpec(getCurveName());
852849
}
853-
return paramSpec.getCurve();
850+
return paramSpec;
851+
}
852+
853+
EllipticCurve getCurve() {
854+
return getParamSpec().getCurve();
854855
}
855856

856857
@JRubyMethod
@@ -992,8 +993,7 @@ private ECPoint asECPoint() {
992993

993994
private int bitLength() {
994995
assert group != null;
995-
assert group.paramSpec != null;
996-
return group.paramSpec.getOrder().bitLength();
996+
return group.getParamSpec().getOrder().bitLength();
997997
}
998998

999999
private PointConversion getPointConversionForm() {

0 commit comments

Comments
 (0)