⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dhtest.java

📁 kmlnjlkj nlkjlkjkljl okopokipoipo oipipipo i
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        //        KeyPair aKeyPair = keyGen.generateKeyPair();        KeyAgreement aKeyAgree = KeyAgreement.getInstance("DH", "BC");        checkKeySize(privateValueSize, aKeyPair);        aKeyAgree.init(aKeyPair.getPrivate());        //        // b side        //        KeyPair bKeyPair = keyGen.generateKeyPair();        KeyAgreement bKeyAgree = KeyAgreement.getInstance("DH", "BC");        checkKeySize(privateValueSize, bKeyPair);        bKeyAgree.init(bKeyPair.getPrivate());        //        // agreement        //        aKeyAgree.doPhase(bKeyPair.getPublic(), true);        bKeyAgree.doPhase(aKeyPair.getPublic(), true);        SecretKey k1 = aKeyAgree.generateSecret(PKCSObjectIdentifiers.id_alg_CMS3DESwrap.getId());        SecretKey k2 = aKeyAgree.generateSecret(PKCSObjectIdentifiers.id_alg_CMS3DESwrap.getId());    }    private void checkKeySize(int privateValueSize, KeyPair aKeyPair)    {        if (privateValueSize != 0)        {            DHPrivateKey key = (DHPrivateKey)aKeyPair.getPrivate();            if (key.getX().bitLength() != privateValueSize)            {                fail("limited key check failed for key size " + privateValueSize);            }        }    }    private void testRandom(        int         size)        throws Exception    {        AlgorithmParameterGenerator a = AlgorithmParameterGenerator.getInstance("DH", "BC");        a.init(size, new SecureRandom());        AlgorithmParameters params = a.generateParameters();        byte[] encodeParams = params.getEncoded();        AlgorithmParameters a2 = AlgorithmParameters.getInstance("DH", "BC");        a2.init(encodeParams);        // a and a2 should be equivalent!        byte[] encodeParams_2 = a2.getEncoded();        if (!areEqual(encodeParams, encodeParams_2))        {            fail("encode/decode parameters failed");        }        DHParameterSpec dhP = (DHParameterSpec)params.getParameterSpec(DHParameterSpec.class);        testGP("DH", size, 0, dhP.getG(), dhP.getP());    }    private void testECDH(String algorithm)        throws Exception    {        KeyPairGenerator    g = KeyPairGenerator.getInstance(algorithm, "BC");        EllipticCurve curve = new EllipticCurve(                new ECFieldFp(new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839")), // q                new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), // a                new BigInteger("6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a", 16)); // b        ECParameterSpec ecSpec = new ECParameterSpec(                curve,                ECPointUtil.decodePoint(curve, Hex.decode("020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf")), // G                new BigInteger("883423532389192164791648750360308884807550341691627752275345424702807307"), // n                1); // h        g.initialize(ecSpec, new SecureRandom());        //        // a side        //        KeyPair aKeyPair = g.generateKeyPair();        KeyAgreement aKeyAgree = KeyAgreement.getInstance(algorithm, "BC");        aKeyAgree.init(aKeyPair.getPrivate());        //        // b side        //        KeyPair bKeyPair = g.generateKeyPair();        KeyAgreement bKeyAgree = KeyAgreement.getInstance(algorithm, "BC");        bKeyAgree.init(bKeyPair.getPrivate());        //        // agreement        //        aKeyAgree.doPhase(bKeyPair.getPublic(), true);        bKeyAgree.doPhase(aKeyPair.getPublic(), true);        BigInteger  k1 = new BigInteger(aKeyAgree.generateSecret());        BigInteger  k2 = new BigInteger(bKeyAgree.generateSecret());        if (!k1.equals(k2))        {            fail(algorithm + " 2-way test failed");        }        //        // public key encoding test        //        byte[]              pubEnc = aKeyPair.getPublic().getEncoded();        KeyFactory          keyFac = KeyFactory.getInstance(algorithm, "BC");        X509EncodedKeySpec  pubX509 = new X509EncodedKeySpec(pubEnc);        ECPublicKey         pubKey = (ECPublicKey)keyFac.generatePublic(pubX509);        if (!pubKey.getW().equals(((ECPublicKey)aKeyPair.getPublic()).getW()))        {            System.out.println(" expected " + pubKey.getW().getAffineX() + " got " + ((ECPublicKey)aKeyPair.getPublic()).getW().getAffineX());            System.out.println(" expected " + pubKey.getW().getAffineY() + " got " + ((ECPublicKey)aKeyPair.getPublic()).getW().getAffineY());            fail(algorithm + " public key encoding (W test) failed");        }        if (!pubKey.getParams().getGenerator().equals(((ECPublicKey)aKeyPair.getPublic()).getParams().getGenerator()))        {            fail(algorithm + " public key encoding (G test) failed");        }        //        // private key encoding test        //        byte[]              privEnc = aKeyPair.getPrivate().getEncoded();        PKCS8EncodedKeySpec privPKCS8 = new PKCS8EncodedKeySpec(privEnc);        ECPrivateKey        privKey = (ECPrivateKey)keyFac.generatePrivate(privPKCS8);        if (!privKey.getS().equals(((ECPrivateKey)aKeyPair.getPrivate()).getS()))        {            fail(algorithm + " private key encoding (S test) failed");        }        if (!privKey.getParams().getGenerator().equals(((ECPrivateKey)aKeyPair.getPrivate()).getParams().getGenerator()))        {            fail(algorithm + " private key encoding (G test) failed");        }    }    private void testExceptions()    {        try        {            KeyAgreement aKeyAgree = KeyAgreement.getInstance("DH", "BC");            aKeyAgree.generateSecret("DES");        }        catch (IllegalStateException e)        {            // okay        }        catch (Exception e)        {            fail("Unexpected exception: " + e, e);        }    }    private void testDESAndDESede(BigInteger g, BigInteger p)        throws Exception    {        DHParameterSpec             dhParams = new DHParameterSpec(p, g, 256);        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH", "BC");        keyGen.initialize(dhParams);        KeyPair kp = keyGen.generateKeyPair();        KeyAgreement keyAgreement = KeyAgreement.getInstance("DH", "BC");        keyAgreement.init(kp.getPrivate());        keyAgreement.doPhase(kp.getPublic(), true);        SecretKey key = keyAgreement.generateSecret("DES");        if (key.getEncoded().length != 8)        {            fail("DES length wrong");        }        if (!DESKeySpec.isParityAdjusted(key.getEncoded(), 0))        {            fail("DES parity wrong");        }        key = keyAgreement.generateSecret("DESEDE");        if (key.getEncoded().length != 24)        {            fail("DESEDE length wrong");        }        if (!DESedeKeySpec.isParityAdjusted(key.getEncoded(), 0))        {            fail("DESEDE parity wrong");        }        key = keyAgreement.generateSecret("Blowfish");        if (key.getEncoded().length != 56)        {            fail("Blowfish length wrong");        }    }    private void testInitialise()        throws Exception    {        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH", "BC");        keyGen.initialize(512);        keyGen.generateKeyPair();        testTwoParty("DH", 512, 0, keyGen);    }    public void performTest()        throws Exception    {        testGP("DH", 512, 0, g512, p512);        testGP("DiffieHellman", 768, 0, g768, p768);        testGP("DIFFIEHELLMAN", 1024, 0, g1024, p1024);        testGP("DH", 512, 64, g512, p512);        testGP("DiffieHellman", 768, 128, g768, p768);        testGP("DIFFIEHELLMAN", 1024, 256, g1024, p1024);        testExplicitWrapping(512, 0, g512, p512);        testRandom(256);        testECDH("ECDH");        testECDH("ECDHC");        testExceptions();        testDESAndDESede(g768, p768);        testInitialise();    }    public static void main(        String[]    args)    {        Security.addProvider(new BouncyCastleProvider());        runTest(new DHTest());    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -