@@ -70,7 +70,7 @@ synchronized static void generateParams(String provider_name) {
7070 try {
7171
7272 //String provider_name = "OpenJCEPlus";
73- String curveName_192k1 = "secp192k1 " ;
73+ String curveName_192k1 = "secp192r1 " ;
7474 String curveName_256r1 = "secp256r1" ;
7575
7676 algParameterSpec_192k1 = new ECGenParameterSpec (curveName_192k1 );
@@ -112,9 +112,9 @@ 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
@@ -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,20 @@ 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+ // System.out.println(methodName + " sharedSecretA = " + BaseUtils.bytesToHex(sharedSecretA));
286+ // System.out.println(methodName + " sharedSecretB = " + BaseUtils.bytesToHex(sharedSecretB));
287+ assertTrue (Arrays .equals (sharedSecretA , sharedSecretB ));
288+ } catch (IllegalStateException ise ) {
289+ if (getProviderName ().equals (("OpenJCEPlusFIPS" ))) {
290+ if (idString .equals ("secp192r1" )) {
291+ assertTrue (ise .getMessage ().equals ("NIST P-192 curve is not supported in FIPS for calculating the shared secret" ));
292+ }
293+ }
294+ }
282295 }
283296
284297 /*
@@ -333,7 +346,7 @@ void compute_ecdh_key_with_global_key(String idString, AlgorithmParameterSpec al
333346 final String methodName = "compute_ecdh_key_with_global_key" + "_" + idString ;
334347 KeyPair keyPairA = null , keyPairB = null ;
335348 switch (idString ) {
336- case "secp192k1 " :
349+ case "secp192r1 " :
337350 keyPairA = keyPairA_192k1 ;
338351 keyPairB = keyPairB_192k1 ;
339352 break ;
@@ -399,11 +412,19 @@ void compute_ecdh_key_with_global_key(String idString, AlgorithmParameterSpec al
399412 throw e ;
400413 }
401414
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 ));
415+ try {
416+ // Generate the key bytes
417+ byte [] sharedSecretA = keyAgreeA .generateSecret ();
418+ byte [] sharedSecretB = keyAgreeB .generateSecret ();
419+ System .out .println (methodName + " sharedSecretB = " + BaseUtils .bytesToHex (sharedSecretB ));
420+ assertTrue (Arrays .equals (sharedSecretA , sharedSecretB ));
421+ } catch (IllegalStateException ise ) {
422+ if (getProviderName ().equals (("OpenJCEPlusFIPS" ))) {
423+ if (idString .equals ("secp192r1" )) {
424+ assertTrue (ise .getMessage ().equals ("NIST P-192 curve is not supported in FIPS for calculating the shared secret" ));
425+ }
426+ }
427+ }
407428 }
408429
409430 @ Test
0 commit comments