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

📄 dsatest.java

📁 bouncycastle 是一个JAVA安全提供者
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
                sgr.initSign(sKey, k);                byte[] message = new byte[] { (byte)'a', (byte)'b', (byte)'c' };                sgr.update(message);                byte[]  sigBytes = sgr.sign();                sgr.initVerify(vKey);                sgr.update(message);                if (!sgr.verify(sigBytes))                {                    return new SimpleTestResult(false, this.getName() + ": 239 Bit EC verification failed");                }                BigInteger[]  sig = derDecode(sigBytes);                if (!r.equals(sig[0]))                {                    return new SimpleTestResult(false, getName()                        + ": r component wrong." + System.getProperty("line.separator")                        + " expecting: " + r + System.getProperty("line.separator")                        + " got      : " + sig[0]);                }                if (!s.equals(sig[1]))                {                    return new SimpleTestResult(false, getName()                        + ": s component wrong." + System.getProperty("line.separator")                        + " expecting: " + s + System.getProperty("line.separator")                        + " got      : " + sig[1]);                }            }            catch (Exception e)            {                return new SimpleTestResult(false, this.getName() + ": exception - " + e.toString());            }            return new SimpleTestResult(true, this.getName() + ": Okay");        }    }    private class GenerationTest        implements Test    {        public String getName()        {            return "EC/ECDSA Generation";        }        public TestResult perform()        {            try            {                Signature           s = Signature.getInstance("DSA", "BC");                KeyPairGenerator    g = KeyPairGenerator.getInstance("DSA", "BC");                byte[]              data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };                g.initialize(512, new SecureRandom());                KeyPair p = g.generateKeyPair();                PrivateKey  sKey = p.getPrivate();                PublicKey   vKey = p.getPublic();                s.initSign(sKey);                s.update(data);                byte[]  sigBytes = s.sign();                s = Signature.getInstance("DSA", "BC");                s.initVerify(vKey);                s.update(data);                if (!s.verify(sigBytes))                {                    return new SimpleTestResult(false, this.getName() + ": DSA verification failed");                }                //                // ECDSA generation test                //                s = Signature.getInstance("ECDSA", "BC");                g = KeyPairGenerator.getInstance("ECDSA", "BC");                ECCurve curve = new ECCurve.Fp(                    new BigInteger("883423532389192164791648750360308885314476597252960362792450860609699839"), // q                    new BigInteger("7fffffffffffffffffffffff7fffffffffff8000000000007ffffffffffc", 16), // a                    new BigInteger("6b016c3bdcf18941d0d654921475ca71a9db2fb27d1d37796185c2942c0a", 16)); // b                ECParameterSpec ecSpec = new ECParameterSpec(                    curve,                    curve.decodePoint(Hex.decode("020ffa963cdca8816ccc33b8642bedf905c3d358573d3f27fbbd3b3cb9aaaf")), // G                    new BigInteger("883423532389192164791648750360308884807550341691627752275345424702807307")); // n                g.initialize(ecSpec, new SecureRandom());                p = g.generateKeyPair();                sKey = p.getPrivate();                vKey = p.getPublic();                s.initSign(sKey);                s.update(data);                sigBytes = s.sign();                s = Signature.getInstance("ECDSA", "BC");                s.initVerify(vKey);                s.update(data);                if (!s.verify(sigBytes))                {                    return new SimpleTestResult(false, this.getName() + ": ECDSA verification failed");                }            }            catch (Exception e)            {                return new SimpleTestResult(false, this.getName() + ": exception - " + e.toString());            }            return new SimpleTestResult(true, this.getName() + ": Okay");        }    }    private class ParametersTest        implements Test    {        public String getName()        {            return "DSA Parameters";        }        public TestResult perform()        {            try            {                AlgorithmParameterGenerator a = AlgorithmParameterGenerator.getInstance("DSA", "BC");                a.init(512, random);                AlgorithmParameters params = a.generateParameters();                byte[] encodeParams = params.getEncoded();                AlgorithmParameters a2 = AlgorithmParameters.getInstance("DSA", "BC");                a2.init(encodeParams);                // a and a2 should be equivalent!                byte[] encodeParams_2 = a2.getEncoded();                if (!arrayEquals(encodeParams, encodeParams_2))                {                    return new SimpleTestResult(false, this.getName() + ": encode/decode parameters failed");                }                DSAParameterSpec dsaP = (DSAParameterSpec)params.getParameterSpec(DSAParameterSpec.class);                KeyPairGenerator    g = KeyPairGenerator.getInstance("DSA", "BC");                g.initialize(dsaP, new SecureRandom());                KeyPair p = g.generateKeyPair();                PrivateKey  sKey = p.getPrivate();                PublicKey   vKey = p.getPublic();                Signature           s = Signature.getInstance("DSA", "BC");                byte[]              data = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };                s.initSign(sKey);                s.update(data);                byte[]  sigBytes = s.sign();                s = Signature.getInstance("DSA", "BC");                s.initVerify(vKey);                s.update(data);                if (!s.verify(sigBytes))                {                    return new SimpleTestResult(false, this.getName() + ": DSA verification failed");                }            }            catch (Exception e)            {                return new SimpleTestResult(false, this.getName() + ": exception - " + e.toString());            }            return new SimpleTestResult(true, this.getName() + ": Okay");        }    }    Test tests[] =    {        new CompatTest(),        new ECDSA239bitPrime(),        new GenerationTest(),        new ParametersTest()    };    protected BigInteger[] derDecode(        byte[]  encoding)        throws IOException    {        ByteArrayInputStream    bIn = new ByteArrayInputStream(encoding);        ASN1InputStream         aIn = new ASN1InputStream(bIn);        ASN1Sequence            s = (ASN1Sequence)aIn.readObject();        BigInteger[]            sig = new BigInteger[2];        sig[0] = ((DERInteger)s.getObjectAt(0)).getValue();        sig[1] = ((DERInteger)s.getObjectAt(1)).getValue();        return sig;    }    public String getName()    {        return "DSA/ECDSA";    }    public TestResult perform()    {        for (int i = 0; i != tests.length; i++)        {            TestResult  result = tests[i].perform();            if (!result.isSuccessful())            {                return result;            }        }        return new SimpleTestResult(true, "DSA/ECDSA: Okay");    }    private boolean arrayEquals(        byte[]  a,        byte[]  b)    {        if (a.length != b.length)        {            return false;        }        for (int i = 0; i != a.length; i++)        {            if (a[i] != b[i])            {                return false;            }        }        return true;    }    public static void main(        String[]    args)    {        Security.addProvider(new BouncyCastleProvider());        Test            test = new DSATest();        TestResult      result = test.perform();        System.out.println(result.toString());    }}

⌨️ 快捷键说明

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