14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.asymmetric.rsa; 24c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.math.BigInteger; 44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.InvalidAlgorithmParameterException; 54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.KeyPair; 64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.SecureRandom; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.spec.AlgorithmParameterSpec; 84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.spec.RSAKeyGenParameterSpec; 94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.AsymmetricCipherKeyPair; 114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.generators.RSAKeyPairGenerator; 124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.params.RSAKeyGenerationParameters; 134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.params.RSAKeyParameters; 144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; 154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic class KeyPairGeneratorSpi 174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends java.security.KeyPairGenerator 184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{ 194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public KeyPairGeneratorSpi( 204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom String algorithmName) 214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom super(algorithmName); 234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom final static BigInteger defaultPublicExponent = BigInteger.valueOf(0x10001); 264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom final static int defaultTests = 12; 274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom RSAKeyGenerationParameters param; 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom RSAKeyPairGenerator engine; 304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public KeyPairGeneratorSpi() 324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom super("RSA"); 344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom engine = new RSAKeyPairGenerator(); 364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom param = new RSAKeyGenerationParameters(defaultPublicExponent, 374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom new SecureRandom(), 2048, defaultTests); 384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom engine.init(param); 394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void initialize( 424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom int strength, 434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom SecureRandom random) 444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom param = new RSAKeyGenerationParameters(defaultPublicExponent, 464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom random, strength, defaultTests); 474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom engine.init(param); 494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public void initialize( 524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom AlgorithmParameterSpec params, 534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom SecureRandom random) 544c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws InvalidAlgorithmParameterException 554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (!(params instanceof RSAKeyGenParameterSpec)) 574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throw new InvalidAlgorithmParameterException("parameter object not a RSAKeyGenParameterSpec"); 594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom RSAKeyGenParameterSpec rsaParams = (RSAKeyGenParameterSpec)params; 614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom param = new RSAKeyGenerationParameters( 634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom rsaParams.getPublicExponent(), 644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom random, rsaParams.getKeysize(), defaultTests); 654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom engine.init(param); 674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public KeyPair generateKeyPair() 704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom AsymmetricCipherKeyPair pair = engine.generateKeyPair(); 724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom RSAKeyParameters pub = (RSAKeyParameters)pair.getPublic(); 734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom RSAPrivateCrtKeyParameters priv = (RSAPrivateCrtKeyParameters)pair.getPrivate(); 744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return new KeyPair(new BCRSAPublicKey(pub), 764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom new BCRSAPrivateCrtKey(priv)); 774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom} 79