private static Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair GetDsaKeyPair(DSAParameters dp)
        {
            Org.BouncyCastle.Crypto.Parameters.DsaValidationParameters validationParameters = (dp.Seed != null)
                ? new Org.BouncyCastle.Crypto.Parameters.DsaValidationParameters(dp.Seed, dp.Counter)
                : null;

            Org.BouncyCastle.Crypto.Parameters.DsaParameters parameters =
                new Org.BouncyCastle.Crypto.Parameters.DsaParameters(
                    new Org.BouncyCastle.Math.BigInteger(1, dp.P),
                    new Org.BouncyCastle.Math.BigInteger(1, dp.Q),
                    new Org.BouncyCastle.Math.BigInteger(1, dp.G),
                    validationParameters);

            Org.BouncyCastle.Crypto.Parameters.DsaPublicKeyParameters pubKey =
                new Org.BouncyCastle.Crypto.Parameters.DsaPublicKeyParameters(
                    new Org.BouncyCastle.Math.BigInteger(1, dp.Y),
                    parameters);

            Org.BouncyCastle.Crypto.Parameters.DsaPrivateKeyParameters privKey =
                new Org.BouncyCastle.Crypto.Parameters.DsaPrivateKeyParameters(
                    new Org.BouncyCastle.Math.BigInteger(1, dp.X),
                    parameters);

            return(new Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair(pubKey, privKey));
        }
Example #2
0
        public static byte[] fromDSAPublicKey(DSAPublicKey key)
        {
            DNSOutput @out = new DNSOutput();

            Org.BouncyCastle.Crypto.Parameters.DsaPublicKeyParameters dp = key.PublicKey;


            // BigInteger q = key.getParams().getQ();
            Org.BouncyCastle.Math.BigInteger q = dp.Parameters.Q;
            // BigInteger p = key.getParams().getP();
            Org.BouncyCastle.Math.BigInteger p = dp.Parameters.P;
            // BigInteger g = key.getParams().getG();
            Org.BouncyCastle.Math.BigInteger g = dp.Parameters.G;
            // BigInteger y = key.getY();
            Org.BouncyCastle.Math.BigInteger y = dp.Y;


            int t = (p.ToByteArray().Length - 64) / 8;

            @out.writeU8(t);

            Helpers.writeBigInteger(@out, q);
            Helpers.writeBigInteger(@out, p);
            Helpers.writePaddedBigInteger(@out, g, 8 * t + 64);
            Helpers.writePaddedBigInteger(@out, y, 8 * t + 64);

            return(@out.toByteArray());
        }
Example #3
0
        private static PublicKey toDSAPublicKey(byte[] keyBytes) // throws IOException, GeneralSecurityException, MalformedKeyException
        {
            DNSInput @in = new DNSInput(keyBytes);

            int t = @in.readU8();

            if (t > 8)
            {
                throw new MalformedKeyException(keyBytes, ARSoft.Tools.Net.Dns.DnsSecAlgorithm.Dsa);
            }

            Org.BouncyCastle.Math.BigInteger q = Helpers.readBigInteger(@in, 20);
            Org.BouncyCastle.Math.BigInteger p = Helpers.readBigInteger(@in, 64 + t * 8);
            Org.BouncyCastle.Math.BigInteger g = Helpers.readBigInteger(@in, 64 + t * 8);
            Org.BouncyCastle.Math.BigInteger y = Helpers.readBigInteger(@in, 64 + t * 8);

            /*
             * KeyFactory factory = KeyFactory.getInstance("DSA");
             * return factory.generatePublic(new DSAPublicKeySpec(y, p, q, g));
             */

            Org.BouncyCastle.Crypto.Parameters.DsaParameters para = new Org.BouncyCastle.Crypto.Parameters.DsaParameters(p, q, g);

            Org.BouncyCastle.Crypto.Parameters.DsaPublicKeyParameters dp = new Org.BouncyCastle.Crypto.Parameters.DsaPublicKeyParameters(y, para);

            return(PublicKey.CreateInstance(dp));
        }
Example #4
0
 public DSAPublicKey(Org.BouncyCastle.Crypto.Parameters.DsaPublicKeyParameters publicKey)
 {
     m_publicKey = publicKey;
 }