Example #1
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));
        }
        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 #3
0
        GenerateDsaKeyPair(Org.BouncyCastle.Security.SecureRandom random, int keystrength)
        {
            Org.BouncyCastle.Crypto.IAsymmetricCipherKeyPairGenerator keypairGen = new Org.BouncyCastle.Crypto.Generators.DsaKeyPairGenerator();

            Org.BouncyCastle.Crypto.Generators.DsaParametersGenerator pGen = new Org.BouncyCastle.Crypto.Generators.DsaParametersGenerator();
            pGen.Init(keystrength, 80, random); //TODO:
            Org.BouncyCastle.Crypto.Parameters.DsaParameters parameters            = pGen.GenerateParameters();
            Org.BouncyCastle.Crypto.Parameters.DsaKeyGenerationParameters genParam = new Org.BouncyCastle.Crypto.Parameters.DsaKeyGenerationParameters(random, parameters);
            keypairGen.Init(genParam);

            Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair kp = keypairGen.GenerateKeyPair();
            return(kp);
        }