@@ -227,10 +227,14 @@ public PKeyEC(Ruby runtime, RubyClass type) {
227
227
228
228
private String curveName ;
229
229
230
- private String getCurveName () { return curveName ; }
230
+ private String getCurveName () {
231
+ if (curveName == null && group != null ) {
232
+ curveName = group .getCurveName ();
233
+ }
234
+ return curveName ;
235
+ }
231
236
232
237
private ECNamedCurveParameterSpec getParameterSpec () {
233
- assert curveName != null ;
234
238
return ECNamedCurveTable .getParameterSpec (getCurveName ());
235
239
}
236
240
@@ -836,20 +840,20 @@ static void createGroup(final Ruby runtime, final RubyClass EC, final RubyClass
836
840
Group .defineAnnotatedMethods (Group .class );
837
841
}
838
842
839
- private transient PKeyEC key ;
840
843
private transient ECParameterSpec paramSpec ;
841
844
842
845
private PointConversion conversionForm = PointConversion .UNCOMPRESSED ;
843
846
844
- private RubyString curve_name ;
847
+ private String curveName ;
848
+ private RubyString impl_curve_name ;
845
849
846
850
public Group (Ruby runtime , RubyClass type ) {
847
851
super (runtime , type );
848
852
}
849
853
850
854
Group (Ruby runtime , PKeyEC key ) {
851
855
this (runtime , _EC (runtime ).getClass ("Group" ));
852
- this . key = key ;
856
+ setCurveName ( runtime , key . getCurveName ()) ;
853
857
}
854
858
855
859
@ JRubyMethod (rest = true , visibility = Visibility .PRIVATE )
@@ -860,19 +864,21 @@ public IRubyObject initialize(final ThreadContext context, final IRubyObject[] a
860
864
IRubyObject arg = args [0 ];
861
865
862
866
if ( arg instanceof Group ) {
863
- this .curve_name = ((Group ) arg ).implCurveName ( runtime ) ;
867
+ this .curveName = ((Group ) arg ).curveName ;
864
868
return this ;
865
869
}
866
870
867
- this .curve_name = arg .convertToString ();
871
+ this .impl_curve_name = arg .convertToString ();
868
872
}
869
873
return this ;
870
874
}
871
875
872
876
private String getCurveName () {
873
- if (key != null ) return key .getCurveName ();
874
- assert curve_name != null ;
875
- return curve_name .toString ();
877
+ if (curveName == null ) {
878
+ assert impl_curve_name != null ;
879
+ return impl_curve_name .asJavaString ();
880
+ }
881
+ return curveName ;
876
882
}
877
883
878
884
@ Override
@@ -892,16 +898,21 @@ public IRubyObject curve_name(final ThreadContext context) {
892
898
}
893
899
894
900
private RubyString implCurveName (final Ruby runtime ) {
895
- if (curve_name == null ) {
896
- assert key != null ;
897
- String prefix , curveName = key .getCurveName ();
898
- // BC 1.54: "brainpoolP512t1" 1.55: "brainpoolp512t1"
899
- if (curveName .startsWith (prefix = "brainpoolp" )) {
900
- curveName = "brainpoolP" + curveName .substring (prefix .length ());
901
- }
902
- curve_name = RubyString .newString (runtime , curveName );
901
+ if (impl_curve_name == null && curveName != null ) {
902
+ setCurveName (runtime , curveName );
903
903
}
904
- return curve_name ;
904
+ return impl_curve_name ;
905
+ }
906
+
907
+ private void setCurveName (final Ruby runtime , String curveName ) {
908
+ assert curveName != null ;
909
+ this .curveName = curveName ;
910
+ String prefix ;
911
+ // BC 1.54: "brainpoolP512t1" 1.55: "brainpoolp512t1"
912
+ if (curveName .startsWith (prefix = "brainpoolp" )) {
913
+ curveName = "brainpoolP" + curveName .substring (prefix .length ());
914
+ }
915
+ impl_curve_name = RubyString .newString (runtime , curveName );
905
916
}
906
917
907
918
@ JRubyMethod
@@ -956,11 +967,7 @@ public RubyString to_pem(final ThreadContext context, final IRubyObject[] args)
956
967
957
968
private ECParameterSpec getParamSpec () {
958
969
if (paramSpec == null ) {
959
- if (key != null ) {
960
- return paramSpec = key .getParamSpec ();
961
- }
962
- assert curve_name != null ;
963
- return paramSpec = PKeyEC .getParamSpec (getCurveName ());
970
+ paramSpec = PKeyEC .getParamSpec (getCurveName ());
964
971
}
965
972
return paramSpec ;
966
973
}
0 commit comments