1616import org .bouncycastle .asn1 .pkcs .PKCSObjectIdentifiers ;
1717import org .bouncycastle .asn1 .x509 .AlgorithmIdentifier ;
1818import org .bouncycastle .asn1 .x509 .SubjectPublicKeyInfo ;
19- import org .bouncycastle .asn1 .x9 .DHDomainParameters ;
2019import org .bouncycastle .asn1 .x9 .DomainParameters ;
20+ import org .bouncycastle .asn1 .x9 .ValidationParams ;
2121import org .bouncycastle .asn1 .x9 .X9ObjectIdentifiers ;
22+ import org .bouncycastle .crypto .params .DHParameters ;
2223import org .bouncycastle .crypto .params .DHPublicKeyParameters ;
24+ import org .bouncycastle .crypto .params .DHValidationParameters ;
2325import org .bouncycastle .jcajce .provider .asymmetric .util .KeyUtil ;
2426
2527public class BCDHPublicKey
@@ -29,6 +31,7 @@ public class BCDHPublicKey
2931
3032 private BigInteger y ;
3133
34+ private transient DHPublicKeyParameters dhPublicKey ;
3235 private transient DHParameterSpec dhSpec ;
3336 private transient SubjectPublicKeyInfo info ;
3437
@@ -37,20 +40,23 @@ public class BCDHPublicKey
3740 {
3841 this .y = spec .getY ();
3942 this .dhSpec = new DHParameterSpec (spec .getP (), spec .getG ());
43+ this .dhPublicKey = new DHPublicKeyParameters (y , new DHParameters (spec .getP (), spec .getG ()));
4044 }
4145
4246 BCDHPublicKey (
4347 DHPublicKey key )
4448 {
4549 this .y = key .getY ();
4650 this .dhSpec = key .getParams ();
51+ this .dhPublicKey = new DHPublicKeyParameters (y , new DHParameters (dhSpec .getP (), dhSpec .getG ()));
4752 }
4853
4954 BCDHPublicKey (
5055 DHPublicKeyParameters params )
5156 {
5257 this .y = params .getY ();
5358 this .dhSpec = new DHParameterSpec (params .getParameters ().getP (), params .getParameters ().getG (), params .getParameters ().getL ());
59+ this .dhPublicKey = params ;
5460 }
5561
5662 BCDHPublicKey (
@@ -59,6 +65,7 @@ public class BCDHPublicKey
5965 {
6066 this .y = y ;
6167 this .dhSpec = dhSpec ;
68+ this .dhPublicKey = new DHPublicKeyParameters (y , new DHParameters (dhSpec .getP (), dhSpec .getG ()));
6269 }
6370
6471 public BCDHPublicKey (
@@ -94,12 +101,23 @@ public BCDHPublicKey(
94101 {
95102 this .dhSpec = new DHParameterSpec (params .getP (), params .getG ());
96103 }
104+ this .dhPublicKey = new DHPublicKeyParameters (y , new DHParameters (dhSpec .getP (), dhSpec .getG ()));
97105 }
98106 else if (id .equals (X9ObjectIdentifiers .dhpublicnumber ))
99107 {
100108 DomainParameters params = DomainParameters .getInstance (seq );
101109
102110 this .dhSpec = new DHParameterSpec (params .getP (), params .getG ());
111+ ValidationParams validationParams = params .getValidationParams ();
112+ if (validationParams != null )
113+ {
114+ this .dhPublicKey = new DHPublicKeyParameters (y , new DHParameters (params .getP (), params .getG (), params .getQ (), params .getJ (),
115+ new DHValidationParameters (validationParams .getSeed (), validationParams .getPgenCounter ().intValue ())));
116+ }
117+ else
118+ {
119+ this .dhPublicKey = new DHPublicKeyParameters (y , new DHParameters (params .getP (), params .getG (), params .getQ (), params .getJ (), null ));
120+ }
103121 }
104122 else
105123 {
@@ -137,6 +155,11 @@ public BigInteger getY()
137155 return y ;
138156 }
139157
158+ public DHPublicKeyParameters engineGetKeyParameters ()
159+ {
160+ return dhPublicKey ;
161+ }
162+
140163 private boolean isPKCSParam (ASN1Sequence seq )
141164 {
142165 if (seq .size () == 2 )
0 commit comments