4444public class BaseTestECDH extends BaseTestJunit5 {
4545
4646 static final byte [] origMsg = "this is the original message to be signed" .getBytes ();
47- static ECGenParameterSpec algParameterSpec_192k1 , algParameterSpec_256r1 ;
47+ static ECGenParameterSpec algParameterSpec_192r1 , algParameterSpec_256r1 ;
4848
4949 static KeyPairGenerator kpgA = null ;
5050 static KeyPairGenerator kpgB = null ;
5151
52- static KeyPair keyPairA_192k1 , keyPairA_256r1 ;
53- static KeyPair keyPairB_192k1 , keyPairB_256r1 ;
52+ static KeyPair keyPairA_192r1 , keyPairA_256r1 ;
53+ static KeyPair keyPairB_192r1 , keyPairB_256r1 ;
5454
5555 private boolean isMulti = false ;
5656
@@ -70,21 +70,21 @@ synchronized static void generateParams(String provider_name) {
7070 try {
7171
7272 //String provider_name = "OpenJCEPlus";
73- String curveName_192k1 = "secp192k1 " ;
73+ String curveName_192r1 = "secp192r1 " ;
7474 String curveName_256r1 = "secp256r1" ;
7575
76- algParameterSpec_192k1 = new ECGenParameterSpec (curveName_192k1 );
76+ algParameterSpec_192r1 = new ECGenParameterSpec (curveName_192r1 );
7777 algParameterSpec_256r1 = new ECGenParameterSpec (curveName_256r1 );
7878
7979 kpgA = KeyPairGenerator .getInstance ("EC" , provider_name );
80- kpgA .initialize (algParameterSpec_192k1 );
81- keyPairA_192k1 = kpgA .generateKeyPair ();
80+ kpgA .initialize (algParameterSpec_192r1 );
81+ keyPairA_192r1 = kpgA .generateKeyPair ();
8282 kpgA .initialize (algParameterSpec_256r1 );
8383 keyPairA_256r1 = kpgA .generateKeyPair ();
8484
8585 kpgB = KeyPairGenerator .getInstance ("EC" , provider_name );
86- kpgB .initialize (algParameterSpec_192k1 );
87- keyPairB_192k1 = kpgB .generateKeyPair ();
86+ kpgB .initialize (algParameterSpec_192r1 );
87+ keyPairB_192r1 = kpgB .generateKeyPair ();
8888 kpgB .initialize (algParameterSpec_256r1 );
8989 keyPairB_256r1 = kpgB .generateKeyPair ();
9090
@@ -112,15 +112,15 @@ public void setUp() {
112112 * @throws Exception
113113 */
114114 @ Test
115- public void testECDH_secp192k1 () throws Exception {
115+ public void testECDH_secp192r1 () throws Exception {
116116
117- String curveName = "secp192k1 " ;
117+ String curveName = "secp192r1 " ;
118118
119119 ECGenParameterSpec ecgn = new ECGenParameterSpec (curveName );
120120
121121 compute_ecdh_key (curveName , ecgn );
122122 if (isMulti )
123- compute_ecdh_key_with_global_key (curveName , algParameterSpec_192k1 );
123+ compute_ecdh_key_with_global_key (curveName , algParameterSpec_192r1 );
124124
125125 }
126126
@@ -142,27 +142,34 @@ public void testECDH_ECSpec() throws Exception {
142142
143143 String methodId = "ECDHECParamSpec" ;
144144
145- // These values were copied from ECNamedCurve.java in IBMJCEFIPS
146- String sfield_p256 = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F " ;
147- String sa_p256 = "0000000000000000000000000000000000000000000000000000000000000000 " ;
148- String sb_p256 = "0000000000000000000000000000000000000000000000000000000000000007 " ;
149- String sx_p256 = "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 " ;
150- String sy_p256 = "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8 " ;
151- String sorder_p256 = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 " ;
145+ // secp256r1 / prime256v1 (NIST P-256)
146+ String sfield_p256r1 = "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF " ;
147+ String sa_p256r1 = "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC " ;
148+ String sb_p256r1 = "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B " ;
149+ String sx_p256r1 = "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296 " ;
150+ String sy_p256r1 = "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5 " ;
151+ String sorder_p256r1 = "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551 " ;
152152
153- BigInteger p = new BigInteger (sfield_p256 , 16 );
153+ BigInteger p = new BigInteger (sfield_p256r1 , 16 );
154154 ECField field = new ECFieldFp (p );
155155
156- EllipticCurve curve = new EllipticCurve (field , new BigInteger (sa_p256 , 16 ),
157- new BigInteger (sb_p256 , 16 ));
158- ECPoint g = new ECPoint (new BigInteger (sx_p256 , 16 ), new BigInteger (sy_p256 , 16 ));
159- BigInteger order = new BigInteger (sorder_p256 , 16 );
156+ EllipticCurve curve = new EllipticCurve (
157+ field ,
158+ new BigInteger (sa_p256r1 , 16 ),
159+ new BigInteger (sb_p256r1 , 16 )
160+ );
160161
162+ ECPoint g = new ECPoint (
163+ new BigInteger (sx_p256r1 , 16 ),
164+ new BigInteger (sy_p256r1 , 16 )
165+ );
166+
167+ BigInteger order = new BigInteger (sorder_p256r1 , 16 );
161168 int cofactor = 1 ;
169+
162170 ECParameterSpec ecParamSpec = new ECParameterSpec (curve , g , order , cofactor );
163171
164172 compute_ecdh_key (methodId , ecParamSpec );
165-
166173 }
167174
168175 void compute_ecdh_key (String idString , AlgorithmParameterSpec algParameterSpec )
@@ -271,14 +278,18 @@ void compute_ecdh_key(String idString, AlgorithmParameterSpec algParameterSpec)
271278 throw e ;
272279 }
273280
274- // Generate the key bytes
275- byte [] sharedSecretA = keyAgreeA .generateSecret ();
276- byte [] sharedSecretB = keyAgreeB .generateSecret ();
277- // System.out.println(methodName + " sharedSecretA = " + BaseUtils.bytesToHex(sharedSecretA));
278- // System.out.println(methodName + " sharedSecretB = " + BaseUtils.bytesToHex(sharedSecretB));
279-
280- assertTrue (Arrays .equals (sharedSecretA , sharedSecretB ));
281-
281+ try {
282+ // Generate the key bytes
283+ byte [] sharedSecretA = keyAgreeA .generateSecret ();
284+ byte [] sharedSecretB = keyAgreeB .generateSecret ();
285+ assertTrue (Arrays .equals (sharedSecretA , sharedSecretB ));
286+ } catch (IllegalStateException ise ) {
287+ if (getProviderName ().equals (("OpenJCEPlusFIPS" ))) {
288+ if (idString .equals ("secp192r1" )) {
289+ assertTrue (ise .getMessage ().equals ("NIST P-192 curve is not supported in FIPS for calculating the shared secret" ));
290+ }
291+ }
292+ }
282293 }
283294
284295 /*
@@ -333,9 +344,9 @@ void compute_ecdh_key_with_global_key(String idString, AlgorithmParameterSpec al
333344 final String methodName = "compute_ecdh_key_with_global_key" + "_" + idString ;
334345 KeyPair keyPairA = null , keyPairB = null ;
335346 switch (idString ) {
336- case "secp192k1 " :
337- keyPairA = keyPairA_192k1 ;
338- keyPairB = keyPairB_192k1 ;
347+ case "secp192r1 " :
348+ keyPairA = keyPairA_192r1 ;
349+ keyPairB = keyPairB_192r1 ;
339350 break ;
340351
341352 case "secp256r1" :
@@ -399,11 +410,19 @@ void compute_ecdh_key_with_global_key(String idString, AlgorithmParameterSpec al
399410 throw e ;
400411 }
401412
402- // Generate the key bytes
403- byte [] sharedSecretA = keyAgreeA .generateSecret ();
404- byte [] sharedSecretB = keyAgreeB .generateSecret ();
405- System .out .println (methodName + " sharedSecretB = " + BaseUtils .bytesToHex (sharedSecretB ));
406- assertTrue (Arrays .equals (sharedSecretA , sharedSecretB ));
413+ try {
414+ // Generate the key bytes
415+ byte [] sharedSecretA = keyAgreeA .generateSecret ();
416+ byte [] sharedSecretB = keyAgreeB .generateSecret ();
417+ System .out .println (methodName + " sharedSecretB = " + BaseUtils .bytesToHex (sharedSecretB ));
418+ assertTrue (Arrays .equals (sharedSecretA , sharedSecretB ));
419+ } catch (IllegalStateException ise ) {
420+ if (getProviderName ().equals (("OpenJCEPlusFIPS" ))) {
421+ if (idString .equals ("secp192r1" )) {
422+ assertTrue (ise .getMessage ().equals ("NIST P-192 curve is not supported in FIPS for calculating the shared secret" ));
423+ }
424+ }
425+ }
407426 }
408427
409428 @ Test
0 commit comments