diff options
author | Michal Rokos <m.rokos@sh.cvut.cz> | 2002-02-06 13:35:51 +0000 |
---|---|---|
committer | Michal Rokos <m.rokos@sh.cvut.cz> | 2002-02-06 13:35:51 +0000 |
commit | 2e5c51bb92e24bf8c97cc2210bcd610ae7bfd2b0 (patch) | |
tree | fdb060d5654ffbf4b2417c89ee81d79504fe9509 | |
parent | e781373eab3282c392e3f5dbd990a59378843bc6 (diff) | |
download | ruby-openssl-history-2e5c51bb92e24bf8c97cc2210bcd610ae7bfd2b0.tar.gz |
* Dropped Random class
* Added Random module
* Added egd interface to Random module
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | README | 170 | ||||
-rw-r--r-- | lib/openssl.rb | 5 | ||||
-rw-r--r-- | ossl.c | 4 | ||||
-rw-r--r-- | ossl.h | 2 | ||||
-rw-r--r-- | ossl_bn.c | 8 | ||||
-rw-r--r-- | ossl_rand.c | 34 |
7 files changed, 134 insertions, 94 deletions
@@ -4,6 +4,11 @@ Copyright (C) 2001 Michal Rokos <m.rokos@sh.cvut.cz> All rights reserved. $Log$ +Revision 1.28 2002/02/06 13:36:15 majkl + * Dropped Random class + * Added Random module + * Added egd interface to Random module + Revision 1.27 2002/01/16 14:49:52 majkl * really fixed strptime.c (silly me, thanks Hynek) @@ -74,7 +74,7 @@ Hynek Rostinsky <Hynek.Rostinsky@foresta.cz> - Windows platform fixes (strptime Sorry, not done. See 'test' folder's examples and grep C sources for rb_define_*method :-)) -------------------------------------------------- --> XXX - XXX is return value +=> XXX - XXX is return value A <=> B - A is an alias to B [XXX] - argument XXX is optional A|B - argument can be A or B @@ -83,19 +83,35 @@ cXXX - XXX is defined as constant fXXX - XXX is Fixnum hXXX - XXX is Hash nXXX - XXX is Number (Fixnum or Bignum) -oXXX - argument.kind_of?(XXX) -> true +oXXX - argument.kind_of?(XXX) => true sXXX - XXX is String tXXX - XXX is instance of Time -------------------------------------------------- Integer - .to_bn() -> BN.new + .to_bn() => BN.new OpenSSL:: - .seed(sSeed) -> sSeed - .load_random_file(sFilename) -> bResult - .write_random_file(sFilename) -> bResult + .seed(sSeed) => sSeed + .load_random_file(sFilename) => bResult + .write_random_file(sFilename) => bResult BN - Doc TODO! + ::new(...) + --- PRIVATE ---------------------- + .initialize(arg, type="dec") + .from_integer(arg, type="dec") + .from_string(arg, type="dec") + .from_bn(arg, dummy=nil) + .from_s_bin(sBIN) + .from_s_mpi(sMPI) + .from_s_dec(sDEC) + .from_s_hex(sHEX) + --- PUBLIC ----------------------- + .to_s(type="dec") => sDEC + .to_s_bin => sBIN + .to_s_mpi => sMPI + .to_s_dec => sDEC + .to_s_hex => sHEX BNError @@ -111,13 +127,13 @@ OpenSSL:: RC2 (ECB, CBC, BIT40:CBC, BIT64:CBC, CFB, OFB) RC4 (nil, UNSPEC, BIT40) RC5 (ECB, CFB, OFB, CBC) - .new([cMode|cType] [,cType|cMode]) + ::new([cMode|cType] [,cType|cMode]) ---------------------------------- - .encrypt(sPassword [, sInitVector]) -> self - .decrypt(sPassword [, sInitVector]) -> self - .update(sData) -> s(En|De)crypted + .encrypt(sPassword [, sInitVector]) => self + .decrypt(sPassword [, sInitVector]) => self + .update(sData) => s(En|De)crypted .<< <=> .update - .cipher() -> s(En|De)cryptedFinal + .cipher() => s(En|De)cryptedFinal CipherError @@ -125,8 +141,8 @@ OpenSSL:: .new(sFilename) - dispatches .load .load(sFilename) ---------------------------------- - .get_value(sSection|nil, sKey) -> sValue - .get_section(sSection) -> hSection + .get_value(sSection|nil, sKey) => sValue + .get_section(sSection) => hSection ConfigError @@ -142,22 +158,22 @@ OpenSSL:: DSS1 .new([sData]) ---------------------------------- - .update(sData) -> self + .update(sData) => self .<< <=> .update - .digest() -> sDigestFinal - .hexdigest() -> sHEXDigestFinal + .digest() => sDigestFinal + .hexdigest() => sHEXDigestFinal .inspect <=> .hexdigest .to_str <=> .hexdigest DigestError HMAC - .new(sKey, oDigest::ANY) -> self + .new(sKey, oDigest::ANY) => self ---------------------------------- - .update(sData) -> self + .update(sData) => self .<< <=> .update - .hmac() -> sHMACFinal - .hexhmac() -> sHEXHMACFinal + .hmac() => sHMACFinal + .hexhmac() => sHEXHMACFinal .inspect <=> .hexhmac .to_str <=> .hexhmac @@ -167,14 +183,14 @@ OpenSSL:: SPKI .new([sPEM]) ---------------------------------- - .to_pem() -> sPEM - .to_str() -> sHumanReadable - .public_key() -> oPKey::ANY - .public_key=(oPKey::ANY) -> oPKey::ANY - .sign(oPKey::ANY, oDigest::ANY) -> self - .verify(oPKey::ANY) -> bResult - .challenge() -> sChallenge - .challenge=(sChallenge) -> sChallenge + .to_pem() => sPEM + .to_str() => sHumanReadable + .public_key() => oPKey::ANY + .public_key=(oPKey::ANY) => oPKey::ANY + .sign(oPKey::ANY, oDigest::ANY) => self + .verify(oPKey::ANY) => bResult + .challenge() => sChallenge + .challenge=(sChallenge) => sChallenge SPKIError @@ -185,23 +201,23 @@ OpenSSL:: PKCS7 .new(cType|sPEM) ---------------------------------- - .cipher=(oCipher::ANY) -> oCipher::ANY - .add_signer(oPKCS7::Signer, oPKey::ANY) -> self - .signers() -> Array of PKCS7::Signer - .add_recipient(oX509::Certificate) -> self - .add_certificate(oX509::Certificate) -> self - .add_crl(oX509::CRL) -> self - .add_data(sData [, bDetached]) -> self - .verify_data(oX509::Store [, sDetachedData]) -> bResult, yields PKCS7::Signer - .decode_data(oPKey::ANY, oX509::Certificate) -> sData - .to_pem() -> sPEM + .cipher=(oCipher::ANY) => oCipher::ANY + .add_signer(oPKCS7::Signer, oPKey::ANY) => self + .signers() => Array of PKCS7::Signer + .add_recipient(oX509::Certificate) => self + .add_certificate(oX509::Certificate) => self + .add_crl(oX509::CRL) => self + .add_data(sData [, bDetached]) => self + .verify_data(oX509::Store [, sDetachedData]) => bResult, yields PKCS7::Signer + .decode_data(oPKey::ANY, oX509::Certificate) => sData + .to_pem() => sPEM Signer .new(oX509::Certificate, oPKey::ANY, oDigest::ANY) ---------------------------------- - .name() -> X509::Name - .serial() -> fSerial - .signed_time() -> tTime + .name() => X509::Name + .serial() => fSerial + .signed_time() => tTime PKCS7Error @@ -214,17 +230,17 @@ OpenSSL:: .generate(fKeyLen) - yields |p,n| .new_from_fixnum <=> generate ---------------------------------- - .public?() -> bResult - .private?() -> bResult - .to_str() -> sHumanReadable - .export([oCipher::ANY [, sPassword]]) -> sPEM + .public?() => bResult + .private?() => bResult + .to_str() => sHumanReadable + .export([oCipher::ANY [, sPassword]]) => sPEM .to_pem <=> .export - .public_key() -> oPKey::ANY - .to_der() -> sDER - .sign(oDigest::ANY, sData) -> sSig - .sign_digest(sDigest) -> sSig - .verify(oDigest::ANY, sData, sSig) -> bResult - .verify_digest(sDigest, sSig) -> bResult + .public_key() => oPKey::ANY + .to_der() => sDER + .sign(oDigest::ANY, sData) => sSig + .sign_digest(sDigest) => sSig + .verify(oDigest::ANY, sData, sSig) => bResult + .verify_digest(sDigest, sSig) => bResult DSAError @@ -234,29 +250,29 @@ OpenSSL:: .generate(fKeyLen) - yields |p,n| .new_from_fixnum <=> generate ---------------------------------- - .public?() -> bResult - .private?() -> bResult - .to_str() -> sHumanReadable - .export([oCipher::ANY [, sPassword]]) -> sPEM + .public?() => bResult + .private?() => bResult + .to_str() => sHumanReadable + .export([oCipher::ANY [, sPassword]]) => sPEM .to_pem <=> .export - .public_key() -> oPKey::ANY - .public_encrypt(sData) -> sEnc - .public_decrypt(sEnrypted) -> sData - .private_encrypt(sData) -> sEnc - .private_decrypt(sEncrypted) -> sData - .to_der() -> sDER - .sign(oDigest::ANY, sData) -> sSig - .verify(oDigest::ANY, sData, sSig) -> bResult + .public_key() => oPKey::ANY + .public_encrypt(sData) => sEnc + .public_decrypt(sEnrypted) => sData + .private_encrypt(sData) => sEnc + .private_decrypt(sEncrypted) => sData + .to_der() => sDER + .sign(oDigest::ANY, sData) => sSig + .verify(oDigest::ANY, sData, sSig) => bResult RSAError Random .new is default ---------------------------------- - .seed(sSeed) -> sSeed - .load_random_file(sFilename) -> bResult - .write_random_file(sFilename) -> bResult - .random_bytes(fLen) -> sRandom + .seed(sSeed) => sSeed + .load_random_file(sFilename) => bResult + .write_random_file(sFilename) => bResult + .random_bytes(fLen) => sRandom RandomError @@ -285,29 +301,29 @@ OpenSSL:: Extension - Doc TODO! .new is DISABLED! ---------------------------------- - .to_str -> string as "oid = critical, value" - .to_a -> ary as ["oid", "value", critical], critical as bool - .to_h -> hash as {"oid"=>"oid", "value"=>"val", "critical"=>bool} + .to_str => string as "oid = critical, value" + .to_a => ary as ["oid", "value", critical], critical as bool + .to_h => hash as {"oid"=>"oid", "value"=>"val", "critical"=>bool} ExtensionFactory - Doc TODO! .new(...) ---------------------------------- .create_extension(*arg) .create_ext_from_string(str) - .create_ext_from_ary(ary) -> X509::Extension, ary as ["oid", "value", critical], critical as bool + .create_ext_from_ary(ary) => X509::Extension, ary as ["oid", "value", critical], critical as bool .create_ext_from_hash(hash) ExtensionError Name - Doc TODO! .new(arg) dispatches "new_from_#{arg.type.name.downcase}" - .new_from_string(str) -> self, str as "/A=B/C=D/E=F" - .new_from_array(ary) -> self, ary as [["A","B"],["C","D"],["E","F"]] - .new_from_hash(hash) -> self, hash as {"A"=>"B","C"=>"D","E"=>"F"} + .new_from_string(str) => self, str as "/A=B/C=D/E=F" + .new_from_array(ary) => self, ary as [["A","B"],["C","D"],["E","F"]] + .new_from_hash(hash) => self, hash as {"A"=>"B","C"=>"D","E"=>"F"} ---------------------------------- - .to_str -> str as "/A=B/C=D/E=F" - .to_a -> ary as [["A","B"],["C","D"],["E","F"]] - .to_h -> hash as {"A"=>"B","C"=>"D","E"=>"F"} + .to_str => str as "/A=B/C=D/E=F" + .to_a => ary as [["A","B"],["C","D"],["E","F"]] + .to_h => hash as {"A"=>"B","C"=>"D","E"=>"F"} NameError diff --git a/lib/openssl.rb b/lib/openssl.rb index ea6975a..f67ed2d 100644 --- a/lib/openssl.rb +++ b/lib/openssl.rb @@ -266,8 +266,7 @@ end # defined? RSA return if arg.nil? t = arg.class while t - t.name.downcase =~ /(\S*::)*(\S+)/ - method = "from_#{$2}".intern + method = "from_#{t.name.downcase.split("::").last}".intern return send(method, arg, type) if respond_to?(method, true) t = t.superclass end @@ -283,7 +282,7 @@ end # defined? RSA end def from_string(arg, type="dec") - send("from_#{type.downcase}", arg) + send("from_s_#{type.downcase}", arg) end private :from_bn, :from_integer, :from_string @@ -84,6 +84,7 @@ VALUE mPKey; VALUE mNetscape; VALUE mSSL; VALUE mPKCS7; +VALUE mRandom; /* * OSSL library init @@ -112,6 +113,7 @@ Init_openssl() mCipher = rb_define_module_under(mOSSL, "Cipher"); mSSL = rb_define_module_under(mOSSL, "SSL"); mPKCS7 = rb_define_module_under(mOSSL, "PKCS7"); + mRandom = rb_define_module_under(mOSSL, "Random"); /* * Constants @@ -134,7 +136,7 @@ Init_openssl() Init_ossl_x509attr(mX509); Init_ossl_spki(mNetscape); Init_ossl_cipher(mCipher); - Init_ossl_rand(mOSSL); + Init_ossl_rand(mRandom); Init_ossl_pkey(mPKey); Init_ssl(mSSL); Init_pkcs7(mPKCS7); @@ -51,6 +51,7 @@ extern VALUE mNetscape; extern VALUE mCipher; extern VALUE mSSL; extern VALUE mPKCS7; +extern VALUE mRandom; /* * Classes @@ -74,7 +75,6 @@ extern VALUE cX509Store; extern VALUE eX509StoreError; extern VALUE cSPKI; extern VALUE eSPKIError; -extern VALUE cRandom; extern VALUE eRandomError; extern VALUE cSSLSocket; extern VALUE eSSLError; @@ -678,10 +678,10 @@ Init_bn(VALUE module) rb_define_singleton_method(cBN, "new", ossl_bn_s_new, -1); - rb_define_private_method(cBN, "from_bin", ossl_bn_from_bin, 1); - rb_define_private_method(cBN, "from_mpi", ossl_bn_from_mpi, 1); - rb_define_private_method(cBN, "from_dec", ossl_bn_from_dec, 1); - rb_define_private_method(cBN, "from_hex", ossl_bn_from_hex, 1); + rb_define_private_method(cBN, "from_s_bin", ossl_bn_from_bin, 1); + rb_define_private_method(cBN, "from_s_mpi", ossl_bn_from_mpi, 1); + rb_define_private_method(cBN, "from_s_dec", ossl_bn_from_dec, 1); + rb_define_private_method(cBN, "from_s_hex", ossl_bn_from_hex, 1); rb_define_method(cBN, "to_s_bin", ossl_bn_to_bin, 0); rb_define_method(cBN, "to_s_mpi", ossl_bn_to_mpi, 0); diff --git a/ossl_rand.c b/ossl_rand.c index 60b9af4..3e6da45 100644 --- a/ossl_rand.c +++ b/ossl_rand.c @@ -81,6 +81,28 @@ ossl_rand_bytes(VALUE self, VALUE len) return str; } +static VALUE +ossl_rand_egd(VALUE self, VALUE filename) +{ + Check_SafeStr(filename); + if(!RAND_egd(RSTRING(filename)->ptr)) + rb_raise(eRandomError, "%s", ossl_error()); + + return Qtrue; +} + +static VALUE +ossl_rand_egd_bytes(VALUE self, VALUE filename, VALUE len) +{ + Check_SafeStr(filename); + Check_Type(len, T_FIXNUM); + + if (!RAND_egd_bytes(RSTRING(filename)->ptr, FIX2INT(len))) + rb_raise(eRandomError, "%s", ossl_error()); + + return Qtrue; +} + /* * INIT */ @@ -90,14 +112,10 @@ Init_ossl_rand(VALUE module) rb_define_method(module, "seed", ossl_rand_seed, 1); rb_define_method(module, "load_random_file", ossl_rand_load_file, 1); rb_define_method(module, "write_random_file", ossl_rand_write_file, 1); - - eRandomError = rb_define_class_under(module, "RandomError", rb_eStandardError); - - cRandom = rb_define_class_under(module, "Random", rb_cObject); + rb_define_method(module, "random_bytes", ossl_rand_bytes, 1); + rb_define_method(module, "egd", ossl_rand_egd, 1); + rb_define_method(module, "egd_bytes", ossl_rand_egd_bytes, 2); - rb_define_method(cRandom, "seed", ossl_rand_seed, 1); - rb_define_method(cRandom, "load_random_file", ossl_rand_load_file, 1); - rb_define_method(cRandom, "write_random_file", ossl_rand_write_file, 1); - rb_define_method(cRandom, "random_bytes", ossl_rand_bytes, 1); + eRandomError = rb_define_class_under(module, "RandomError", rb_eStandardError); } |