+# p, q, eを標準入力から入力し、RSAのprivate_keyを作成する
+prime1 = BN.new(gets.chomp)
+prime2 = BN.new(gets.chomp)
+pubExp = BN.new(gets.chomp)
+mod = BN.new((prime1.to_i * prime2.to_i).to_s)
+privExp = pubExp.mod_inverse(BN.new(
+ (prime2.to_i - 1)).to_s
+exp1 = privExp.to_i % (prime1.to_i-1)
+exp2 = privExp.to_i % (prime2.to_i-1)
+co = prime2.mod_inverse(prime1)
+private_key = ASN1::Sequence.new [
+ ASN1::Integer.new(mod.to_i),
+ ASN1::Integer.new(pubExp.to_i),
+ ASN1::Integer.new(privExp.to_i),
+ ASN1::Integer.new(prime1.to_i),
+ ASN1::Integer.new(prime2.to_i),
+ ASN1::Integer.new(exp1.to_i),
+ ASN1::Integer.new(exp2.to_i),
+ ASN1::Integer.new(co.to_i)
+puts "-----BEGIN RSA PRIVATE KEY-----"
+print Base64.encode64(private_key.to_der)
+puts "-----END RSA PRIVATE KEY-----"