From: Martin Bosslet Date: 2011-02-22T09:20:30+09:00 Subject: [ruby-core:35330] [Ruby 1.9-Feature#4424][Open] [ext/openssl] Allow public/private key creation from arbitrary data --mimepart_4d630149eb640_1dc2acf477a33486 Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Feature #4424: [ext/openssl] Allow public/private key creation from arbit= rary data http://redmine.ruby-lang.org/issues/show/4424 Author: Martin Bosslet Status: Open, Priority: Normal Category: ext, Target version: 1.9.3 There is a public funtion in PKey that allowed to read arbitrary private keys from a file regardless of the actual key type, but it was not exposed in Ruby, only in C. = In Ruby, the only way to instantiate public/private keys is by = calling initialize on the correct PKey subclass, implying that = you need to know what kind of key you're actually dealing with. = There are situations where the key type is not known in advance, = e.g. if a certificate SubjectPublicKeyInfo shall be turned into = a public key. In that case you only know that you're dealing with a public key, but not necessarily with what kind of key. In = situations like these it would come in handy to have methods that create a PKey instance regardless of the underlying data. The attached patch provides this by adding two module functions to = PKey, read_public and read_private. They allow reading generic = public/private keys from a String or a File, optionally providing a password in the case of encrypted PEM encodings. RDoc has also been supplemented. Please note that the included tests partly rely on the patches = proposed in http://redmine.ruby-lang.org/issues/show/4421, http://redmine.ruby-lang.org/issues/show/4422 and http://redmine.ruby-lang.org/issues/show/4423 If those were applied, the combination with this patch would = provide consistent behavior among all three public key systems supported in Ruby. Regards, Martin ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4d630149eb640_1dc2acf477a33486 Content-Type: application/x-gzip; name=pkey_from_data.tar.gz Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=pkey_from_data.tar.gz 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 --mimepart_4d630149eb640_1dc2acf477a33486--