From 0fef0061651acbff1c17eb72c8b8c4711827d92e Mon Sep 17 00:00:00 2001 From: bleichen Date: Mon, 4 Feb 2019 06:30:25 -0800 Subject: [PATCH] Refactoring ECDH tests: Switching to test vector files that contain vectors for one curve only. This covers more test cases, allows to skip test vectors for curves not supported by a library. ecdh_test.json contains tests for multiple curves, but is somewhat limited in coverage. Sanity checks for using expected files are now based on the JSON schema. I.e. if the expected and actual JSON schema of the test vector file match, then the test should pass, otherwise there is a problem with the test setup. Removing tests covered by test vectors from EcdhTest.java. Adding timing test for ECDH: The tests require to run on a system without much noise: E.g. running a regular unit test is too noisy. The confidence level is too low to fail the test: ECDH timing test:secp256r1 Timing for point 0 avg: 4062844.9155273438 std dev: 452064.39579909603 cv:0.11126794283271814 Timing for point 1 avg: 4077776.20703125 std dev: 457662.5685428607 cv:0.1122333706675025 Point 0 multiplication is faster: 1152 Running the same test locally adds less noise. The ratio avg / std dev is 10 times smaller. Here the test run shows that time of a point multiplication depends on the point that is multiplied. ECDH timing test:secp256r1 Timing for point 0 avg: 1611269.970703125 std dev: 30329.312528547747 cv:0.018823234516877802 Timing for point 1 avg: 1618931.3715820312 std dev: 29267.753517245954 cv:0.01807843990857086 Point 0 multiplication is faster: 1655 NOKEYCHECK=True PiperOrigin-RevId: 232286329 GitOrigin-RevId: 1bbbd6422c8fd64f3d5ea2fc3ecb94c6bd7bc171 --- .../wycheproof/testcases/EcdhTest.java | 1606 +++-------------- .../wycheproof/testcases/JsonEcdhTest.java | 89 +- javascript/webcryptoapi/testcases/EcdhTest.js | 7 +- 3 files changed, 294 insertions(+), 1408 deletions(-) diff --git a/java/com/google/security/wycheproof/testcases/EcdhTest.java b/java/com/google/security/wycheproof/testcases/EcdhTest.java index 8fb438b..517d23b 100644 --- a/java/com/google/security/wycheproof/testcases/EcdhTest.java +++ b/java/com/google/security/wycheproof/testcases/EcdhTest.java @@ -14,10 +14,14 @@ package com.google.security.wycheproof; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import com.google.security.wycheproof.WycheproofRunner.NoPresubmitTest; import com.google.security.wycheproof.WycheproofRunner.ProviderType; +import com.google.security.wycheproof.WycheproofRunner.SlowTest; +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadMXBean; import java.math.BigInteger; import java.security.GeneralSecurityException; import java.security.InvalidKeyException; @@ -25,6 +29,9 @@ import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.SecureRandom; import java.security.interfaces.ECPrivateKey; import java.security.interfaces.ECPublicKey; import java.security.spec.ECFieldFp; @@ -97,1361 +104,6 @@ public class EcdhTest { "ECDHWITHSHA1KDF", }; - /** ECDH test vectors */ - public static class EcdhTestVector { - final String curvename; - final String pub; // hexadecimal representation of the X509 encoding - final BigInteger s; // private key - final String shared; // hexadecimal representation of the shared secret - - public EcdhTestVector(String curvename, String pub, BigInteger s, String shared) { - this.curvename = curvename; - this.pub = pub; - this.s = s; - this.shared = shared; - } - - public ECPublicKey getPublicKey() throws NoSuchAlgorithmException, InvalidKeySpecException { - KeyFactory kf = KeyFactory.getInstance("EC"); - byte[] encoded = TestUtil.hexToBytes(pub); - return (ECPublicKey) kf.generatePublic(new X509EncodedKeySpec(encoded)); - } - - public ECPrivateKey getPrivateKey() throws NoSuchAlgorithmException, InvalidKeySpecException { - KeyFactory kf = KeyFactory.getInstance("EC"); - ECPrivateKeySpec spec = new ECPrivateKeySpec(s, EcUtil.getCurveSpecRef(curvename)); - return (ECPrivateKey) kf.generatePrivate(spec); - } - } - -public static final EcdhTestVector[] ECDH_TEST_VECTORS = { - // normal case - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a0004ede01a8a47b08cfa" - + "b5f09382a44d09ff41e1ea10398a05b06f135024a9a68b71bfa0d258aeacec39" - + "295ffc0700963da427d5239bc8d729a7", - new BigInteger("66129e5f5f0020ef0b73a71a842807e25ae78609ea4bb46d365ed0df", 16), - "b08501b65b3abfe01d98ee9336ca161957c7a25d7ff4e5666db3d6fb"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d0301070342000437bafd59f3" - + "981a01d0a65ffb344ffdad6241e0df7ea6e0a0ba7df2dd2132f755b5c25e8a79" - + "5aba52fd8302f3e39eed094cc676a28f29289ef6ab8493d454c03e", - new BigInteger("5456fee42720eacbd17c1180d7bd6a089214166772181601451304512756b23b", 16), - "edd951357c507199907847e1ba8d8f88a235e9818665b11feb3d4ae9a9a8e031"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b81040022036200042350c589ce86d99e" - + "6de2692526f22bc1907cec4823cf114c6b8aa1c03e436430cfbe38a517816cc7" - + "e1a98e032ea724a3b2e4ddff894f09cab9d396a853f82d4ddccb854f2ae3dc73" - + "fb09934a3c65c18595e415654a70f7d00e8d8299e28fa169", - new BigInteger("0c36c4fa76e4c93da419bc21656f972de470f4b1c028e0d5d068b6326f16b484" - + "e248fb722c06c8ca3badd1aee201ae5bd", 16), - "4f6a59053a5ddc77d01fef51eb35bbb7194e89761b9c2e741b6d872b753feb58" - + "3caa35eb444469082153fd21ba607c2b"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000400a4c85dc9bf" - + "91c738450cc7a1c45ad544019cb92d13d010789fd682678b49b9f896d9138905" - + "e1e28e6e7331ef3ca96a5724adbc6d290359e7e11300f707becf7c0c00bf0bd0" - + "4da7e423fcd767f72d86983e0de5b93df1f037d7b5f53e69a696cab9c07e1a7c" - + "6890d357951f88b90e811022962cb863b1c9cc7d9e9263c1f3d61d84d53d", - new BigInteger("78bed2e5d1045588f2e254987b04c804d2cd43fe5ce09df34749e3b6825a1433" - + "38b30e8a8622e16edf22c54820f822722014d52fdf81349d4d5d4904311b893e" - + "f2", 16), - "0134ef7a412c1edc9fa2b887427fe1e228252519acab9513c0bf2899ad26cbf6" - + "7e62abff411d5b8aafc2da6cb4c7f2fbb83276e03749c39d6f6182634a0dfa64" - + "dd36"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200048c8546bb" - + "344a1b7dc42958e1d5fba13fe154ba1e1478871f99e7b4ac7aaac8b310425744" - + "70f9096cd2d8f0eea4d0a7359a289ec3af86c221c3147d40dc84a0e0", - new BigInteger("6f17d95bf371d6b10ebe652a1bbf91226be7425864964d18596bb1962acaa3a2", 16), - "7a3ad1cc9d56410f7330a7e29364fad0a56ccbd3eb7e24683b32ea3fed8065bf"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b24030302080101090352000474a94a38" - + "65c91135dd5f7de1d81feeeecc8844084ed3d7869ec32454a90ef4c94ba7c264" - + "21faf81167e316a02b6d7e1ea1ace06cf7dab874300f8ea1cc8a8942402121d0" - + "032809d02c932345e54981a5", - new BigInteger("09e82121ce67a569641cda1208f58af4299d0da2a8f4e7d34ad82a6f8d657af5" - + "7aa6fa14117a1426", 16), - "39088f92717317452e7b3b9fbb4c6fd9376b8708a710ede7f39fda81b64d5b7a" - + "5ee5b9ef418600e1"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b03620004477991ce" - + "713b03bdaaf884bac354f46824feb76464eb4192af0a30938f62ec3e7740a448" - + "e835dbd31980068f2d65b2a803531c3e2dd56d23987ff181e10d758d6ab18658" - + "79ee4f9ecab7613bbe89089bb4cf9c812a98fa86c53fbcda879e9952", - new BigInteger("3f633364b9d90bd70df187a48f054267ab6f511d4211a4ab927d5a13fc642553" - + "04a282e81a059b59b13da7e6681367bb", 16), - "3db41a0846b8c1e87f5a7d1b6dd4ba0e5eeba354c4dd4d3ccfcf83263d4ed225" - + "898f7d26016c184db04bff69a47d4e7e"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d038182000492be" - + "ce2a6b584fd7d605608dd48c0cee71a9126755e9fd997c79b5cfb2ce3893941d" - + "f056ddcdbfc377ef878f6e4985890c87271e93834fffc539684d2d4ad7ab223d" - + "15ba7f2c77831cb027f1b91a05bceceec54ffad09b48b7aaab4934b2aec296b9" - + "6672ece4aa26ae84d77dfc75d037ae66c803fa0f385b8ea5891dcd8beb64", - new BigInteger("0dd055dcb0716072b3770afea2558aaf7604ad4cd46309d4773112eb07971bbe" - + "2f52a4c7dcd77ba459da2e3e1b81de7d275d8471c4576a4fad8d39d497427cf2", 16), - "56befa424107477a441d9f220bc201b0922aa690319e0352403b41f93693632f" - + "0a42c22695084e34a22258fb82405707d77fbc7a65d69fc3b2f0ff7964b88e11"), - // edge cases for shared secret - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a000481580f0e1948c6cb" - + "0d783aef31f7aa1453127fd5e9015787c21dc6e7b05823679cdf1f5f27fbb35a" - + "1316f90c6ee6f1a830aff4cc079d7147", - new BigInteger("0ef75a840917c5d6588481f54f72651d5ab682a27ed5e089dabcfeb4b", 16), - "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff"), - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a0004fbb1895eb32d264d" - + "02fdd8ff69660c3b2d92ead2d73f83f0b822c3a7e3921eaff67f3885ff3a9e1f" - + "599f88a905f3332ea265168b8e3959ee", - new BigInteger("767410316e2bfaf819eaba53d9afc6389af3b3980aaeb6084d2cb42a", 16), - "0003fffffff00000003fffffff00000003fffffff000000040000000"), - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a00044afaf873c68305e8" - + "c59ae2bb35fcddf52445409e3de3e89ac5b4a85f3b19d5d2413d0ed6bbfb8a29" - + "94e45233e9ccfbe6d19ae0fbd3fefecb", - new BigInteger("08c082c5c024a049c638c0063056a9de4f1705a043d8903b21cc3fa57", 16), - "01fffffffc00000007fffffff00000001fffffffc000000080000001"), - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a0004592cfacda94e179d" - + "2fef452840fd9089c2635a2828d795c5e5e654db8b3235e150c7332614724505" - + "732b3d43fdb24df59441f3a63324221c", - new BigInteger("0df67dafb58c8bbea8cd3d6f101fd8d63e37b2d27f47378b23b79e8f1", 16), - "7fffffffffffffffffffffffffffffffffffffffffffffffffffffff"), - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a00043ac084145783884d" - + "6e6183b3024fc224ec0acceea314c1632876481c1cdf50dc03c360876df00bb6" - + "e9798925548bbd6b9ee03903e4a856ba", - new BigInteger("0b50ce76e695c37b2007edc24a2b284b327d39c48d891de7e40d481ec", 16), - "fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008001"), - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a0004aac5583c79a61c57" - + "677497c7e69cd0a5a0e4649ec5eb7548ed12e08f4ca2e89e3a9a01ba7465cdd0" - + "1eecf863b205a325d20c7c6326ee710f", - new BigInteger("4d5d5810d1256528e330b6f8d2b2a934acf67b1c26b4588632078ea1", 16), - "ffffffff00000000ffffffff00000000ffffffff00000000ffffffff"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d03010703420004fc933db19a" - + "709f7428659e5fd92a44f6ca74b02f354c1524cd31eb02c0c3978f6c06947a10" - + "48fde5d5ae530cec3af2425c95be31beb716f316c8742947305257", - new BigInteger("408c07f785e05bc95675d0c67f82dbdf6b1cdd70cf69c29663d8ed1d2ecc7766", 16), - "0000000000000000000000000000000000000000000000000000000000000000"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d030107034200042d8af9b4bf" - + "95f23eef7d6a58ae122667c743c587ef0a83d1bd6429c228a6d360093def5202" - + "28caba718f4507bd17b67786f112b9e849be71df86197ae63d4656", - new BigInteger("3da0fcb37ce9cb90b8ecc283be909e4e26a546933f59f37a0172d4c0143b1023", 16), - "00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d03010703420004a5d41b1161" - + "5645ffccd3e70cabc57d2171ffbb9a6191e257689ebe44ef3b674db01ddd1bd1" - + "60ece0c2d4420169099a403f273953ab494e59733b4e96b100404a", - new BigInteger("7821d977e4b7b91a6a41b37819968c5185b0e10c5f02816b0fd9ae93981e88d7", 16), - "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d030107034200042e367b7d01" - + "67214506d5b0e345b9df44cc9ac2c12374fffa146659815c562345c4162ffebc" - + "91c7b9251b8e9f081cdd2f07a813f707b9f39e52b9a90dff94367e", - new BigInteger("0cf80de9a104c55e263c105757248942f276bbc6e3f901f49191bfc7c10996dd1", 16), - "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d03010703420004ce160aa0f5" - + "b30945ff110aed4bb1db01fa2a13850db9e7d4b7e03d290680c061fd3edf4e12" - + "2bec0147238822e11fbf1c22ebe05a914efc2e6f1f45705a034f8d", - new BigInteger("655717199b5287de8e281ed157edba8e23a7416dd0317981aedfbb0c6dc0485c", 16), - "8000000000000000000000000000000000000000000000000000000000000004"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d030107034200048e84800f8b" - + "c418ed64cee6d1d73221386a6335491403f0b7244fbfef7274e111e39834c716" - + "5de65e9f3dc32722bd8c5fa9e15aa35fe791022b4217038dddb67e", - new BigInteger("466cc6d79dd089a44aee650739265d25c123f5a3ec840f6894f1b555e336df6e", 16), - "ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d0301070342000413608e8b53" - + "7a24815cbab85e6f3c9cc150985fc02b0c11e7b8d10969c7ec75ed7ba696ebfa" - + "90f72c0183ebf5addf7924107d418ecd2d823d35a792e440354030", - new BigInteger("2b1541701e9e1f76c841942fe131b19a7ec84117249a8223fe77c50e706ebfd5", 16), - "ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b8104002203620004c4cea9aa62a401b3" - + "770e1ce475ef975430d579fc69b576074d4af6feec995ae7ef01ab3c231e37e3" - + "9a3a490d6f6d9fc019ecd273860cf81f57ef2a8cc2d12af404bd5e4228a77556" - + "ea3a327bdb46abcd315143d0d859640d8e1b55f9b5e33237", - new BigInteger("0a6d86fea4069bf28161c0b1f6e0f542ee3f5347a2fdf702c58bd770bc727776" - + "5b5713b4f2c67a73e7731188dfb277c6d", 16), - "0000000000000000000000000000000000000000000000000000000000000000" - + "00000000000000000000000000000000"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b81040022036200046150defd7ece8903" - + "07a16a4bf2fe004c065ffb7bad5accb620346f39d3a2ab7b6c872580dcd4860c" - + "80ab9b16a05cfb6e6f9990cf74183dc8533f067c572633a231b4cc34ddde3f1d" - + "ab01855b819a9969b6d286961449a81f2c5ffe0799f8f4d5", - new BigInteger("0e2103cec6ffb44963a8588b02e9204579c70fc5bee437f00f146709a535306c" - + "5d21978677d26216cc32520c487ac8444", 16), - "0000000000000000000000000000000000000000000000000000000000000000" - + "00000000000000000000000000000002"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b8104002203620004730ee9b91512458a" - + "a27e6b79fc44e3fc5ae0f4d1cfa19bb457a92f0a0dd6112faa5bbb8a94b96e97" - + "7882e92e40487819901f5d9049fb413dbf55ba03b3a179098e1888f306f4c91d" - + "4e63d2c51db983e8a15dd55c2556a7641a6ab6df54dd4cc4", - new BigInteger("7688859c38fda9a4426a34b3383617a83604926c6af1134d8c08c6c6bf4a4b1b" - + "900ffb0c48163f2fc025291a3b77ccbe", 16), - "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff" - + "00000000ffffffff00000000ffffffff"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b8104002203620004f9693073900322e5" - + "1eaf56dafdb91485a673401247dfcba87f7eb740f908d7d05bd7a2b78882c4c6" - + "9a2b33053f4704b1adf20cceaddf13d5cf42d084c4f2aea276f9d96e09eb57c4" - + "adc5af6e348874bba825f0ead0e77137edc82825b7c02aec", - new BigInteger("08e75f011ddf5df3720a16ee94098e1718f76c4a7fa80d6148bf4637918edc96" - + "7cbcf77a5523ad0823793ed3598ad716e", 16), - "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff" - + "0000ffff0000ffff0000ffff0000ffff"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b81040022036200044418efb8a34156d8" - + "9ade5833f9718aadebf107aee933eaf5aec3a67e68626ce3200beae2c45c9647" - + "064be66b16201e39cf408605782eb1ed11353545da2c0fcadc3973bb1afeee89" - + "faf1f17fb3804281f704aab4785281e48810b719723a4ebd", - new BigInteger("0e01e507817ff8639a928ef97a2f4ddf99aeae4d84797ffc1ee915cd497af6c5" - + "103cd222eaa3f73957156ab3e90a8edd8", 16), - "007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007f" - + "ff0001fffc0007fff0001fffc0008000"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b8104002203620004c78a77b0b1f2efde" - + "36cb77ddf01404c9c899f861ef407e793467dc1369efdc552a004244929afcff" - + "5a2142119b2f74e29d61ff9175be46e98612b805062a1d9d93beeb0090518f7a" - + "3a3bf9581c0aea1a85dbbbe1a088eb12fdad401cfe323736", - new BigInteger("43f7f19cf19c357c4f13ce5dec61621f60483f86f6c0e7710801a76c61d59ab9" - + "2670af388685c54670a44455d978936d", 16), - "8000000000000000000000000000000000000000000000000000000000000000" - + "00000000000000000000000000000002"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b8104002203620004c92457e87b8cfbfb" - + "f171461c9377618099a4654d59e46c5ae057fa974c9f82867484520a69832676" - + "f030d3c16617cc864c2a5c94bfff52d16192a971a867a7dbd8005d42788440a3" - + "0b0132006d14e3590d2b6c00c58ded46582d34dd7697eea4", - new BigInteger("7f827b6a7d3e6f86dedd4c97b0306d0b3707fe0126ad54a03a7ba2b907feb2a9" - + "ce36ad2baa3eb6a7f88f157abd85ab9e", 16), - "fff00000001fffffffc00000007fffffff00000001fffffffc00000007ffffff" - + "f00000001fffffffc00000007fffffff"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b8104002203620004b475c6e55a4544a5" - + "77b67eec7d442cfdad0f286768dbe0e83200c5b50c33be24890133ea054c8fb7" - + "6ef46f4a1970a910e70251faf7b2678f57a455da24ef14d3c59131359acb90ce" - + "14752746259a930dac1c3387061d7778ba78a89a58c0dd8f", - new BigInteger("567d19cf1ec2cbf168d6a22532d61627623f216dab27f1869f94041ac86367c4" - + "fc34ab50fa950d092d2df20ed797cbfa", 16), - "ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffff" - + "ff00000003fffffff00000003fffffff"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b810400220362000407f1d0e85c26e4b3" - + "d96b0aa26a75eac049cd15f5c8aebb0e68c553edd41b28183e577bb716cdf68d" - + "fb4f1c4c9e4bca9423306f54fce15401b587d0a78a74691df1f9f99fa3fbf049" - + "10405ec2daa5189c9f5ea5dfc7dabaf19e229bdc184ef053", - new BigInteger("0fb8ca434327c081c30cca21f6e623eccadf5f9ef78f461731cf7d05bf10dfd0" - + "97f8bb87d9db2b03a7af7e8a452ddfe77", 16), - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe" - + "ffffffff0000000000000000fffffffe"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b810400230381860004015e99e4275e" - + "7fb1e61aa735edf2a9cb11894a0d59a6beea4978a45cbd03950a0fd280d70e6c" - + "ff3c3ba679a787bdb5fd8796aaf3bc9ac64d4752b04ebce1d115b92d01ae1c7b" - + "b514014978c2ef7b7f337dbcabea7be6e577e1a9a1162f5c18c742b28d152d7c" - + "fd6f5d37ac1205b14bfa7363b35f01d82c3764859a9279397ca58e2c6645", - new BigInteger("0b452ff8f582b40ce7e63903a7a68dbefe489cfbff912465bc3c4844332e089c" - + "fa730f80eb5013a273f576d1656e973c2d0190dc76b4f3eefeaa3fa2236a184b" - + "ff8", 16), - "0000000000000000000000000000000000000000000000000000000000000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "0000"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b810400230381860004017d2f35bf67" - + "1967e026c27fa91d970c95491d541683fcf4b784292a27a6c9b504b7cd5d231a" - + "7ec1775436a3591bea76bb089e16f9d83be29abdc4494702ae0a0a91010ce15f" - + "f38dffa5b5fba0a1a5a1865d72524d9e6a93bb21a215f3c438722246d8132ba8" - + "856969587541e593380ae1a477dcfc19b2a519df2e71a45b0f48d00f6502", - new BigInteger("13c36dccb60ec1bd7a26a42ea57b9ef17619450d8e27f117fd4c56d73e2304f2" - + "0d44bd658a3f5d9c4bf0c6ad2e06c26b1e2f54ff88484df7d312495791f098ec" - + "367", 16), - "0000000000000000000000000000000000000000000000000000000000000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "0001"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000400a6887b6967" - + "ba24669436d6e9c64a436389e7b306a107b213e658dc2392a8d76c418f653f1c" - + "ceff4035c08bab5eb59064f458e4603b7ffe3cbb67d4e853bc44878500dd076e" - + "e41c9f43f76d5fc6132b9132ceaeab9ed6d13dfe93ba11690f284ca30740c20e" - + "864c846a36ddcbc6a0ef0546809f2e2ac95d93824e69a137e398b0132846", - new BigInteger("16a6259942027c122855042467bca1146ed5adfcb62f80a1cac9c57e2d76a580" - + "175aa1d93491f0a6243c5ad84d247bdd42a1dd876db72fbaa0722ee769127ea7" - + "591", 16), - "0000000000000000000000000000000000000000000000000000000000000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "0002"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b8104002303818600040001efcda938" - + "de5b0141c52a90cd14a15518b1f2a44867a867b8c833b9e8b368c2dcb9a0bd01" - + "4133313b6b06be2152e7c1a8769468828a716b344b2702c328fd7f1701de36c1" - + "d49a94a1c7a60e38af4e1fb2098c3f9b92e99ae935ee1f9cec6fbedaac2d2227" - + "1c77796852e42dca2f601a26cd27bfa7c616cda8837b44933d6287ed2fbc", - new BigInteger("1d03ece086a531f82916d29cc40cbbca8be84b181c24bbde942b1092f352f6db" - + "aca1991dca14ead801d1c5cc6348be5f8ca7d5d901b8bbea29e1abdd2b470cbf" - + "515", 16), - "00003fffffff00000003fffffff00000003fffffff00000003fffffff0000000" - + "3fffffff00000003fffffff00000003fffffff00000003fffffff00000003fff" - + "ffff"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000400b6c397a25b" - + "670e2c0ee1ef2a6298f35beec330e097fa3b8590d97aa99dd968a22395360c4e" - + "0bb0813450a4771cf3a8eed54a124119eb154c53216042f2709770c201299201" - + "ec5c5cbf768fd9cf0f2bda2c353a2439739b96c75b13dfa2036f6eaec20d65c8" - + "139c009fc455f545ca269acd02e2745d5e086c860b2637f75144cb7d044e", - new BigInteger("1eb34a1fa19633b82c3fe7c9f17cc583a6e602515cbd1aebfc62c5aa7d31b84b" - + "3ed3bf6013d50434157143ae086fd377ee28440d72cf5053e518ba1bbb9d491f" - + "c0", 16), - "0100000000000000000000000000000000000000000000000000000000000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "0000"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000400aa40d5df13" - + "1a2bcb032fbabaa3c29a917d160fe812e5db9e2330796f0470af0e21aaa03871" - + "a053dc9f71c51d3f7fa16ac02953692ff1b7f334f163c3331ea333ca00d2fc91" - + "97ffa6696ed286cabc0dd51b3d16ce82e1fb7f04c01b5801485aa34a29a999a2" - + "713be5570f80cd3c7153b1c0d16d93b7d89eba86818fa622622873a19f36", - new BigInteger("1777f42a4677dc68864b6d606c3b7738dc5539853d79290364f4340ce50b8ba1" - + "7f7286e7f2778d992102f1e2eb3a3c11f89b335e15cb39f23193381c19a1d34c" - + "de2", 16), - "01ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffff" - + "ffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffff" - + "ffff"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b810400230381860004002149666876" - + "9fdce5a2a1e703b3f8fc5f75b4f8fe90fb65acf2d24f40060b2b7d3f7f01f3f4" - + "8131278a33358c4697d78478e0e71bb2cf3c98cf7b9600b39807315600ad0d17" - + "01d62f4c51d363ef0da8327ee0e0446071066ecc3187c6fcf7f3e4901f8d1370" - + "81d6036e93e51d1862e744dfeff9e3590351b0bb6cc200803c802cceb3f0", - new BigInteger("0cfe4a5076b9b4d3375fe5d1887e4dfffa0985f86c96dadd50ffc1615787c35c" - + "a631b3ca041e6179648acb236035a68471a3fdd2989e6dacaa95bd91e0b84c73" - + "e1c", 16), - "01ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000" - + "ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0001" - + "0000"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b8104002303818600040067c03a18a9" - + "f861651c7d1f0d1d562a1a61ff73c2fb51242009bac64ffbabdb0b209cb979ff" - + "f57bf2204e1dd511ce4ea72d9d065144fe274b32e1555d952773e7cd01cc6e46" - + "6f3add113f6d819f2b83f9909eaa68b288b0f2087c3dc781edbabbd4bad03572" - + "944e995db00efa2f322a554434f811120e5de9dcdb8e04792cc7562ed676", - new BigInteger("188cb47d2210832bd6850c9f7af49a3e9e89377a96ee1d2a73529fb6a8a7a903" - + "929d88bfb4918c9c457a9a2f47febaf12921d0a1d047f4d1f7717613ef3df43d" - + "728", 16), - "01ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fff" - + "c0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc000" - + "7fff"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000400e68a351c0c" - + "a122ae9ddcdc67792a6602dfb8058467adb53099292048d04e91d43779c1c429" - + "47cd1907b902b1d242b3277a241040fd60a3b14a28f4b9c5e59de7bc017e12ec" - + "1118a2f198e139e1a2ac18e6fc8136b429c40115e3523e0d2bbefa4639bc3e5b" - + "0188d5ae508c190c6922806eca74edf02b056db1074ae867af5b5f874c68", - new BigInteger("1f76b4d9b4a5703233bc779a3464475b7d48a1db0a06bc7b8d016218c0e0dd67" - + "ceaa272fd3d6ba65d403fb708b101d0de805ccaeef55714a0fd94eca273e8735" - + "58f", 16), - "01ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007f" - + "ffffff00000001fffffffc00000007fffffff00000001fffffffc00000008000" - + "0002"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b810400230381860004015832b4f6df" - + "b22031046358ad93c843cd45f430b2aeb9cc42053e83b99316ac1e8db4ea11af" - + "68e33abc85ae928e7fbc0a533314ccb4f9a850d4a17b14917c9da08c0069312d" - + "f170b806669fc4b6fb9cdf79b2edbcbea9692b9ff43eb605f841375bdcaffafe" - + "a9c5ea459d3828fb7ca64b0ea4ff191655308db22a4967f297e01f7cc5b6", - new BigInteger("0e2edaa38ef056b78262509d2a08d27ca3abb926e4ac98aa4704347e7a1b5c24" - + "fffa9d1bd00f37fefb193034c6bcca32c4f1bef05895cdb31bcf0ac4291c0aed" - + "9f0", 16), - "01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - + "fffd"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b810400230381860004006837a89b34" - + "7bce215ba0bcebfbdf3fcb46c6744d0819439adb6d2e34ac8788affb4b5ec1a0" - + "90fdef58643029409a2cad98f8277ee0be7ef966556ec08a4fc97e8f006e0491" - + "e7be6ce05b98309d22a3a01dfacf694b5b5b99c3350f470b655193e470eb9b4d" - + "dc0001bd806f217137cce6205c3f443d2b5978e952229dfc2d1cf0de3673", - new BigInteger("6f0c42dd71e52c455b6e6571e4c2950c6fb6a82a91bcb08a6de7f647f644b058" - + "15d3e7de07fb92f6c5c98b25072c84e40ededd366815a29f64cdc8e46a33bb09" - + "81", 16), - "01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - + "fffe"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200048ddfe6cb" - + "ac3dd65f815e7374d721b1bc03b2d007e50b93b2f7434293cf0579a696907f4e" - + "b68418ad3d955987e01d34380b2be76623e291679c37a7d19f3cb098", - new BigInteger("66ebb3d73d9e82279fa2f80c7470ddbe48d90eb45246c4fb19f38974876c5ee3", 16), - "0000000000000000000000000000000000000000000000000000000000000001"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200040930bb2d" - + "80d33db4071a34fcc77004ee0c6b0be7686c66b0f13a0ba89f957df78c522da7" - + "9b0bfeae34b49ef86c3f500ac83677b24afb31eb818ede33da4d17d5", - new BigInteger("5fa1e4693e18046c5d7540cc503f69444c6465737ab94b1575857d266749d805", 16), - "0000000000000000000000000000000000000000000000000000000000000002"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200040e3fa34c" - + "015fe23682710712014d34437c75650557c3a0e274028bb69e5d10945f51a4c1" - + "8b1a5592fc883ae0c35f7b83e5a5c3fce46bd95757188e0aa9a3b91b", - new BigInteger("1662eb3c7e09def21474a1d1748c13354451e73e2bf6df94fb3c283ac8425b1b", 16), - "00000000ffffffff00000000ffffffff00000000ffffffff0000000100000001"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200041692e8ec" - + "72b11baed89139ac7c3de1032e931b6b39fb3bac834958e12c50bfd5a7c68cac" - + "11ae6bc9cc2fa88de30d4d7a582873d4e70032e4fbf33e5ae1fff528", - new BigInteger("29de4f7362be7cf8fc025f7a322e6a495d042fcea541b98ea72808fe1f2eadb5", 16), - "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200041d92ac08" - + "6206308f692b954e638784049e4d8359cb298ceffc69b0e7e020b6f7477ca259" - + "e0c573c1222b6a11a4c0b2076bd98a3edf00afdead7c9fff6bf8fcf4", - new BigInteger("08550b9b3db058bdf6b49d774e8b88abfaeab829e56550538a913ee480d736e6a", 16), - "7f00000001fffffffc00000007fffffff00000001fffffffc000000080000002"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200040d939884" - + "5132475dfd9d5d19cba3e3513ee97d88494dd8c96c5f9f5287f005349507a345" - + "c2ce16fd720390034e7f0ada3676802d2cd9562eefa1e84af8e389be", - new BigInteger("275327fdc7aa4d64423caee21b125a491663071af1d6d5151a6bde7fa79eb7f8", 16), - "7fff00000003fffffff00000003fffffff00000003fffffff00000003fffffff"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b24030302080101070342000471435f10" - + "b4a9f711564c385bd52018008a2769a6f2abef3eb2abc3665e84c5018a7669fd" - + "adf9f154f15524068103e7bfe6d407955ba425389f649fe967849b48", - new BigInteger("40e767db1c3251640bec8435f9dc34ab5b582f28dde8ad89bc89eb9b1d99d7f5", 16), - "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b240303020801010703420004434f8fd1" - + "3025debf0f3ef2b1d8f8149e6c3b54ed23ced882fadfa423b20ec34d7eb8a099" - + "6c6a4b23b6fb66c00b616946a4ba1671cceb25ca153aa8b60568b992", - new BigInteger("691af60da82e8f696f57c624291103f28349d0253f580927cbc786b593b1f93e", 16), - "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200049f796d43" - + "32f9762fe83f7503852ba9ca04ff7e70183a64a783a92a7942c04c0738c87e04" - + "fa81e60d401373556b7ebbd825f29ee5dc3c0bda5b173af7f9bb5723", - new BigInteger("53425ad188c525cb80c4e90c06fc650b3fc3a544dfaa86fe8e2a59753c09ba6f", 16), - "a9fb57dba1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e5376"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b2403030208010109035200041b3a403e" - + "0acbadc4166d63269caea16cd571dbd706bcd8ce9905d4ec69b90f7e8fd93f0b" - + "e53c7779a3f7a414bd7f822f0ed1417ea1656ecb6c5a7cd3caefd348ed65d0ba" - + "6abe6764b51ff05395178c20", - new BigInteger("09c301783c077a95a6c781960daf10d445011d9fe227ce17a64103c7e94b7a09" - + "a7acc8e20dfb948", 16), - "0000000000000000000000000000000000000000000000000000000000000000" - + "0000000000000001"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b24030302080101090352000406ea533b" - + "98f3a3d423dd95382a0ba86175b3f7eebde63d0b2355eeaab43bd26cd714e9ba" - + "0b01bf90896959c543e792f1d2b1bc446f9c6b9113e2b54a17f02870047a1c39" - + "10ed7a4d1ffb274ddf19acc3", - new BigInteger("62c2816fac0b517baeb3c3186f8451fc645bdaa62ce9fcff2a201b4b934092a6" - + "c38355828dd5f0d3", 16), - "0000000000000000000000000000000000000000000000000000000000000000" - + "0000000000000002"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b240303020801010903520004785051db" - + "8bcf7a0e42a4f9d02c0e6c52c67a7c9551993b1e582834871a492133b0c3f639" - + "2c9b6a28b97dcd634b007d6a775d94f11846440152b61ae3f4eb5c0592d1ad8b" - + "ce6d72624d09cd3d20d94068", - new BigInteger("405b3e3504ebbcdb44e5c94b74a3680b547fa8819bbedc681fa1e7b660de526f" - + "6e3805624b485426", 16), - "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff" - + "0000000100000006"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b240303020801010903520004a4e00b06" - + "cddef03e47e2ca7d6e94d175547b1b4df454ae5167ee0584a9c3814d2ff2fe7c" - + "d23c30e1cdad451ae9a8d5a90288ec347587f554d1fd34bdfdc043e0bf182447" - + "082fe17313101288e84e1c0f", - new BigInteger("30dcca12636be87de3d2ba185353cd70ebca05f0d978b31065299b774477639b" - + "753a42d57b658e5a", 16), - "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff" - + "0000ffff0000ffff"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b24030302080101090352000496776d7f" - + "4a79209d5a2dc7f9105b46d5b46d3414827b07b53261aff5d9de5e914bd69a25" - + "faa3419d366c6fab70349933c86904bb0964abf3173d0a6e741848b6ad6d344c" - + "84a30bed93b3622401bf4a7c", - new BigInteger("7a51aee663ee3993ed0a8d698321368c9dd37c3db15dff61056d51d3eba70366" - + "3102b1b55a5b3f7a", 16), - "07fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007ff" - + "f0001fffc0007fff"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b24030302080101090352000431398cc5" - + "84098847a74e48416314b6abcef452e6bb55ec2ff3e705ce99be2f00e808d430" - + "4f91ff00335b7bafdc07159ff40fdd7a1cd19842387247f67d6ebf47d608cdec" - + "93c6ee2831e8a71d81059088", - new BigInteger("4426c6448d59ea003ab7a6b8188c165f8d5a0ed3321fd6abed073e892d4526ea" - + "8437fe88abf2fa1", 16), - "7fc00000007fffffff00000001fffffffc00000007fffffff00000001fffffff" - + "c000000080000001"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b240303020801010903520004786f0230" - + "9b5eff2bdb6b58b2206f8ccfa202baf9154354d4ee4c954f0592b5c812b4d067" - + "fc900e268b58f9600aedb1762f6241cdebef54eaebfae0c37bdd9b9ab928dab2" - + "4fdf5a7a0e5bca063dbc0ec9", - new BigInteger("0932e2074de451ee3978676016cdbc8e315a755ca6bc9e2ad9787217b397dd4f" - + "a870e3074c13ed5ef", 16), - "7ffff00000003fffffff00000003fffffff00000003fffffff00000003ffffff" - + "f000000040000001"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b24030302080101090352000416f0ec7e" - + "986884c41edba40f510f1988cd93d5509246274cd9c080235dcf92e4bb6247e5" - + "0b7974b5211455a09ca2a22f8897b7c336b184ff77a3174af9f2c7a171616074" - + "82048e745771fad4b477b18c", - new BigInteger("66988febf58b1a503b71534608cd98d489aa6b060eaca2303d5c513b5e0c9b6f" - + "f9dbe9c99fa3a98e", 16), - "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - + "ffffffffffffffff"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b03620004841a020c" - + "b95c15d31e3ce4a6bc66793060af461b2c464c450e1d55359551baffb243eb0f" - + "929a8ec5eea893d0e3d3ca0f5f3aeca01aa93ed3d7a2f7d7385d03102e5961f8" - + "c288a1f511e9ebdd99942b73113829042b40abbad533b8b88a5cf515", - new BigInteger("60c7f5de5ae3a6dad85eed30b511b06b5b7164835ee97578c3faf02b8777158e" - + "4cb4b57ea4a0e5e45897e66277030edf", 16), - "0000000000000000000000000000000000000000000000000000000000000000" - + "00000000000000000000000000000001"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b0362000433d6c62c" - + "e69159b083dc29d9bc9d3b8655e0142ef0659e62b6d92ea97fcd543970a9feb3" - + "ca6437dcf3506a76096bfa6b59d5e44760223485a322dcc0e2dadbed71ff1b34" - + "8ddd478a5dd3facaaafb4523c9d0a89f90ebe07944a389b31c0bdd3b", - new BigInteger("2b010b9a913072036aaad7e14a45703f37a801d87bfaf307bfd49aa6e80ca543" - + "7cea3688a5532ec343ba15ff38a4e5c", 16), - "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff" - + "00000000ffffffff00000000ffffffff"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b036200048b68fad8" - + "1b2c0dad9f6b2bae291d7b9a9d9aae04334703a6d4bde3ad93b914edc88dd734" - + "c09d582b8888fa9ffc913fb481ce6f9b31855f7b113bcad6d92599cc248e0bfb" - + "f9278f98bc72f0680252992270a60843fba5d4c7370853c761e6908c", - new BigInteger("1f877d710097a6d75a556e74f3a8c89d19fee8240eb2921bd5afdf11abb1e19f" - + "c9c44912f079ed003933ed20e1e41116", 16), - "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff" - + "0000ffff0000ffff0000ffff00010000"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b036200040742b702" - + "fd04283d3cce6eb3f84a740ded05a92f9cf8051b607d002d20cd321d105d5edb" - + "7c041735935764713e48d26d2110e79099ed49d37e1fe57e4b31b974b1c532e4" - + "bcb104c034f819d534e61c914a6daf789c07ebee9e2b565d33504833", - new BigInteger("579520d7f69d0f598d1330f336e59a2f1265a04240d3f0d620bd435e10146a3d" - + "eb6ba731956dc684f53fefc4ecbdac78", 16), - "007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007f" - + "ff0001fffc0007fff0001fffc0008002"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b03620004451054d0" - + "80f1bb7b88c1ab1af597c792790e8902a46c307a9206a5421da81076ccf473f4" - + "ce81456986b5ed0adce6d62913e2671119645f6650e95975bca51def4f64fb43" - + "a76c14cc91bfb8c749b04d5751df753ae3976d74825aefd69eb78c59", - new BigInteger("14c807d4b2bfde38b275ba56b5a54893cbf2fa760b00a6c1373f150b0a882f42" - + "99455cae80f54ba37881c8e39965c0e3", 16), - "7ff00000001fffffffc00000007fffffff00000001fffffffc00000007ffffff" - + "f00000001fffffffc00000007fffffff"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b0362000450a70abb" - + "c1817f9244242a2924d9b2b168a238d3b7f3c02faef9eaf7aac8c5409146be56" - + "bd16d32c69ccfe696bdb162054977658e0033bc5ae7c6dd3202686078fb8e541" - + "210d410a40948abafbb3acb048ca2cd14a75eb8725d9b55efcd8fc35", - new BigInteger("4ae2028a9fc676602f8ce2f2a21ad8325556a0d597cc7e9688b6680ab36a9aac" - + "d1354d2ebaa252281e6b381cdeaeb888", 16), - "7fffff00000003fffffff00000003fffffff00000003fffffff00000003fffff" - + "ff00000003fffffff00000003fffffff"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b036200046bf6e66f" - + "309d34cab5020a5a9a5987ec708dbbe79d594d5ee93d0fb40f98e605e110b2b9" - + "ab1830d630afb71c17ee21874d191c0cf34519af953634478bc6cb66296e4296" - + "943db1d9bc8a6e77092879ed7bd7c22c1791c96dc5dd5d5df6d4a1e8", - new BigInteger("70772a60b189cd8fa77c99d99f9596298125dd6de21fb14dc9a96035e635d711" - + "950a494d4e6353215aeeb081476c5937", 16), - "8000000000000000000000000000000000000000000000000000000000000000" - + "00000000000000000000000000000001"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d0381820004a0e5" - + "0388c314d81a56b1dbe64c39694b8f6fc372f84304e986b77453c3a4572e4f6f" - + "cb4823da9ea02c5b39d88ec460e70aff41d311f02e5d4c9f2f2702ece872a162" - + "d0ffafe40a5f4cff44574e7ee175cddb26bec4027c29cd3e0fab48748256f9ad" - + "b7d9cddaa3560305c5f49a42ffb5ea987b550b4e8751e5f3a88a5ca8c52e", - new BigInteger("526e3007987a84a8a453fc2ca3a2dd7a15f4ba00968423ce50b320096ba2b721" - + "6a97df334ba19f4d4bd6c672386c4dc3753a1be601a4f396d1b97bf7ab47a0a4", 16), - "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff" - + "00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d03818200048ad4" - + "0d9e1b649ee8f42755ec543de673ac92766e8d237ce331724fa06c3409ec2ca9" - + "bc3b64d4d921512311fe0eba4bb5d176a7c9f78ca836624bfe80795d8f3e0ccd" - + "f70077d5b61f4b75d69a6173f0feda41a324522732ea41fe7efd0a1ed09cf934" - + "f001ca18669d30b635c2fb76c108b0a3a656bfc782dcd0055880d44753a4", - new BigInteger("31dfade358b35f93be45243507fa431bb15bb0529c0deef68beda87d88d3841a" - + "77cb1772b8e75f6440415213c33f77aef92d971750687ba22a184d9fafaed6a4", 16), - "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff" - + "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d03818200049ddb" - + "6585b6e38b2eb5eb76ea6e5386d3d1eda219ebedd24c5b783fecec0108ae99d7" - + "c4fcaacda8f9a4c9d142dff72fe95773dc3d5de8412e62f39ffd38b78eec0e0a" - + "d99c6bde21944f42f00b3c941ce8739825e03e591f6436d8e2641976bc706575" - + "500f4504a063a3debc7d74dd47f979e7398921e8bda6d1a7950fdc5e0443", - new BigInteger("0be4dfd93a8d1ede4252275e8b45aebe39663ba9be1e27950b1551f338202812" - + "0fa425585f2622149970fde98b78cbf3195303475a2f955e0bb9d32ae58d532b", 16), - "3fffffff00000003fffffff00000003fffffff00000003fffffff00000003fff" - + "ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d038182000437aa" - + "c1b7f20d6076d4291774fd5601025fdd85c7ae887b6217b1ef2b238e10ac45e3" - + "acf2a9e2b0091b7ae1b24e830d5d3cc2f4dc3c68efa885fbf18d9ced5d6300dd" - + "2a056df71df75483a3c11e434aaf9c2e06e36bf405e1f610f39cd1e179c51794" - + "7d499742b8b4412a6dc54d66b0323e6276a59edf1675acee19b0c7f2e210", - new BigInteger("140072e85c614c0b76783774e2202ee34bc06c7ed1d55cf6598177c42f07804a" - + "447a08b1bd11529dc0640479c4f387634fc63d933bce49adecdea2972d49d677", 16), - "40007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc000" - + "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d038182000477fc" - + "d103fc32d41854d7509b3b64c6e1c9c1138a2081f0073dd51fffdcd46580b0d9" - + "3b78d77d50a29b52e3ce3f3cab3a91c90cbcf832a1b88bd4137cce1f11ba3c5a" - + "6d66ac49e0d2f9d65e1b754d8b48ae279cbb1a482db930df3ab45f733f410588" - + "ffc40f22407ff6641a5fffd9ee85d7668ab7aa9b301aca603f0a06869efe", - new BigInteger("5ffb3afb78b5c6aaa33c48e243807efad9ad2859a19f2d6dbde42e479873a99b" - + "38cfc511b016c513f402df9f5c05e23dbffc2bc9d862fcd7c86d9ba24cf63a4e", 16), - "7fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffff" - + "ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d03818200048fcf" - + "4f5847a479ed11f23cb76c95abbae93cca882e6cd17df1590480c0787342e724" - + "417474d799758561371060ffc432a054e71d4befc7a84a04efda080f5b1e4817" - + "c7c1c79841a660b17261ff75aab3801fb99a73b19c81bc97427b07c4d60d4a13" - + "3fdce51d71b288d995e2a6cbdfff4d06f4dd1393882df08f67d3c7af9f9e", - new BigInteger("19060f4194710cbb5681dfeac22ff15a75669ae0de35345b4b69e4b2862c95ad" - + "09de2453ff22bda9a8f9d88ae81b23385dcdae44d1624529d7c4475e186b70a", 16), - "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d03818200041fcc" - + "447621fee28c9b13d3b7b174d8f7dd7866916b243987b2f92a89c9e2be69cbd7" - + "246bf147d51ad4ea7bdbb3c92d990d4b50c5626f91e5b21241dcdea952060f62" - + "9e1abf25ec94d3b0c10e6c5d5280b16dd19e7abef8fe7c0fd415654c08698b00" - + "94960c2ae73f2e5fd0d7aeb8b473981fcb1affd85c0c7e2c214bb3f3bf7c", - new BigInteger("37b1580be70bf5da673278dbe707b059ec150e0b427a075a63c7dd2e2538bad1" - + "ac1ca86ec275a031944996fac57c1bd49bdb370806716c4ea4f751074418d427", 16), - "aadd9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca70330871" - + "7d4d9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f2"), - // edge cases for ephemeral key - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a00040000ffff0000ffff" - + "0000ffff0000ffff0000ffff0000ffff0000ffff77c5cfa4e2c384938d48bd8d" - + "d98f54c86b279f1df8c0a1f6692439c9", - new BigInteger("0afa12d5cca25a6f029a3ba2b837e4f98aa6a0c1d8fc6d300f861f409", 16), - "fb94008911b788d442d5e3458acf3558f39f1ebb2a2e51344a0c68a5"), - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a00040003fffffff00000" - + "003fffffff00000003fffffff00000004000000001f0828136016bb97445461b" - + "c59f2175d8d23557d6b9381f26136e3d", - new BigInteger("767c6da34f3a6108303e376998032bda8e362da1289f51ba0665ffb8", 16), - "41ab29168bc19b1fb7c2d755ed649e36a0bcd0001d73facc429512fb"), - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a000401fffffffc000000" - + "07fffffff00000001fffffffc0000000800000012d8acca6f199d4a94b933ba1" - + "aa713a7debde8ac57b928f596ae66a66", - new BigInteger("0d94b6440fd923c76bdd8cd08e6af7ba57d0cadda14959f1331e2d64d", 16), - "e12f928cd6d6bd319dbf97240b8de6352fd014439e279a3954279e32"), - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a00047fffffffffffffff" - + "ffffffffffffffffffffffffffffffffffffffff7d8dbca36c56bcaae92e3475" - + "f799294f30768038e816a7d5f7f07d77", - new BigInteger("6536c872294d58ee3308729be6e531f3207abe9cd7f912ef36f54870", 16), - "2e52327991e925526574ced51bbf32f1617098983446b848029fc81c"), - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a0004fffc0007fff0001f" - + "ffc0007fff0001fffc0007fff0001fffc000800174f1ff5ea7fbc72b92f61e06" - + "556c26bab84c0b082dd6400ca1c1eb6d", - new BigInteger("0fc93809800ccf0d14ba6e4baf1106135fb84a6edd0babf4303b1a38", 16), - "919b8ba25f19028217d8c1074d0316321f587ccd555ac50c2557ef83"), - new EcdhTestVector( - "secp224r1", - "304e301006072a8648ce3d020106052b81040021033a0004ffffffff00000000" - + "ffffffff00000000ffffffff00000000ffffffff1c05ac2d4f10b69877c3243d" - + "51f887277b7bf735c326ab2f0d70da8c", - new BigInteger("6c49d434ceb307ee6a1a56edafaea3007bf86b2e650f6ef5801e6d0e", 16), - "3a3baaef6bebb6fcf0e90a78230977454fa173a42595238c4042cb00"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000" - + "00000000000000000000000000000000000000000000000000000066485c780e" - + "2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4", - new BigInteger("088c03a5a38304948da54216863307c67dfd1b6bfea1a95e941b9b40a0babdedd", 16), - "f7072666bb3f5c5c46d812fa7a4166f783fbc577758759deee593d230d617db3"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000ff" - + "ffffff00000000ffffffff00000000ffffffff0000000100000000462c0466e4" - + "1802238d6c925ecbefc747cfe505ea196af9a2d11b62850fce946e", - new BigInteger("0e531218f3e5347d113f2e2d9effcfd001d616e795b0d9fcfe5d57947659847a9", 16), - "6cd9959abc051eeb81142dca2644f873c0b19e4b4b7e9298d483de48071854f0"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d030107034200040000ffff00" - + "00ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001684c8a9586" - + "ed6f9cbe447058a7da2108bab1e5e0a60d1f73e4e2e713f0a3dfe0", - new BigInteger("0fe37420c91cdb1a6c8fc90c362aff517883fcd61e4d63516a10b3d5df7b46460", 16), - "b60b7058285df03f1273352007e3f55447c62d403a9a902fe844898babfd142f"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d030107034200047fff0001ff" - + "fc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff2e2213caf0" - + "3033e0fd0f7951154f6e6c3a9244a72faca65e9ce9eeb5c8e1cea9", - new BigInteger("119bbcc59126f03853d109153e15f4b6ffaa999ba66f0fd9db1252d41731484f", 16), - "48bd6becf17899a585e049f0ae7b22fdbe8a4977ccbb08b5f78ecd1871196cf3"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d030107034200048000000000" - + "0000000000000000000000000000000000000000000000000000042be8789db8" - + "1bb4870a9e60c5c18c80c83de464277281f1af1e640843a1a3148e", - new BigInteger("6c1c2bec81db9deda4a145dba835b6013bc678afd6b563a39a52216678c28485", 16), - "c932433b77db3da1c5732db24997cbb63ed30bd763b56c1ab561a03e69a8dfe5"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d03010703420004ff00000001" - + "fffffffc00000007fffffff00000001fffffffc00000007fffffff5df80fc6ca" - + "e26b6c1952fbd00ed174ee1209d069335f5b48588e29e80b9191ad", - new BigInteger("095ee174620feedc08456ca1240058b287f0e535ec4345507586112d65bb3cc46", 16), - "f9f1837a64cadf5cb37e859ad33d11da7e53f25eda41de478dfa82b4b88a318c"), - new EcdhTestVector( - "secp256r1", - "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffff000000" - + "03fffffff00000003fffffff00000003fffffff00000003fffffff2c63650e6a" - + "5d332e2987dd09a79008e8faabbd37e49cb016bfb92c8cd0f5da77", - new BigInteger("0c5bc3ee5d8ff36e4aa75691eab877cfe86b44c322173e88ecde059d1291f336f", 16), - "5403bb179d758de79685b5fadd1c65fab2a6ea22ca9a2e958663dbfb135685de"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b81040022036200040000000000000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "00000000000000003cf99ef04f51a5ea630ba3f9f960dd593a14c9be39fd2bd2" - + "15d3b4b08aaaf86bbf927f2c46e52ab06fb742b8850e521e", - new BigInteger("0e9e989964d7fce7ea5f99695569a16807f8ff1f92023a48d8be1193cad9552c" - + "264fab6c4c9802da9c3f70d41033324d7", 16), - "50e5d5952e908169f0da06ad0727cb88976c39bc77fb32b48612c7050de4b075" - + "e851099933f4c522ff094829e55fe95d"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b81040022036200040000000000000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "0000000000000002732152442fb6ee5c3e6ce1d920c059bc623563814d79042b" - + "903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3", - new BigInteger("287533ac7f3bdf4dcbe62bdf3c34785bec0a57807ca76d60bb254c393ae64a32" - + "71f3e6e114d4d51ffa39361034d43cb2", 16), - "777516826d15cb7063c08b0e54c668d32e0d932221c719e879835aec0827b173" - + "5c0874ae2701127abb69d1fa87391a13"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b810400220362000400000000ffffffff" - + "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff" - + "00000000ffffffff70370385413d3eff6fa3407ba24f682c2b01b51445dbdf5e" - + "f7b0dd0979f17e713e09081571f1e94dfb66bf282002f39f", - new BigInteger("2482eb480bb42f8a4e5b40364001f4854125d7470cbe6a07f97c7064f4092cf3" - + "7fb5fecafb8541fb53815b8f3b5d47ad", 16), - "1503e27812b71fb80b90ffa5a65fda25cc7e1b7766f0250577217db4f257029e" - + "a6a5ea1fd2adb6351239f1813b49522b"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b81040022036200040000ffff0000ffff" - + "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff" - + "0000ffff0000ffff112e191f1f78bbc54b6cc4f0b1e59ae8c6ff1a07f5128e41" - + "dfa2828e1b6538d4fa2ca2394c6aab3449dcb3fc4eb44c09", - new BigInteger("17c1564cd256692fe14c519f1749dae5a4639b27f32da167382562111c633dfb" - + "a51494b7368ac6b7c4d23cef6aa87c5a", 16), - "f355c3b3a50aa985713f6ad40fb8a964ed31255ee542d660d8d82dbec2026656" - + "626c6e22c6f6041c0a890ee2b0fe7b54"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b8104002203620004007fff0001fffc00" - + "07fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007ff" - + "f0001fffc0008000028a4c8da5a05112fe6025ef41908969de20d05d9668e5c8" - + "52ef2d492172ddc2a0a622fc488164fcc1a076b872942af2", - new BigInteger("0c4f3982377d1a1d32c66d4acbbc69f221def10d17512853a4d3929ffb83193f" - + "e13127fc85cf82d510b9bf4f2922e7ea3", 16), - "78ef5d865034c6dcee65fbe91f6ff76d2adc5f519ced309418c92e3d54f6521c" - + "1c5feffa5843e705fb72962d4fe2351b"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b81040022036200048000000000000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "00000000000000020797da4c0751ced16de80d16ab7c654a5dc27d092626d086" - + "5a192a1c5ea7c1b88c9fcab057946741e41cc28c80ec0b9a", - new BigInteger("67e616281ef5fd345887cd66f4911f4455e5192d550d5058a4a10264d7eebd5b" - + "37a9ead23a9c59905f1554b549755ed", 16), - "def5376fbbea1605cd07ff5ab8954d02c3827ff1576464ddee135b94f1ddd794" - + "9d279d87a9eb01da8d9ba62314996b69"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b8104002203620004fff00000001fffff" - + "ffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffff" - + "c00000007fffffff6c70898ae6fb31fa2f086562af2d10486ba4c6fd5e41dfe4" - + "aa61598b4707a3bc276a62feb1b98557e3b17c025f7adf4e", - new BigInteger("0c30831e3b31bf5cdfc106c4c8c381f58df9ad0e0da755c3347c1029e3f3aecf" - + "babaa1ba9679905ea27f7140dc32587a3", 16), - "38913fa0674226922590537345bcedbdeb77a44ab776158da5cabbd0b36c1e89" - + "4f90a6119896f6418db97ee51011fd1a"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b8104002203620004ffffff00000003ff" - + "fffff00000003fffffff00000003fffffff00000003fffffff00000003ffffff" - + "f00000003fffffff4987abae412809c2fa48fd23b1bdf9e622f5a606c4411721" - + "5ffa61b18ef46e54a7fbbf11f9a6ba59c991b4ae501fedce", - new BigInteger("0ca13630aef56b21ac260f68ba5e05c76b27c64a106f5ae8b71bad965d2795ea" - + "bdf4afca1c6971a3c0b5d224ba6c20013", 16), - "0d503d9bc44129ae7b6a9df1debef79fef1bbe5948c5965bd80394b809968802" - + "4524be203587c890bb5ffce30c25fdb8"), - new EcdhTestVector( - "secp384r1", - "3076301006072a8648ce3d020106052b8104002203620004ffffffffffffffff" - + "fffffffffffffffffffffffffffffffffffffffffffffffeffffffff00000000" - + "00000000fffffffe732152442fb6ee5c3e6ce1d920c059bc623563814d79042b" - + "903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3", - new BigInteger("6df60ed78fb26471f873f83d254563e7740c70a3cb61b03382a9ee185a1104f4" - + "f72252a86be3f236e0934464a238beb2", 16), - "364de15a7408e63d66c71c77a187ab358918af731445a1f777a5d661cbe69db8" - + "99d4d46790279f42335052c7bfa75be1"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b810400230381860004000000000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "0000000000000000000000000000000000000000000000000000000000d20ec9" - + "fea6b577c10d26ca1bb446f40b299e648b1ad508aad068896fee3f8e614bc630" - + "54d5772bf01a65d412e0bcaa8e965d2f5d332d7f39f846d440ae001f4f87", - new BigInteger("1aee1144e72c5492ca3182d7ba0445abd6f449aa5bb866f166a03c023f600786" - + "c7353ae8b00e1605e1a5209faa07617430dc2230fbdff570c016aa543fe2c619" - + "e15", 16), - "01cf8eb7e4dcc424ae67ca0a54549e9a8a12426818d3a4c3850cc9b7c8702d55" - + "b921a4efba011930f8584e81a873b9e5731d9501b882513f757e70b45113b003" - + "b0b4"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b810400230381860004000000000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "000000000000000000000000000000000000000000000000000000010010e59b" - + "e93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec6" - + "36ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564", - new BigInteger("0c5ba19a01fd621161553a9b75c40c4e0eb7bf9500ed187bf6edefe6b4229a2e" - + "198815b1f8b0f6b1ed452d0f80a51d6949dc0fd2d2d457c0c0f04ac41b2e7357" - + "ab3", 16), - "01ab7a23162cbe7d36021a5a8095df8e7f7c1085ffdda1c59663d0884ab2b760" - + "8c5a299e0d1f874db73203e46fc219689eff4b2bf10187fde8b692cddb570a97" - + "4956"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b810400230381860004000000000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "0000000000000000000000000000000000000000000000000000000200d9254f" - + "df800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a87" - + "9b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf", - new BigInteger("1073a9a2eb11c580316e13925b3278966ec17ab90faa972c71fa1f4e139619b7" - + "d72832623c0a919dbce55b414308c91909842cb6574535cd9f37e58c9a59793f" - + "9c3", 16), - "00a093ed6a932ba8caf978ea66a07a8421af9ae7331206e33ae7505d5e510e0b" - + "cf514c20cd5e4a3053241b154ff5b64e294bb9f2950fad499d12da88c5dbe12a" - + "19c4"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000400003fffffff" - + "00000003fffffff00000003fffffff00000003fffffff00000003fffffff0000" - + "0003fffffff00000003fffffff00000003fffffff00000003fffffff00cd2839" - + "d857b4699f5c8e8a0194786e26a862f086b4ba80746ae5225ed3aa68f96b7aae" - + "c55225830bb98f52d75221141897ba49d7a31ebbf0b6d7d31352e5266190", - new BigInteger("08d3378cc64dff0de5a02f2a680e43aa302ede5364a755eebaec055fc9b1f6f2" - + "30c7c1dfb3fec80893e75b5975bdab2a53cf0fc72919f0326e8d856da20fba40" - + "e4c", 16), - "01adba7713d8c8e0138eeb888009a3f1272be952849500b48a76a24ca6fb0a8d" - + "c58f320cf4e4f768f20ba0b5f8a4e7d62364a810c25a70d9af13bb9ed1949fbe" - + "1a5b"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b810400230381860004010000000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "00000000000000000000000000000000000000000000000000000000000813d9" - + "829119f42ffa95fea8ba9e81e4cd6a6ca97fb0778e12e5f5dfe35201dd4cca8e" - + "ca0d2e395555997041381e6ac1f18ddf4c74e0b6e9041cfdca1d1c103091", - new BigInteger("148774fe4f66954161c0e3180e4d2e590ca6c8f34668e08d1e7952d42161ea8f" - + "5c7498f4670565f291696989c7be90ce2a7c641ae80c55485cf91d6bbad92d46" - + "316", 16), - "005129d355f994fa8897bb8e625483b000750e255a2cb222418ea03d77915bba" - + "310541ea3f6014ffaaf297aae275f21a406dcdf2e0b79bb107d58773a89ab945" - + "b41d"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000401ff00000000" - + "ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000" - + "ffffffff00000000ffffffff00000000ffffffff00000000ffffffff001fe800" - + "c50e54012b75a33e4be7d07c8d60f29680a395e951a6a31c5096b0ea928fc2cb" - + "f327dd784dc0a7ca46ea73992b758b5641364b4aba39e93798a4d925a008", - new BigInteger("1b380248801aefb199d7b3416d333ac3b8edcb2d2c0fea06dbbbe0748a006f72" - + "c2dac18036207c4cb9fb08795a8662c02fcea3d0749c5c5473fbcdde1d246365" - + "d95", 16), - "00d86f087287ccc7dd06b2aa8f76f08d8926c0c1c8fbb2aff29984519269c37a" - + "83b96cb3e97325af4af284d4c0ad03b7f539a427209128eb0b2455a2fbf766b8" - + "da01"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000401ff0000ffff" - + "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff" - + "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000008dd18a" - + "1f5e482140be79bb65a21ad60c8987e532c84345f0135affd46ec71ef02b1ca3" - + "ad56f301d955fa306c122d441d6fedcf8b855ef256350bf69d23a7207ad9", - new BigInteger("143b1583f68dfe2e0e6e32404deacef632bb356f21d2ee75d2bf1f48d0a85b9a" - + "8c5d386786318c019ade7ae6137a2dd0090c746dcce04b9768302ff2778809cf" - + "5b", 16), - "012e91e4a6ddc4559550a00e832192d9964ab4b86c0fecbc0171f49c4dad413d" - + "6b8f34121eaf2a040277d2462ce0e72b783eb59330798bb6407c7ad3f3828ec2" - + "0e14"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000401ffc0007fff" - + "0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001" - + "fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff00b11c66" - + "8fbd549f36889f7b63434051da26f15705839136b1b14a09152d7a182ea7806c" - + "35478a32d3aa3c9c1627a61519ebec71b36fa77449025b8829e27f307834", - new BigInteger("138b150200366a3c51feaaf2d48fd641c84a50513521d4c793f11e264cfe7adb" - + "9e342b8ea4682f306317138588655d2144c47e1e98e6e13ebf4859273f89e466" - + "a49", 16), - "0194c232d2018768c2b65420453b81fbc91e11d8116acafd9ad1ae40efaa5fe7" - + "f00c3a0101846deb90f4e9a1de3f45cfba8b87ba5119b504175aca87cf10c4ba" - + "ee8f"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000401ffffff0000" - + "0001fffffffc00000007fffffff00000001fffffffc00000007fffffff000000" - + "01fffffffc00000007fffffff00000001fffffffc00000008000000200aa75ef" - + "c0a8daac1d73f32c9c552414bccf44af8e74331b47439e7dcc49a135b3ee61e9" - + "f69717d89b4bba3567a195aeda13fbec634bf2984b5ec6b6f80f5978ed5a", - new BigInteger("1a1c37ab9e059a76000e61c9f9bb34e315a28b3c2beb2f28666584cec2da967c" - + "3f46dba3954f997f2d56cf5a62ff7f5fe28996ffa58b58149ec4b28ff0def4f6" - + "f6f", 16), - "00b14c9b7c144f72ef4cdaf4d01f3cdc1e1e90059ba0fa88590153fd911d78fc" - + "2e9db89dfd5f016a43ff41c8177c3fdc20cb4562e77114a608d221c6333cdce9" - + "6913"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000401ffffffffff" - + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffd0010e59b" - + "e93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec6" - + "36ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564", - new BigInteger("131525c6fb6b6c4a3d0b74fcd86b41e364d2a892928b7628636d799fcb324fc9" - + "69a863176a57e94f8140a6a3f5a7bf73d8853bd0ab47aff0ae34e0714f896bcc" - + "549", 16), - "0193975a00c6a7e5f40269b5f544b4e2af3925d03134bdcd673a0f36a0d66429" - + "721a605abfef13baab4af086b77f43cc57364cc19b9c7fbf8d4754c4cefcfaee" - + "3bda"), - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000401ffffffffff" - + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffe00d9254f" - + "df800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a87" - + "9b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf", - new BigInteger("0c8b8e496d087d9e2eb1e5c61b461f5794f6cfba75c64f7f72f5c1a29458898f" - + "3ffadb67aa0ed445e61bd459d8272939756d56bce45a5098ba16c43cbb5d83eb" - + "7fb", 16), - "01c9b46ea9eebca3c84933cbdfacd48238034ea1e0d93a7d9b1b0178b25510ba" - + "dd65fc231d69c7f42c8bce1ae0ce5668f4f3baf326fb92642069259fcdb9fa7b" - + "182d"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b24030302080101070342000400000000" - + "0000000000000000000000000000000000000000000000000000000109e0e9e8" - + "d98fb89da2a32b2c7618b26bb99b920f02a5e831a142e6c8673110cd", - new BigInteger("0a7c6b3e229cb647bea210ab995505e91c38531db462fe5b8f4e9af961b407400", 16), - "1855af1f5db82998667d5667b0561555b11e641dca459a0758a8318ab1a0be31"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b24030302080101070342000400000000" - + "0000000000000000000000000000000000000000000000000000000226ccfda8" - + "234fa9b70316b5ec4da222972b34a970cfe6dd9983a05e2fa746b902", - new BigInteger("0a2cab013ae7403a5a7fbeb2d59a99d4ab8befcef9c16fa3c2a0768dbf11a7847", 16), - "4fe02c2e6b390a9097a3c336b735e91b324ceda19ad19b35380fec704359fcb4"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b24030302080101070342000400000000" - + "ffffffff00000000ffffffff00000000ffffffff000000010000000131625916" - + "fc4e157b1cf93f3c80352ba4dbf26effbd87d31a2a808d001081f06a", - new BigInteger("71a27f1743dc3df6f983f377297a89385860635475d9460b52b55039db838246", 16), - "58a91318d9234703fe1800d0dfd0b7cc58dd57a642ad30ff9b41107797c51294"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200040000ffff" - + "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff2c6fb330" - + "2dd93dc25d2c6792c2ac6f86247c4d39637ee11d9267658017f0055a", - new BigInteger("2bd41653f2e50f8d65f6b7e2eae1fc625450f4c71d0f55f288f8dcda60152d87", 16), - "4e90e296f5b48ecc016d4eeafd176d4401cdf2dbef0d63035061cabdabf227d2"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200047f000000" - + "01fffffffc00000007fffffff00000001fffffffc0000000800000020cf9ab58" - + "99c59216d6d1bc786ddf6221e374cd37a8b745e826c6495bed0a56b0", - new BigInteger("2068ce3d93fb02f16793e3ce9dce78e67be91ab0843a6e283d016133a8bdbe78", 16), - "82ce8e44e8267a281bd8d968a259437db91c6d9090cff0a2a6915e08958db5e3"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200047fff0000" - + "0003fffffff00000003fffffff00000003fffffff00000003fffffff01a1ad42" - + "b3ff22ba6bf3c94b55cfa4d13c6e140d3c44963198f496ebbc50439a", - new BigInteger("30f764d994487380c67383494ca74f730cb55cf44c2a81dab2da31c2184f4b27", 16), - "23e25799b4b25e5d52f6b202a7fb5486dce7bc705e0c4e70d7f8dd4004f9b049"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200047fff0001" - + "fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000369a4e24" - + "f010260d7c2560f7dc19c41cde6b5c503b6563678580f0d22c74dda4", - new BigInteger("7356eeb28dfd424976c1660732b23021da8ededa262a00509116d6af21f0f85e", 16), - "0374d26b149dcdc5df5fbaf22bac0a56b28705fd4671089b4a5d774aa2bc7896"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b2403030208010107034200047fffffff" - + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff178945df" - + "488779235a2637c39a4a85ab707bd56e7c22b9ad41b652560123b6af", - new BigInteger("3e8d9d702e5678e270f422d1d4c42543e85065575e74ed3dfcec0ffec1380fbd", 16), - "58816ca002bdaac6485de985aa493e35677593544c03f268e0863a990992f78d"), - new EcdhTestVector( - "brainpoolP256r1", - "305a301406072a8648ce3d020106092b240303020801010703420004a9fb57db" - + "a1eea9bc3e660a909d838d726e3bf623d52620282013481d1f6e537613a0346d" - + "b14d55d1bcc27079b68864ac32885b5bdfc3c9db6f85a35d3df4c39b", - new BigInteger("1d5251bac7b11d73929029e9ee247d5c582970214bd21871259d5cdc9f6452f1", 16), - "4d09ebc572a9598d3875eb00cd288a848a51f9a6f6f169b5bb79a68f1d829d60"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b24030302080101090352000400000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "0000000129110253d52cf3c5fc3382fca93d18adf7b97999028767b9722381db" - + "68fe3a41793b7d9952c6177f", - new BigInteger("088c2e254519c78a6be7b76aca06fb8e652aa6000826f4c41318cfdc7d7fa6ad" - + "b88d1059dfd72dc23", 16), - "70669adbed0dc545f07d69e0dc6e94d36dfdfbaa916280a964787734f211f254" - + "e13f3cdd4167f1b9"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b24030302080101090352000400000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "000000020d1a18c0b25d0d32d9c4249a523cfcc12a20c2ead596607d73260895" - + "676315a70ad098e8b51d25a8", - new BigInteger("4c8dd940c2a4e0a2c8c7795c1b0f9dcdcb561359aa4e07db8408667c5f5b0206" - + "a6c1a2573a2d2398", 16), - "9c38b3f4eecbe4023d22be5d830853041de60f8802b8e1c9633fbda2d729afd0" - + "a17516c88c0678b2"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b24030302080101090352000400000000" - + "ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000001" - + "000000063a91ee30c63eb15b1c0f2102c6cf3438dd75ca71636238f891e367c1" - + "05f0b781d02de648399712a0", - new BigInteger("7584f456eaa7eff0a63885c03295dc5ccbc77ae04924f42dafeefde9633805a3" - + "5f228d6d055f8c36", 16), - "0e11df6236716ddaa14e304f56fdebb3deafe086acc1b3f6efb6c456ba116dca" - + "8ab86e031fba6f6f"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b2403030208010109035200040000ffff" - + "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff" - + "0000ffff308f36ab8f37e97723b0aadd7ee4dd585b9e68dc00db4242f6c3cf7b" - + "0ec1497a26e629b24a613b3a", - new BigInteger("6e2f97f1e8760800f8324484e1ae5307229a32d3b978e31f0fd820076fe9b3c7" - + "222867e004036252", 16), - "1aeb05b333e3cf35fe629dc07e3fdd5d7fd4e917904b10b16765c1488b8e15f4" - + "e33993f4ca7366f5"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b24030302080101090352000407fff000" - + "1fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fff" - + "c0007fff231f9aef9b1a7c143485f601980bfa4f7bc7b312b01400bd1d156691" - + "97e07f2edf39cd08c905e280", - new BigInteger("63c24c4f9d7c9db62b7c18ff03d63dbb83aaf59217a88ceef74be517ac37ca35" - + "e95507eff81c61a7", 16), - "c37a0b7bbf58ca4a47eba12666ff5ddb6d32cacd2ebf9cdd24ae8de2844efd61" - + "9e3a612179fe0ca4"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b2403030208010109035200047fc00000" - + "007fffffff00000001fffffffc00000007fffffff00000001fffffffc0000000" - + "800000011a2b8d3c67305de21501cd7c43ad4cd9a57459c42e6fdac1e2cb3795" - + "2703ffdccd18fcb326a2e0c7", - new BigInteger("0c1ecdf2fa0b63c2a9466dbf8db9a940afdd192556c3561d236d1d79b757993c" - + "e345555ca308858c5", 16), - "2fec7c4258c0fd1650299ad5ea671843219522a886b1d6079ea6835412758c1d" - + "32752faea4d1ef80"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b2403030208010109035200047ffff000" - + "00003fffffff00000003fffffff00000003fffffff00000003fffffff0000000" - + "40000001030432044ddf1b1586c51deec0306d02d88e54bc2a2dc6c7e6589589" - + "1633f866addb9de1ad32a8bc", - new BigInteger("09b5ec5170ed49cb61c7269e11962cd838a19e48a32f7e840a9a81fb65844bc6" - + "89ff731b0261667a9", 16), - "81b9abb2bc3d793b3548fe47f1fdf0746569ef70cf629f781b8178e441064768" - + "b3499b07ecd2e999"), - new EcdhTestVector( - "brainpoolP320r1", - "306a301406072a8648ce3d020106092b2403030208010109035200047fffffff" - + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - + "ffffffff04f2455cdb035b0cd4422a3ca06bb19bf018d1a5cb84eb12446d47f7" - + "f7a16c035c70951b4b6bad7b", - new BigInteger("1507aed61045ab6ad764a246d6da8101f8892ea31dac6a15b03710bc6bd173b3" - + "5f2524ec1d5c9b29", 16), - "31022375cb74d3e74059ddf3e7e33cc67ac5d7c5a7a8aed49a38a82a65cad317" - + "ec7f1a6c8fb5cee3"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b0362000400000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "00000000000000000000000144e54365091651eebe3aa1e13a14ec2c0dd1b1ad" - + "3778f69d586d078d7554c116a71e422add51cea477ce154ce873940e", - new BigInteger("5b11e1f9b1cec1f6dffcf961dda23c42740c31a60df2f5fcb6c56fa0940c32c4" - + "93e00fc53018c428ca78516fa9d18ea2", 16), - "35da13f0acd80a4c5420bed62513ff55215e5f53b41baff57d41bc775c2977c7" - + "6823e721ef3d6268709c1df3cb899ffc"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b0362000400000000" - + "ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000" - + "ffffffff00000000ffffffff3e528e604dc03d7c658e1f5c4102e1d31ddeffaf" - + "cc2f7d7a4816cec497a09a851f40ad616693013038c007697996de61", - new BigInteger("42be7daa39423c51c73cfe3d3f74485da290423c44d70fcfdcea765ba9db5975" - + "82d6f4c003ac2e70fdcc54540c014871", 16), - "6c07c6c0932629cd842deff18b99d2c3baa60af650110675c357933dbf970e4a" - + "19b65fa96ea68cc62717a57127b220b5"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b036200040000ffff" - + "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff" - + "0000ffff0000ffff00010000200680b002d9adf1e053dbf04addddf8c58de920" - + "543e0614c976446db34269d5e218c121704a0acf35d776d0a14e294d", - new BigInteger("3206eaa6678c793bd05fdaf264c205dc9112c156b4a22c916e15d54caa799139" - + "5ae1fcad42a4ffc6148f5647e7d8ae1d", 16), - "79e858897c3c49bb7ea3ff19497c891703bad13042e8197976e76c6a949664e8" - + "0a344938ee92d66b17a932cb693b9cb5"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b03620004007fff00" - + "01fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001ff" - + "fc0007fff0001fffc000800204f1799aada7abdde3280f9638becb240be60123" - + "c91ad14cf1f7d77e83330519a68a9dd61a8d639e12a41ab930bc278b", - new BigInteger("5159187d8d7d30bca467d15eee9459356ce5454525b646100c91e670940cfe5d" - + "b9ec8adcfe9c7dc18d747d399aed7e61", 16), - "7c6461f26148e8b1c3f9d0411bb3728c67ca0ec3170cdee8c116156fe9f922d7" - + "da720bef76ca621d97c0694e6ed1ca91"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b036200047ff00000" - + "001fffffffc00000007fffffff00000001fffffffc00000007fffffff0000000" - + "1fffffffc00000007fffffff2b8c710e160b3fdacffca46bc22b0b7b58349ab2" - + "a4183931fdf9e0504685db3c40aa853607fbac52b3563e7c74516d61", - new BigInteger("28e98b261c25e01cbc8ed503d24b19acb28274a37bbe87076bc04d53ad1cb547" - + "fac7ea7f48385784d4d4b160ae31744b", 16), - "7af220991043c102a7b71b165b8fccd68b2d99b8f5109310eb7c75211e430129" - + "c37750f70952e0a144c41aa54070b8c7"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b036200047fffff00" - + "000003fffffff00000003fffffff00000003fffffff00000003fffffff000000" - + "03fffffff00000003fffffff4214f53b46996183016065c615037a34f8bd3468" - + "48d13c870e6f74a26e3cee631d4d689244a615983f6f8b9a4880f508", - new BigInteger("343c98de14ee603fdb01380e62843261fd390a07166ec4698d8c052aec883c8d" - + "98e4c6b5a7c7c470c452fc26af4a0289", 16), - "6ace655ad8c564c0868456dfc828427876b2cd04361d9bd6a1c693c0350c73de" - + "3f66631bcfde10d63ac75af1625695fe"), - new EcdhTestVector( - "brainpoolP384r1", - "307a301406072a8648ce3d020106092b240303020801010b0362000480000000" - + "0000000000000000000000000000000000000000000000000000000000000000" - + "0000000000000000000000012134018a6f7bb075ef67617abafd66a22ed8b514" - + "6408aa52fc17cf52510b85f08b73acd0b4301e9967b3cc20b914f805", - new BigInteger("27b09c5e90ac5390fbfe19d8ab169f39d262744bea13eb96d5b5fa09fb98fd5f" - + "9c88bb66df9c56ae6799ca3e145ff1f9", 16), - "182ad635ac9df18b2dce39cc40464e0c3e8d3b613e951434d71162725ed98288" - + "d2f644d0503f9f0592e703c07c3c11d8"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d03818200040000" - + "0000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff0000" - + "0000ffffffff00000000ffffffff00000000ffffffff000000010000000003c8" - + "6f4fd8b138ac5509a4174bd4998e1b4d3d49de88d37e38dcaa74f9c42f3e37b7" - + "f7be77cf5322514a879984e44b4a3caed566ab6874b1a781292e7ef791a6", - new BigInteger("661d856de86bcadee194556ae6c2d0854592c26afa8cab8b38da2e25228a1b3b" - + "d92dc2a4a1570308d71012347f032f886506f51f72a2694ebec7f6deefe21b", 16), - "aa49072afd65cc057c4eb59d1fef0f268382a8190d663d50ab75563a1adef125" - + "f3ea80e6104827ada55cda2498ee5bf73661e294df3d6d1a5ad7ca203f715269"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d03818200040000" - + "ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000" - + "ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff3e35" - + "ce50921fe7b45a53452690ea8398109e90b0985738e775ee45c5266b1385dc19" - + "98956ae6e927a062f99d3729012c14f552dc17267fccdf634d0d3eb3acf1", - new BigInteger("0a8c80e54e9d5d0049139ad8cee6c4e93ac9091e168f18892ef7b10c1ee058b1" - + "3842808642a121bc8f0ac82f1106bda5e5b03864f66d822e7e8b566c7a0de830" - + "7", 16), - "4684370b1e63594c11958c6e8f12cac250be493e3548330c0d0e1d67aff233ff" - + "86a7c0b59c007e5147160e35c93dedf50a7b532dc7d793a43e29cf87f1c949fd"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d03818200043fff" - + "ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff" - + "00000003fffffff00000003fffffff00000003fffffff00000003fffffff2854" - + "149062fd692eecc2302747cc08be854c64c4f9abe86c467f161496b19a52bbb5" - + "a4da84392573d7e9632a040e9dd737bc9089aedf5b0c15488e9f1b083a7a", - new BigInteger("62b9a9cc1ea45ccc03baf7a36c0dedbe43ee68ebbf5574ebd3157697d9e0c440" - + "8756f7b5fd2e686398559d5313d913abc6a03a83e7e0a541cc9306c8c92ceb79", 16), - "029c4a19633d0f1b0a559e4563bf149ea8e790e72f7b5020e0ee85bcda3e4d91" - + "3c97cb47fa6d7374c0c718daf304c3413889c3eeb90f5b173484c61b4ca340b7"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d03818200044000" - + "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff" - + "0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc000800009a3" - + "7114d6a5c9ee64371c57bdd264e1764edda64f449cbd0ee1a72009890267fc1a" - + "e7d2ee5ddfbb5b1693bda1a0b5494c862e0ed1df03b702f2f2c206e4c52c", - new BigInteger("465db80e68274e8bfb43ee0a186400bf1657bfb2dd67c16e1ae57292583c6bfc" - + "bce065e5e872c67447f87da650756e54103973e074a7f1ec36e6a9ae24e95597", 16), - "7e89fe4c583b377808f37912cb78ccfce8a03cb7b530d4e2c04dacdf07a46e9c" - + "68387fde5914605b58a2731bc0f4dfed0313ae420cdf215a977d3cccbb1698b9"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d03818200047fff" - + "00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00" - + "000001fffffffc00000007fffffff00000001fffffffc00000007fffffff27cd" - + "77712e0db1978186e9d6feb6eaa034318fbfbab7fa3342a9e43eeea04c28ddde" - + "021916d5fcfe2d1b43743ca1ec2b5288cd553901825e4652cf4cf524bcb4", - new BigInteger("0a714bab96f0fff7bf41aab010484d0b11b92770478510290d13b77131a9bfa6" - + "6a4c1b58dac0a0954a48be1b286857ac06f094a4d857ee553b879d8719f38a52" - + "6", 16), - "3a6c0a915ff10844ea03676fba131655e81491fbabdc7c42c0b13caf38508053" - + "1a2537659233442e056f7a0b4f471afd5a3081d1d6ff2ec5e5acc381549f4d24"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d03818200047fff" - + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff026c" - + "17238034c8372217a8cd9a234ecb7debdec5659b7e3f0c6e70ba226824f56acc" - + "e025ae65da8b0aebc2efe2ef73dd826cea151b201b2f5b4f7623f2fbe332", - new BigInteger("68f88078866eebb34fd8f49b04a363963f8142dfca0caba8ac20b5d7764fc3cf" - + "d06fbc5480f4963610f74bd870677f607309cb56d911ebaf096dfc99f922e223", 16), - "93f2597bb5c7376f8ec55b052839a7c1f3d84e15e885b8f271e9ddbb7bf55595" - + "c05161c0a8c178f7271f11feb8d051fb3311543c7fbfefe33afe7b9bcb724f31"), - new EcdhTestVector( - "brainpoolP512r1", - "30819b301406072a8648ce3d020106092b240303020801010d0381820004aadd" - + "9db8dbe9c48b3fd4e6ae33c9fc07cb308db3b3c9d20ed6639cca703308717d4d" - + "9b009bc66842aecda12ae6a380e62881ff2f2d82c68528aa6056583a48f21278" - + "0ae4d2fad1163e2a513d72ad6e3c2211f8079ccbddeb9b1e956b2ee36173abe8" - + "4464b0c78dca8db21f6964e9a1398a5a0f6e1e717ddf4eac517032879266", - new BigInteger("47d6e935323a48595a3c74ef737e9b159330199cfd3908be87aac5bf176d9c66" - + "ff40e0b7a01ab0936bc30d8af26481d83212dd834d40937cab0a1299605cd96b", 16), - "9bb59b4c4b5e3d66dd2292996e5f2fee30ebf342bd2c4f491f6d8d31aed18bde" - + "7afe52d858c3f5b077eaf98063f5d76a7ee6091a0dc489448e1c144a765c578f"), - // CVE-2017-10176: Issue with elliptic curve addition - // The effect of this bug is that the Sun provider throws an IllegalStateException. - /* - new EcdhTestVector( - "secp521r1", - "30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b7" - + "0404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77" - + "efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd6601183929" - + "6a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee" - + "72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", - new BigInteger("1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" - + "ffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386" - + "3f7", 16), - "01bc33425e72a12779eacb2edcc5b63d1281f7e86dbc7bf99a7abd0cfe367de4" - + "666d6edbb8525bffe5222f0702c3096dec0884ce572f5a15c423fdf44d01dd99" - + "c61d"), - */ - }; - /** Test vectors */ public static class EcPublicKeyTestVector { final String comment; @@ -1874,21 +526,6 @@ public static final EcPublicKeyTestVector EC_VALID_PUBLIC_KEY = assertEquals(TestUtil.bytesToHex(kAB), TestUtil.bytesToHex(kBA)); } - @Test - public void testVectors() throws Exception { - KeyAgreement ka = KeyAgreement.getInstance("ECDH"); - for (EcdhTestVector t : ECDH_TEST_VECTORS) { - try { - ka.init(t.getPrivateKey()); - ka.doPhase(t.getPublicKey(), true); - byte[] shared = ka.generateSecret(); - assertEquals("Curve:" + t.curvename, TestUtil.bytesToHex(shared), t.shared); - } catch (NoSuchAlgorithmException | InvalidKeySpecException | InvalidKeyException ex) { - // Skipped, because the provider does not support the curve. - } - } - } - @NoPresubmitTest( providers = {ProviderType.BOUNCY_CASTLE}, bugs = {"BouncyCastle uses long encoding. Is this a bug?"} @@ -2170,9 +807,9 @@ public static final EcPublicKeyTestVector EC_VALID_PUBLIC_KEY = } /** - * Tests for CVE-2017-10176. + * Tests for the problem detected by CVE-2017-10176. * - *

Some libraries do not compute P + (-P) correctly and return 2*P or throw exceptions. When + *

Some libraries do not compute P + (-P) correctly and return 2 * P or throw exceptions. When * the library uses addition-subtraction chains for the point multiplication then such cases can * occur for example when the private key is close to the order of the curve. */ @@ -2210,17 +847,226 @@ public static final EcPublicKeyTestVector EC_VALID_PUBLIC_KEY = testLargePrivateKey(EcUtil.getNistP224Params()); testLargePrivateKey(EcUtil.getNistP256Params()); testLargePrivateKey(EcUtil.getNistP384Params()); - // TODO(bleichen): currently disabled for presubmit tests. - // testLargePrivateKey(EcUtil.getNistP521Params()); + // This test failed before CVE-2017-10176 was fixed. + testLargePrivateKey(EcUtil.getNistP521Params()); testLargePrivateKey(EcUtil.getBrainpoolP256r1Params()); } - @NoPresubmitTest( - providers = {ProviderType.OPENJDK}, - bugs = {"CVE-2017-10176"} - ) + /** + * This test tries to determine whether point multipliplication using two distinct + * points leads to distinguishable timings. + * + * The main goal here is to determine if the attack by Toru Akishita and Tsuyoshi Takagi + * in https://www-old.cdc.informatik.tu-darmstadt.de/reports/TR/TI-03-01.zvp.pdf + * might be applicable. I.e. one of the points contains a zero value when multiplied + * by mul, the other one does not. + * + * In its current form the test here is quite weak for a number of reasons: + * (1) The timing is often noisy, because the test is run as a unit test. + * (2) The test is executed with only a small number of input points. + * (3) The number of samples is rather low. Running this test with a larger sample + * size would detect more timing differences. Unfortunately + * (4) The test does not determine if a variable run time is exploitable. For example + * if the tested provider uses windowed exponentiation and the special point is + * in the precomputation table then timing differences are easy to spot, but more + * difficult to exploit and hence additional experiments would be necessary. + * + * @param spec the specification of the curve + * @param p0 This is a special point. I.e. multiplying this point by mul + * may lead to a zero value that may be observable. + * @param p1 a random point on the curve + * @param mul an integer, such that multiplying p0 with this value may lead to a timing + * difference + * @param privKeySize the size of the private key in bits + * @param comment describes the test case + */ + private void testTiming(ECParameterSpec spec, ECPoint p0, ECPoint p1, + BigInteger mul, int privKeySize, String comment) throws Exception { + ThreadMXBean bean = ManagementFactory.getThreadMXBean(); + if (!bean.isCurrentThreadCpuTimeSupported()) { + System.out.println("getCurrentThreadCpuTime is not supported. Skipping"); + return; + } + SecureRandom random = new SecureRandom(); + int fixedSize = mul.bitLength(); + int missingBits = privKeySize - 2 * fixedSize; + assertTrue(missingBits > 0); + // possible values for tests, minCount: + // 1024, 410 + // 2048, 880 + // 4096, 1845 + // 10000, 4682 + // I.e. these are values, such that doing 'tests' coin flips results in <= minCount heads or + // tails with a probability smaller than 2^-32. + // + // def min_count(n, b=33): + // res, sum, k = 1,1,0 + // bnd = 2**(n-b) + // while sum < bnd: + // res *= n - k + // res //= 1 + k + // k += 1 + // sum += res + // return k - 1 + final int tests = 2048; + final int minCount = 880; + // the number of measurements done with each point + final int repetitions = 8; + // the number of warmup experiments that are ignored + final int warmup = 8; + final int sampleSize = warmup + tests; + KeyFactory kf = KeyFactory.getInstance("EC"); + PublicKey[] publicKeys = new PublicKey[2]; + try { + publicKeys[0] = kf.generatePublic(new ECPublicKeySpec(p0, spec)); + publicKeys[1] = kf.generatePublic(new ECPublicKeySpec(p1, spec)); + } catch (InvalidKeySpecException ex) { + // unsupported curve + return; + } + PrivateKey[] privKeys = new PrivateKey[sampleSize]; + for (int i = 0; i < sampleSize; i++) { + BigInteger m = new BigInteger(missingBits, random); + m = mul.shiftLeft(missingBits).add(m); + m = m.shiftLeft(fixedSize).add(mul); + ECPrivateKeySpec privSpec = new ECPrivateKeySpec(m, spec); + privKeys[i] = kf.generatePrivate(privSpec); + } + KeyAgreement ka = KeyAgreement.getInstance("ECDH"); + long[][] timings = new long[2][sampleSize]; + for (int i = 0; i < sampleSize; i++) { + for (int j = 0; j < 2 * repetitions; j++) { + // idx determines which key to use. + int idx = (j ^ i) & 1; + ka.init(privKeys[i]); + long start = bean.getCurrentThreadCpuTime(); + ka.doPhase(publicKeys[idx], true); + byte[] unused = ka.generateSecret(); + long time = bean.getCurrentThreadCpuTime() - start; + timings[idx][i] += time; + } + } + for (int i = 0; i < sampleSize; i++) { + for (int j = 0; j < 2; j++) { + timings[j][i] /= repetitions; + } + } + + // Performs some statistics. + boolean noisy = false; // Set to true, if the timings have a large variance. + System.out.println("ECDH timing test:" + comment); + double[] avg = new double[2]; + double[] var = new double[2]; + for (int i = 0; i < 2; i++) { + double sum = 0.0; + double sumSqr = 0.0; + for (int j = warmup; j < sampleSize; j++) { + double val = (double) timings[i][j]; + sum += val; + sumSqr += val * val; + } + avg[i] = sum / tests; + var[i] = (sumSqr - avg[i] * sum) / (tests - 1); + double stdDev = Math.sqrt(var[i]); + double cv = stdDev / avg[i]; + System.out.println("Timing for point " + i + " avg: " + avg[i] + " std dev: " + stdDev + + " cv:" + cv); + // The ratio 0.05 below is a somewhat arbitrary value that tries to determine if the noise + // is too big to detect even larger timing differences. + if (cv > 0.05) { + noisy = true; + } + } + // Paired Z-test: + // The outcome of this value can be significantly influenced by extreme outliers, such + // as slow timings because of things like a garbage collection. + double sigmas = Math.abs(avg[0] - avg[1]) / Math.sqrt((var[0] + var[1]) / tests); + System.out.println("Sigmas: " + sigmas); + + // Pairwise comparison: + // this comparison has the property that it compares timings done with the same + // private key, hence timing differences from using different addition chain sizes + // are ignored. Extreme outliers should not influence the result a lot, as long as the + // number of outliers is small. + int point0Faster = 0; + int equal = 0; + for (int i = 0; i < sampleSize; i++) { + if (timings[0][i] < timings[1][i]) { + point0Faster += 1; + } else if (timings[0][i] < timings[1][i]) { + equal += 1; + } + } + point0Faster += equal / 2; + System.out.println("Point 0 multiplication is faster: " + point0Faster); + if (point0Faster < minCount || point0Faster > sampleSize - minCount) { + fail("Timing differences in ECDH computation detected"); + } else if (noisy) { + System.out.println("Timing was too noisy to expect results."); + } + } + + @SlowTest(providers = + {ProviderType.BOUNCY_CASTLE, ProviderType.SPONGY_CASTLE, ProviderType.OPENJDK}) @Test - public void testLargePrivateKeyNoPresubmit() throws Exception { - testLargePrivateKey(EcUtil.getNistP521Params()); + public void testTimingSecp256r1() throws Exception { + // edge case for projective coordinates + BigInteger x1 = + new BigInteger("81bfb55b010b1bdf08b8d9d8590087aa278e28febff3b05632eeff09011c5579", 16); + BigInteger y1 = + new BigInteger("732d0e65267ea28b7af8cfcb148936c2af8664cbb4f04e188148a1457400c2a7", 16); + ECPoint p1 = new ECPoint(x1, y1); + // random point + BigInteger x2 = + new BigInteger("8608e36a91f1fba12e4074972af446176b5608c9c58dc318bd0742754c3dcee7", 16); + BigInteger y2 = + new BigInteger("bc2c9ecd44af916ca58d9e3ef1257f698d350ef486eb86137fe69a7375bcc191", 16); + ECPoint p2 = new ECPoint(x2, y2); + testTiming(EcUtil.getNistP256Params(), p1, p2, new BigInteger("2"), 256, "secp256r1"); + } + + @SlowTest(providers = + {ProviderType.BOUNCY_CASTLE, ProviderType.SPONGY_CASTLE, ProviderType.OPENJDK}) + @Test + public void testTimingSecp384r1() throws Exception { + // edge case for projective coordinates + BigInteger x1 = + new BigInteger("7a6fadfee03eb09554f2a04fe08300aca88bb3a46e8f6347bace672cfe427698" + + "8541cef8dc10536a84580215f5f90a3b", 16); + BigInteger y1 = + new BigInteger("6d243d5d9de1cdddd04cbeabdc7a0f6c244391f7cb2d5738fe13c334add4b458" + + "5fef61ffd446db33b39402278713ae78", 16); + ECPoint p1 = new ECPoint(x1, y1); + // random point + BigInteger x2 = + new BigInteger("71f3c57d6a879889e582af2c7c5444b0eb6ba95d88365b21ca9549475273ecdd" + + "3930aa0bebbd1cf084e4049667278602", 16); + BigInteger y2 = + new BigInteger("9dcbc4d843af8944eb4ba018d369b351a9ea0f7b9e3561df2ee218d54e198f7c" + + "837a3abaa41dffd2d2cb771a7599ed9e", 16); + ECPoint p2 = new ECPoint(x2, y2); + testTiming(EcUtil.getNistP384Params(), p1, p2, new BigInteger("2"), 384, "secp384r1"); + } + + @SlowTest(providers = + {ProviderType.BOUNCY_CASTLE, ProviderType.SPONGY_CASTLE, ProviderType.OPENJDK}) + @Test + public void testTimingBrainpoolP256r1() throws Exception { + // edge case for Jacobian and projective coordinates + BigInteger x1 = + new BigInteger("79838c22d2b8dc9af2e6cf56f8826dc3dfe10fcb17b6aaaf551ee52bef12f826", 16); + BigInteger y1 = + new BigInteger("1e2ed3d453088c8552c6feecf898667bc1e15905002edec6b269feb7bea09d5b", 16); + ECPoint p1 = new ECPoint(x1, y1); + + // random point + BigInteger x2 = + new BigInteger("2720b2e821b2ac8209b573bca755a68821e1e09deb580666702570dd527dd4c1", 16); + BigInteger y2 = + new BigInteger("25cdd610243c7e693fad7bd69b43ae3e63e94317c4c6b717d9c8bc3be8c996fb", 16); + ECPoint p2 = new ECPoint(x2, y2); + testTiming(EcUtil.getBrainpoolP256r1Params(), p1, p2, new BigInteger("2"), 255, + "brainpoolP256r1"); } } + diff --git a/java/com/google/security/wycheproof/testcases/JsonEcdhTest.java b/java/com/google/security/wycheproof/testcases/JsonEcdhTest.java index 31e621e..5a8b877 100644 --- a/java/com/google/security/wycheproof/testcases/JsonEcdhTest.java +++ b/java/com/google/security/wycheproof/testcases/JsonEcdhTest.java @@ -54,12 +54,15 @@ public class JsonEcdhTest { * Example for test vector * { * "algorithm" : "ECDH", - * "generatorVersion" : "0.5", - * "numberOfTests" : 335, * "header" : [], + * "notes" : { + * "AddSubChain" : "The private key has a special value....", + * } + * "generatorVersion" : "0.7", + * "numberOfTests" : 308, * "testGroups" : [ * { - * "type" : "ECDHComp", + * "type" : "EcdhTest", * "tests" : [ * { * "comment" : "normal case", @@ -73,29 +76,15 @@ public class JsonEcdhTest { * ... **/ public void testEcdhComp(String filename) throws Exception { - // Testing with old test vectors may a reason for a test failure. - // Version number have the format major.minor[.subversion]. - // Versions before 1.0 are experimental and use formats that are expected to change. - // Versions after 1.0 change the major number if the format changes and change - // the minor number if only the test vectors (but not the format) changes. - // Subversions are release candidates for the next version. - // - // Changes: - // Version 0.4 test vectors had a duplicate field for the curve (in the test group - // and in the test itself). The duplicate has been removed for version 0.5, since all - // tests in a test group use the same curve. The field curve describes the curve of - // the private key. A test vector can contain a public key using a different curve, - // in which case the ECDH implementation is expected to throw an exception. - final String expectedVersion = "0.5"; JsonObject test = JsonUtil.getTestVectors(filename); - String generatorVersion = test.get("generatorVersion").getAsString(); - if (!generatorVersion.equals(expectedVersion)) { - System.out.println( - "ECDH: expecting test vectors with version " - + expectedVersion - + " found vectors with version " - + generatorVersion); - } + + // This test expects test vectors as defined in wycheproof/schemas/ecdh_test_schema.json. + // In particular, this means that the public keys use X509 encoding. + // Test vectors with different encodings of the keys have a different schema. + final String expectedSchema = "ecdh_test_schema.json"; + String schema = test.get("schema").getAsString(); + assertEquals("Unexpected schema in file:" + filename, expectedSchema, schema); + int numTests = test.get("numberOfTests").getAsInt(); int passedTests = 0; int rejectedTests = 0; // invalid test vectors leading to exceptions @@ -168,7 +157,53 @@ public class JsonEcdhTest { } @Test - public void testEcdh() throws Exception { - testEcdhComp("ecdh_test.json"); + public void testSecp224r1() throws Exception { + testEcdhComp("ecdh_secp224r1_test.json"); } + + @Test + public void testSecp256r1() throws Exception { + testEcdhComp("ecdh_secp256r1_test.json"); + } + + @Test + public void testSecp384r1() throws Exception { + testEcdhComp("ecdh_secp384r1_test.json"); + } + + @Test + public void testSecp521r1() throws Exception { + testEcdhComp("ecdh_secp521r1_test.json"); + } + + @Test + public void testSecp256k1() throws Exception { + testEcdhComp("ecdh_secp256k1_test.json"); + } + + @Test + public void testBrainpoolP224r1() throws Exception { + testEcdhComp("ecdh_brainpoolP224r1_test.json"); + } + + @Test + public void testBrainpoolP256r1() throws Exception { + testEcdhComp("ecdh_brainpoolP256r1_test.json"); + } + + @Test + public void testBrainpoolP320r1() throws Exception { + testEcdhComp("ecdh_brainpoolP320r1_test.json"); + } + + @Test + public void testBrainpoolP384r1() throws Exception { + testEcdhComp("ecdh_brainpoolP384r1_test.json"); + } + + @Test + public void testBrainpoolP512r1() throws Exception { + testEcdhComp("ecdh_brainpoolP512r1_test.json"); + } + } diff --git a/javascript/webcryptoapi/testcases/EcdhTest.js b/javascript/webcryptoapi/testcases/EcdhTest.js index 6d7ff30..3fddfc5 100644 --- a/javascript/webcryptoapi/testcases/EcdhTest.js +++ b/javascript/webcryptoapi/testcases/EcdhTest.js @@ -141,7 +141,12 @@ Ecdh.testKeyDerivation = function() { resolve(); }); }).catch(function(err) { - reject('Failed to import private key: ' + err); + // Allow skipping P-256K curve since this curve is not yet supported + // by most implementations. + if (tc.privKeyData['crv'] == 'P-256K') { + resolve(); + } + reject('Failed to import private key ' +tc.id + ":" + err); }); }); return promise;