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)); }
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); }