aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Rokos <m.rokos@sh.cvut.cz>2002-02-06 13:35:51 +0000
committerMichal Rokos <m.rokos@sh.cvut.cz>2002-02-06 13:35:51 +0000
commit2e5c51bb92e24bf8c97cc2210bcd610ae7bfd2b0 (patch)
treefdb060d5654ffbf4b2417c89ee81d79504fe9509
parente781373eab3282c392e3f5dbd990a59378843bc6 (diff)
downloadruby-openssl-history-2e5c51bb92e24bf8c97cc2210bcd610ae7bfd2b0.tar.gz
* Dropped Random class
* Added Random module * Added egd interface to Random module
-rw-r--r--ChangeLog5
-rw-r--r--README170
-rw-r--r--lib/openssl.rb5
-rw-r--r--ossl.c4
-rw-r--r--ossl.h2
-rw-r--r--ossl_bn.c8
-rw-r--r--ossl_rand.c34
7 files changed, 134 insertions, 94 deletions
diff --git a/ChangeLog b/ChangeLog
index 861aece..3041ca4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)
diff --git a/README b/README
index 0e76e87..e7dacbf 100644
--- a/README
+++ b/README
@@ -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
diff --git a/ossl.c b/ossl.c
index c2385b2..114c6c5 100644
--- a/ossl.c
+++ b/ossl.c
@@ -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);
diff --git a/ossl.h b/ossl.h
index 10140ff..56cff06 100644
--- a/ossl.h
+++ b/ossl.h
@@ -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;
diff --git a/ossl_bn.c b/ossl_bn.c
index 8391b69..91c857c 100644
--- a/ossl_bn.c
+++ b/ossl_bn.c
@@ -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);
}