@@ -600,9 +600,13 @@ public IRubyObject set_public_key(final ThreadContext context, final IRubyObject
600
600
}
601
601
}
602
602
603
+ /**
604
+ * @see ECNamedCurveSpec
605
+ */
603
606
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 );
606
610
}
607
611
608
612
private ECParameterSpec getParamSpec () {
@@ -722,7 +726,7 @@ static void createGroup(final Ruby runtime, final RubyClass EC, final RubyClass
722
726
}
723
727
724
728
private transient PKeyEC key ;
725
- private ECParameterSpec paramSpec ;
729
+ private transient ECParameterSpec paramSpec ;
726
730
727
731
private PointConversion conversionForm = PointConversion .UNCOMPRESSED ;
728
732
@@ -752,10 +756,6 @@ public IRubyObject initialize(final ThreadContext context, final IRubyObject[] a
752
756
}
753
757
754
758
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 );
759
759
}
760
760
return this ;
761
761
}
@@ -768,59 +768,56 @@ private String getCurveName() {
768
768
@ Override
769
769
@ JRubyMethod (name = { "==" , "eql?" })
770
770
public IRubyObject op_equal (final ThreadContext context , final IRubyObject obj ) {
771
- if ( paramSpec == null ) return context .nil ;
771
+ final Ruby runtime = context .runtime ;
772
772
if ( obj instanceof Group ) {
773
773
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 )));
776
775
}
777
776
return context .runtime .getFalse ();
778
777
}
779
778
780
779
@ JRubyMethod
781
780
public IRubyObject curve_name (final ThreadContext context ) {
781
+ return implCurveName (context .runtime ).dup ();
782
+ }
783
+
784
+ private RubyString implCurveName (final Ruby runtime ) {
782
785
if (curve_name == null ) {
783
786
String prefix , curveName = key .getCurveName ();
784
787
// BC 1.54: "brainpoolP512t1" 1.55: "brainpoolp512t1"
785
788
if (curveName .startsWith (prefix = "brainpoolp" )) {
786
789
curveName = "brainpoolP" + curveName .substring (prefix .length ());
787
790
}
788
- curve_name = RubyString .newString (context . runtime , curveName );
791
+ curve_name = RubyString .newString (runtime , curveName );
789
792
}
790
- return curve_name . dup () ;
793
+ return curve_name ;
791
794
}
792
795
793
796
@ JRubyMethod
794
797
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 ());
797
799
}
798
800
799
801
@ JRubyMethod
800
802
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 ());
803
804
}
804
805
805
806
@ JRubyMethod
806
807
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 ();
809
809
return seed == null ? context .nil : StringHelper .newString (context .runtime , seed );
810
810
}
811
811
812
812
@ JRubyMethod
813
813
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 ();
816
815
return context .runtime .newFixnum (fieldSize );
817
816
}
818
817
819
818
@ JRubyMethod
820
819
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 ();
824
821
return new Point (context .runtime , generator , this );
825
822
}
826
823
@@ -846,11 +843,15 @@ public RubyString to_pem(final ThreadContext context, final IRubyObject[] args)
846
843
}
847
844
}
848
845
849
- EllipticCurve getCurve () {
846
+ private ECParameterSpec getParamSpec () {
850
847
if (paramSpec == null ) {
851
- paramSpec = getParamSpec (getCurveName ());
848
+ paramSpec = PKeyEC . getParamSpec (getCurveName ());
852
849
}
853
- return paramSpec .getCurve ();
850
+ return paramSpec ;
851
+ }
852
+
853
+ EllipticCurve getCurve () {
854
+ return getParamSpec ().getCurve ();
854
855
}
855
856
856
857
@ JRubyMethod
@@ -992,8 +993,7 @@ private ECPoint asECPoint() {
992
993
993
994
private int bitLength () {
994
995
assert group != null ;
995
- assert group .paramSpec != null ;
996
- return group .paramSpec .getOrder ().bitLength ();
996
+ return group .getParamSpec ().getOrder ().bitLength ();
997
997
}
998
998
999
999
private PointConversion getPointConversionForm () {
0 commit comments