aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Rokos <m.rokos@sh.cvut.cz>2002-01-06 16:09:45 +0000
committerMichal Rokos <m.rokos@sh.cvut.cz>2002-01-06 16:09:45 +0000
commit2253db99c8dc924ecf5dd103740a033d54426330 (patch)
tree7fad037117681f344c0b31bd167d7aa840e881a2
parent9951f389c1a4df41cbd1a68f5fb04378948f369a (diff)
downloadruby-openssl-history-2253db99c8dc924ecf5dd103740a033d54426330.tar.gz
* BN is (somewhat) full imp. now
* Config reworked (get_value, get_section)
-rw-r--r--ChangeLog4
-rw-r--r--README8
-rw-r--r--lib/openssl.rb6
-rw-r--r--ossl.c31
-rw-r--r--ossl.h7
-rw-r--r--ossl_bn.c101
-rw-r--r--ossl_config.c160
-rw-r--r--strncasecmp.c22
-rw-r--r--strptime.c364
-rwxr-xr-xtest/ossl_config.rb18
-rw-r--r--test/spki.rb2
11 files changed, 215 insertions, 508 deletions
diff --git a/ChangeLog b/ChangeLog
index d0a63e0..8ae3593 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,10 @@ Copyright (C) 2001 Michal Rokos <m.rokos@sh.cvut.cz>
All rights reserved.
$Log$
+Revision 1.18 2002/01/06 16:10:37 majkl
+ * BN is (somewhat) full imp. now
+ * Config reworked (get_value, get_section)
+
Revision 1.17 2002/01/04 11:27:45 majkl
* API doc in README (but still not completed)
* missing str(ncasecmp|strptime).c files moved to missing/
diff --git a/README b/README
index 5fcc1e7..91390ae 100644
--- a/README
+++ b/README
@@ -73,6 +73,7 @@ A|B - argument can be A or B
bXXX - XXX is true or false
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
sXXX - XXX is String
@@ -112,9 +113,10 @@ OpenSSL::
CipherError
Config
- .new(sFilename)
- .get_string(sSection|nil, sKey) => sValue
- .get_number(sSection|nil, sKey) => nValue
+ .new(sFilename) - dispatches .load
+ .load(sFilename)
+ .get_value(sSection|nil, sKey) => sValue
+ .get_section(sSection) => hSection
ConfigError
diff --git a/lib/openssl.rb b/lib/openssl.rb
index 7318bf5..eab3742 100644
--- a/lib/openssl.rb
+++ b/lib/openssl.rb
@@ -244,6 +244,12 @@ module OpenSSL
self.to_str.to_i
end
end # BN
+
+ class Config
+ def Config.new(filename)
+ Config.load(filename)
+ end
+ end #Config
end # OpenSSL
class Integer
diff --git a/ossl.c b/ossl.c
index 2b6adbc..16cd9f5 100644
--- a/ossl.c
+++ b/ossl.c
@@ -8,7 +8,6 @@
* This program is licenced under the same licence as Ruby.
* (See the file 'LICENCE'.)
*/
-/*#include <openssl/err.h>*/
#include "ossl.h"
/*
@@ -22,15 +21,27 @@
/*
* Check Types
*/
-void ossl_check_type(VALUE obj, VALUE klass)
+void
+ossl_check_kind(VALUE obj, VALUE klass)
{
- if (rb_obj_is_kind_of(obj, klass) == Qfalse) {
- rb_raise(rb_eTypeError, "wrong argument (%s)! (Expected %s)",
- rb_class2name(CLASS_OF(obj)), rb_class2name(klass));
- }
+ if (rb_obj_is_kind_of(obj, klass) == Qfalse)
+ rb_raise(rb_eTypeError, "wrong argument (%s)! (Expected kind of %s)",
+ rb_class2name(CLASS_OF(obj)), rb_class2name(klass));
+}
+
+void
+ossl_check_instance(VALUE obj, VALUE klass)
+{
+ if (rb_obj_is_instance_of(obj, klass) == Qfalse)
+ rb_raise(rb_eTypeError, "wrong argument (%s)! (Expected instance of %s)",
+ rb_class2name(CLASS_OF(obj)), rb_class2name(klass));
}
-VALUE asn1time_to_time(ASN1_UTCTIME *time)
+/*
+ * DATE conversion
+ */
+VALUE
+asn1time_to_time(ASN1_UTCTIME *time)
{
struct tm tm;
@@ -115,7 +126,11 @@ Init_openssl()
}
#if defined(OSSL_DEBUG)
-int main(int argc, char *argv[], char *env[])
+/*
+ * Check if all symbols are OK with 'make LDSHARED=gcc all'
+ */
+int
+main(int argc, char *argv[], char *env[])
{
return 0;
}
diff --git a/ossl.h b/ossl.h
index 83586f4..bedbda0 100644
--- a/ossl.h
+++ b/ossl.h
@@ -111,8 +111,11 @@ extern VALUE eBNError;
/*
* CheckTypes
*/
-#define OSSL_Check_Type(obj, klass) ossl_check_type(obj, klass)
-void ossl_check_type(VALUE, VALUE);
+#define OSSL_Check_Kind(obj, klass) ossl_check_kind(obj, klass)
+void ossl_check_kind(VALUE, VALUE);
+#define OSSL_Check_Instance(obj, klass) ossl_check_instance(obj, klass)
+void ossl_check_instance(VALUE, VALUE);
+#define OSSL_Check_Type OSSL_Check_Kind /* COMPAT */
/*
* DATE conversion
diff --git a/ossl_bn.c b/ossl_bn.c
index d29e470..bf1c250 100644
--- a/ossl_bn.c
+++ b/ossl_bn.c
@@ -499,6 +499,41 @@ ossl_bn_s_rand_range(VALUE klass, VALUE range)
return ossl_bn_new_nodup(result);
}
+static VALUE
+ossl_bn_s_generate_prime(int argc, VALUE *argv, VALUE klass)
+{
+ ossl_bn *bn1p, *bn2p;
+ BIGNUM *result = NULL, *add = NULL, *rem = NULL;
+ int safe = 1;
+ VALUE vnum, vsafe, vadd, vrem;
+
+ rb_scan_args(argc, argv, "13", &vnum, &vsafe, &vadd, &vrem);
+
+ if (vsafe == Qfalse)
+ safe = 0;
+
+ if (!NIL_P(vadd)) {
+ if (NIL_P(vrem))
+ rb_raise(rb_eArgError, "if add specified, rem must be also given");
+
+ OSSL_Check_Type(vadd, cBN);
+ OSSL_Check_Type(vrem, cBN);
+
+ GetBN(vadd, bn1p);
+ add = bn1p->bignum;
+ GetBN(vrem, bn2p);
+ rem = bn2p->bignum;
+ }
+
+ if (!(result = BN_new()))
+ OSSL_Raise(eBNError, "");
+
+ if (!BN_generate_prime(result, NUM2INT(vnum), safe, add, rem, NULL, NULL))
+ OSSL_Raise(eBNError, "");
+
+ return ossl_bn_new_nodup(result);
+}
+
#define BIGNUM_RETURN_INT(func) \
static VALUE \
ossl_bn_##func(VALUE self) \
@@ -547,6 +582,68 @@ ossl_bn_eql(VALUE self, VALUE other)
return Qfalse;
}
+static VALUE
+ossl_bn_is_prime(int argc, VALUE *argv, VALUE self)
+{
+ ossl_bn *bnp = NULL;
+ BN_CTX ctx;
+ VALUE vchecks;
+ int checks = BN_prime_checks;
+
+ rb_scan_args(argc, argv, "01", &vchecks);
+
+ GetBN(self, bnp);
+
+ if (!NIL_P(vchecks))
+ checks = NUM2INT(vchecks);
+
+ BN_CTX_init(&ctx);
+ switch (BN_is_prime(bnp->bignum, checks, NULL, &ctx, NULL)) {
+ case 1:
+ return Qtrue;
+ case 0:
+ return Qfalse;
+ default:
+ OSSL_Raise(eBNError, "");
+ }
+
+ /* not reachable */
+ return Qnil;
+}
+
+static VALUE
+ossl_bn_is_prime_fasttest(int argc, VALUE *argv, VALUE self)
+{
+ ossl_bn *bnp = NULL;
+ BN_CTX ctx;
+ VALUE vchecks, vtrivdiv;
+ int checks = BN_prime_checks, do_trial_division = 1;
+
+ rb_scan_args(argc, argv, "02", &vchecks, &vtrivdiv);
+
+ GetBN(self, bnp);
+
+ if (!NIL_P(vchecks))
+ checks = NUM2INT(vchecks);
+
+ /* handle true/false */
+ if (vtrivdiv == Qfalse)
+ do_trial_division = 0;
+
+ BN_CTX_init(&ctx);
+ switch (BN_is_prime_fasttest(bnp->bignum, checks, NULL, &ctx, NULL, do_trial_division)) {
+ case 1:
+ return Qtrue;
+ case 0:
+ return Qfalse;
+ default:
+ OSSL_Raise(eBNError, "");
+ }
+
+ /* not reachable */
+ return Qnil;
+}
+
/*
* INIT
*/
@@ -599,6 +696,7 @@ Init_bn(VALUE module)
rb_define_singleton_method(cBN, "rand", ossl_bn_s_rand, 3);
rb_define_singleton_method(cBN, "pseudo_rand", ossl_bn_s_pseudo_rand, 3);
rb_define_singleton_method(cBN, "rand_range", ossl_bn_s_rand_range, 1);
+ rb_define_singleton_method(cBN, "generate_prime", ossl_bn_s_generate_prime, -1);
rb_define_method(cBN, "num_bytes", ossl_bn_num_bytes, 0);
rb_define_method(cBN, "num_bits", ossl_bn_num_bits, 0);
@@ -612,5 +710,8 @@ Init_bn(VALUE module)
rb_define_method(cBN, "eql?", ossl_bn_eql, 1);
rb_define_alias(cBN, "==", "eql?");
rb_define_alias(cBN, "===", "eql?");
+
+ rb_define_method(cBN, "prime?", ossl_bn_is_prime, -1);
+ rb_define_method(cBN, "prime_fasttest?", ossl_bn_is_prime_fasttest, -1);
}
diff --git a/ossl_config.c b/ossl_config.c
index 4379cd0..df7d0c5 100644
--- a/ossl_config.c
+++ b/ossl_config.c
@@ -10,100 +10,78 @@
*/
#include "ossl.h"
-#define MakeConfig(obj, configp) {\
- obj = Data_Make_Struct(cConfig, ossl_config, 0, ossl_config_free, configp);\
+#define MakeConfig(obj, confp) {\
+ obj = Data_Make_Struct(cConfig, ossl_config, 0, ossl_config_free, confp);\
+}
+
+#define GetConfig_unsafe(obj, confp) Data_Get_Struct(obj, ossl_config, confp)
+#define GetConfig(obj, confp) {\
+ GetConfig_unsafe(obj, confp);\
+ if (!confp->config) rb_raise(eConfigError, "not initialized!");\
}
-#define GetConfig(obj, configp) Data_Get_Struct(obj, ossl_config, configp)
/*
* Classes
*/
VALUE cConfig;
VALUE eConfigError;
-/*VALUE cConfigSection;*/
/*
- * Structs
+ * Struct
*/
typedef struct ossl_config_st {
LHASH *config;
} ossl_config;
-/*
- * It's not ready!
- *
-typedef struct ossl_configsect_st {
- int ossl_type;
- STACK_OF(CONF_VALUE) *section;
-} ossl_configsect;
- */
-
-
static void
-ossl_config_free(ossl_config *configp)
+ossl_config_free(ossl_config *confp)
{
- if (configp) {
- if (configp->config) CONF_free(configp->config);
- configp->config = NULL;
- free(configp);
+ if (confp) {
+ if (confp->config) CONF_free(confp->config);
+ confp->config = NULL;
+ free(confp);
}
}
-/*
- * It's not ready!
- *
-static void ossl_config_section_free(ossl_configsect *sectp)
-{
- if (configp) {
- if (configp->section) sk_CONF_VALUE_pop_free(configp->...);
- free(sectp);
-}
+/*
+ * Public
*/
+/*
+ * Private
+ */
static VALUE
-ossl_config_s_new(int argc, VALUE *argv, VALUE klass)
-{
- ossl_config *configp = NULL;
- VALUE obj;
-
- MakeConfig(obj, configp);
- rb_obj_call_init(obj, argc, argv);
-
- return obj;
-}
-
-static VALUE
-ossl_config_initialize(int argc, VALUE* argv, VALUE self)
+ossl_config_s_load(int argc, VALUE* argv, VALUE klass)
{
- ossl_config *configp = NULL;
+ ossl_config *confp = NULL;
+ LHASH *config = NULL;
long err_line = 0;
- VALUE path;
+ VALUE obj, path;
- GetConfig(self, configp);
rb_scan_args(argc, argv, "10", &path);
Check_SafeStr(path);
- configp->config = CONF_load(configp->config, RSTRING(path)->ptr, &err_line);
-
- if (configp->config == NULL) {
+ if (!(config = CONF_load(NULL, RSTRING(path)->ptr, &err_line))) {
if (err_line <= 0)
rb_raise(eConfigError, "wrong config file %s", RSTRING(path)->ptr);
else
rb_raise(eConfigError, "error on line %ld in config file %s", err_line, RSTRING(path)->ptr);
}
- return self;
+ MakeConfig(obj, confp);
+ confp->config = config;
+
+ return obj;
}
static VALUE
-ossl_config_get_string(VALUE self, VALUE section, VALUE item)
+ossl_config_get_value(VALUE self, VALUE section, VALUE item)
{
- ossl_config *configp = NULL;
- char *sect = NULL;
- char *string = NULL;
+ ossl_config *confp = NULL;
+ char *sect = NULL, *str = NULL;
- GetConfig(self, configp);
+ GetConfig(self, confp);
if (!NIL_P(section)) {
Check_SafeStr(section);
@@ -111,55 +89,45 @@ ossl_config_get_string(VALUE self, VALUE section, VALUE item)
}
Check_SafeStr(item);
- string = CONF_get_string(configp->config, sect, RSTRING(item)->ptr);
+ if (!(str = CONF_get_string(confp->config, sect, RSTRING(item)->ptr)))
+ OSSL_Raise(eConfigError, "");
- return rb_str_new2(string);
+ return rb_str_new2(str);
}
-static VALUE
-ossl_config_get_number(VALUE self, VALUE section, VALUE item)
-{
- ossl_config *configp = NULL;
- char *sect = NULL;
- long number;
-
- GetConfig(self, configp);
-
- if (!NIL_P(section)) {
- Check_SafeStr(section);
- sect = RSTRING(section)->ptr;
- }
- Check_SafeStr(item);
-
- number = CONF_get_number(configp->config, sect, RSTRING(item)->ptr);
- return INT2NUM(number);
-}
+/* long number = CONF_get_number(confp->config, sect, RSTRING(item)->ptr); */
-/*
- * TO BE REWORKED
- *
static VALUE
ossl_config_get_section(VALUE self, VALUE section)
{
- ossl_config *configp = NULL;
- VALUE obj;
- ossl_configsect_st *ps;
+ ossl_config *confp = NULL;
+ STACK_OF(CONF_VALUE) *sk = NULL;
+ CONF_VALUE *entry = NULL;
+ int i, entries = 0;
+ VALUE hash;
+ GetConfig(self, confp);
+
Check_SafeStr(section);
-
- GetConfig(self, p);
- obj = Data_Make_Struct(cOSSLConfigSection, ossl_configsect_st, 0, ossl_config_section_free, ps);
- memset(ps, 0, sizeof(ossl_configsect_st));
+ if (!(sk = CONF_get_section(confp->config, RSTRING(section)->ptr)))
+ OSSL_Raise(eConfigError, "");
- ps->section = CONF_get_section(p->config, RSTRING(section)->ptr);
+ hash = rb_hash_new();
+
+ if ((entries = sk_CONF_VALUE_num(sk)) < 0) {
+ rb_warning("# of items in section is < 0?!?");
+ return hash;
+ }
- if (ps->section == NULL)
- return Qnil;
- else
- return obj;
+ for (i=0; i<entries; i++) {
+ entry = sk_CONF_VALUE_value(sk, i);
+
+ rb_hash_aset(hash, rb_str_new2(entry->name), rb_str_new2(entry->value));
+ }
+
+ return hash;
}
- */
/*
* INIT
@@ -171,17 +139,9 @@ Init_ossl_config(VALUE module)
cConfig = rb_define_class_under(module, "Config", rb_cObject);
- rb_define_singleton_method(cConfig, "new", ossl_config_s_new, -1);
+ rb_define_singleton_method(cConfig, "load", ossl_config_s_load, -1);
- rb_define_method(cConfig, "initialize", ossl_config_initialize, -1);
- rb_define_method(cConfig, "get_string", ossl_config_get_string, 2);
- rb_define_method(cConfig, "get_number", ossl_config_get_number, 2);
-/*
- * TODO:
- * rework
+ rb_define_method(cConfig, "get_value", ossl_config_get_value, 2);
rb_define_method(cConfig, "get_section", ossl_config_get_section, 1);
- cConfigSection = rb_define_class_under(mOSSL, "ConfigSection", rb_cObject);
- rb_undef_method(CLASS_OF(cConfigSection), "new");
- */
}
diff --git a/strncasecmp.c b/strncasecmp.c
deleted file mode 100644
index 654b088..0000000
--- a/strncasecmp.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef HAVE_STRNCASECMP
-
-#include <ctype.h>
-
-int
-strncasecmp(p1, p2, len)
- char *p1;
- char *p2;
- int len;
-{
- for (; len != 0; len--, p1++, p2++) {
- if (toupper(*p1) != toupper(*p2)) {
- return toupper(*p1) - toupper(*p2);
- }
- if (*p1 == '\0') {
- return 0;
- }
- }
- return 0;
-}
-
-#endif
diff --git a/strptime.c b/strptime.c
deleted file mode 100644
index 7159416..0000000
--- a/strptime.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
- * Copyright (c) 1994 Powerdog Industries. All rights reserved.
- *
- * Redistribution and use in source and binary forms, without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * 3. All advertising materials mentioning features or use of this
- * software must display the following acknowledgement:
- * This product includes software developed by Powerdog Industries.
- * 4. The name of Powerdog Industries may not be used to endorse or
- * promote products derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY POWERDOG INDUSTRIES ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE POWERDOG INDUSTRIES BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#ifndef HAVE_STRPTIME
-
-#include <stdio.h>
-#include <stdlib.h>
-/* #include <unistd.h> */
-#include <time.h>
-#include <ctype.h>
-#include <string.h>
-
-/*
-#if !defined(WIN32)
-# include "common/config.h"
-#endif
-*/
-
-
-#define asizeof(a) (sizeof (a) / sizeof ((a)[0]))
-
-#ifndef sun
-struct dtconv {
- char *abbrev_month_names[12];
- char *month_names[12];
- char *abbrev_weekday_names[7];
- char *weekday_names[7];
- char *time_format;
- char *sdate_format;
- char *dtime_format;
- char *am_string;
- char *pm_string;
- char *ldate_format;
-};
-#endif
-
-static struct dtconv En_US = {
- { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" },
- { "January", "February", "March", "April",
- "May", "June", "July", "August",
- "September", "October", "November", "December" },
- { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" },
- { "Sunday", "Monday", "Tuesday", "Wednesday",
- "Thursday", "Friday", "Saturday" },
- "%H:%M:%S",
- "%m/%d/%y",
- "%a %b %e %T %Z %Y",
- "AM",
- "PM",
- "%A, %B, %e, %Y"
-};
-
-#ifdef SUNOS4
-extern int strncasecmp();
-#endif
-
-char *
-strptime(char *buf, char *fmt, struct tm *tm)
-{
- char c,
- *ptr;
- int i,
- len;
-
- ptr = fmt;
- while (*ptr != 0) {
- if (*buf == 0)
- break;
-
- c = *ptr++;
-
- if (c != '%') {
- if (isspace(c))
- while (*buf != 0 && isspace(*buf))
- buf++;
- else if (c != *buf++)
- return 0;
- continue;
- }
-
- c = *ptr++;
- switch (c) {
- case 0:
- case '%':
- if (*buf++ != '%')
- return 0;
- break;
-
- case 'C':
- buf = strptime(buf, En_US.ldate_format, tm);
- if (buf == 0)
- return 0;
- break;
-
- case 'c':
- buf = strptime(buf, "%x %X", tm);
- if (buf == 0)
- return 0;
- break;
-
- case 'D':
- buf = strptime(buf, "%m/%d/%y", tm);
- if (buf == 0)
- return 0;
- break;
-
- case 'R':
- buf = strptime(buf, "%H:%M", tm);
- if (buf == 0)
- return 0;
- break;
-
- case 'r':
- buf = strptime(buf, "%I:%M:%S %p", tm);
- if (buf == 0)
- return 0;
- break;
-
- case 'T':
- buf = strptime(buf, "%H:%M:%S", tm);
- if (buf == 0)
- return 0;
- break;
-
- case 'X':
- buf = strptime(buf, En_US.time_format, tm);
- if (buf == 0)
- return 0;
- break;
-
- case 'x':
- buf = strptime(buf, En_US.sdate_format, tm);
- if (buf == 0)
- return 0;
- break;
-
- case 'j':
- if (!isdigit(*buf))
- return 0;
-
- for (i = 0; *buf != 0 && isdigit(*buf); buf++) {
- i *= 10;
- i += *buf - '0';
- }
- if (i > 365)
- return 0;
-
- tm->tm_yday = i;
- break;
-
- case 'M':
- case 'S':
- if (*buf == 0 || isspace(*buf))
- break;
-
- if (!isdigit(*buf))
- return 0;
-
- for (i = 0; *buf != 0 && isdigit(*buf); buf++) {
- i *= 10;
- i += *buf - '0';
- }
- if (i > 59)
- return 0;
-
- if (c == 'M')
- tm->tm_min = i;
- else
- tm->tm_sec = i;
-
- if (*buf != 0 && isspace(*buf))
- while (*ptr != 0 && !isspace(*ptr))
- ptr++;
- break;
-
- case 'H':
- case 'I':
- case 'k':
- case 'l':
- if (!isdigit(*buf))
- return 0;
-
- for (i = 0; *buf != 0 && isdigit(*buf); buf++) {
- i *= 10;
- i += *buf - '0';
- }
- if (c == 'H' || c == 'k') {
- if (i > 23)
- return 0;
- } else if (i > 11)
- return 0;
-
- tm->tm_hour = i;
-
- if (*buf != 0 && isspace(*buf))
- while (*ptr != 0 && !isspace(*ptr))
- ptr++;
- break;
-
- case 'p':
- len = strlen(En_US.am_string);
- if (strncasecmp(buf, En_US.am_string, len) == 0) {
- if (tm->tm_hour > 12)
- return 0;
- if (tm->tm_hour == 12)
- tm->tm_hour = 0;
- buf += len;
- break;
- }
-
- len = strlen(En_US.pm_string);
- if (strncasecmp(buf, En_US.pm_string, len) == 0) {
- if (tm->tm_hour > 12)
- return 0;
- if (tm->tm_hour != 12)
- tm->tm_hour += 12;
- buf += len;
- break;
- }
-
- return 0;
-
- case 'A':
- case 'a':
- for (i = 0; i < asizeof(En_US.weekday_names); i++) {
- len = strlen(En_US.weekday_names[i]);
- if (strncasecmp(buf,
- En_US.weekday_names[i],
- len) == 0)
- break;
-
- len = strlen(En_US.abbrev_weekday_names[i]);
- if (strncasecmp(buf,
- En_US.abbrev_weekday_names[i],
- len) == 0)
- break;
- }
- if (i == asizeof(En_US.weekday_names))
- return 0;
-
- tm->tm_wday = i;
- buf += len;
- break;
-
- case 'd':
- case 'e':
- if (!isdigit(*buf))
- return 0;
-
- for (i = 0; *buf != 0 && isdigit(*buf); buf++) {
- i *= 10;
- i += *buf - '0';
- }
- if (i > 31)
- return 0;
-
- tm->tm_mday = i;
-
- if (*buf != 0 && isspace(*buf))
- while (*ptr != 0 && !isspace(*ptr))
- ptr++;
- break;
-
- case 'B':
- case 'b':
- case 'h':
- for (i = 0; i < asizeof(En_US.month_names); i++) {
- len = strlen(En_US.month_names[i]);
- if (strncasecmp(buf,
- En_US.month_names[i],
- len) == 0)
- break;
-
- len = strlen(En_US.abbrev_month_names[i]);
- if (strncasecmp(buf,
- En_US.abbrev_month_names[i],
- len) == 0)
- break;
- }
- if (i == asizeof(En_US.month_names))
- return 0;
-
- tm->tm_mon = i;
- buf += len;
- break;
-
- case 'm':
- if (!isdigit(*buf))
- return 0;
-
- for (i = 0; *buf != 0 && isdigit(*buf); buf++) {
- i *= 10;
- i += *buf - '0';
- }
- if (i < 1 || i > 12)
- return 0;
-
- tm->tm_mon = i - 1;
-
- if (*buf != 0 && isspace(*buf))
- while (*ptr != 0 && !isspace(*ptr))
- ptr++;
- break;
-
- case 'Y':
- case 'y':
- if (*buf == 0 || isspace(*buf))
- break;
-
- if (!isdigit(*buf))
- return 0;
-
- for (i = 0; *buf != 0 && isdigit(*buf); buf++) {
- i *= 10;
- i += *buf - '0';
- }
- if (c == 'Y')
- i -= 1900;
- if (i < 0)
- return 0;
-
- tm->tm_year = i;
-
- if (*buf != 0 && isspace(*buf))
- while (*ptr != 0 && !isspace(*ptr))
- ptr++;
- break;
- }
- }
-
- return buf;
-}
-
-#endif /* HAVE_STRPTIME */
-
diff --git a/test/ossl_config.rb b/test/ossl_config.rb
index ac24db1..e7f28b2 100755
--- a/test/ossl_config.rb
+++ b/test/ossl_config.rb
@@ -1,16 +1,18 @@
#!/usr/bin/env ruby
-raise "TO BE DROPPED???..."
-
require 'openssl'
include OpenSSL
-p config = Config.new("./openssl.cnf")
+p config = Config.load("./config.cnf")
-p string = config.get_string("req", "x509_extensions")
-p number = config.get_number("req", "default_bits")
-p string = config.get_string("req", "distinguished_name")
+p string = config.get_value("req", "x509_extensions")
+p string = config.get_value("req", "default_bits")
+p number = config.get_value("req", "default_bits").to_i
+p string = config.get_value("req", "distinguished_name")
+p config.get_section("req")
-p sect = config.get_section(string)
-p ConfigSection.new
+##
+#DISABLED!
+#p sect = config.get_section(string)
+#p ConfigSection.new
diff --git a/test/spki.rb b/test/spki.rb
index f88df6f..0e5b7f1 100644
--- a/test/spki.rb
+++ b/test/spki.rb
@@ -1,7 +1,7 @@
require "openssl"
include OpenSSL
-txt = "MIICUDCCATgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUIhGCK7sr\r\nO+jHy7S1ZllFCEPzhlneTnjUnjZWuZEVu7c14NUhJzpNXg//6sCoiy5cQPaIYFIs\r\nded/PosTNfJVPX6El+bWk/2Elf5iVYcScRpf+RkUBR6T3WAMFPCajx3JFonhqhny\r\n5bSXU41h7/oLpnQkeeo76ujKoxjV6vl+y36jCeUAI+dzrWLznUswWVnWvdNt/z1h\r\npWILYtCKexLsz+aOqA6NdGTVDb8r+iDorU2KGL4BJjMXGr/LutYQjeVVXZTuaeN+\r\nxa75TVMcSEzvVQm8Dk1u3C3r3hm9I9zKnpta5NqiToR/fA85Qw5YhjEZMWT/Rj+7\r\nB5LBp5NcX35vAgMBAAEWEGNoYWxsZW5nZSBzdHJpbmcwDQYJKoZIhvcNAQEEBQAD\r\nggEBABdXwDZ9yDyyC5xw8rN/+/xAZSYa8xn4gsUEg4P/mM22WZaqh/NXroXUcU5F\r\nQBeGTYlT//wVlobLeES64Mk/FaCIXrZrLRAxb5QUYIupH2MifRU5XWriYcc6pp7S\r\nD1N+U6MOUFPMziqLf2AYqXBxuky1KhFeXuL6t9j1IadEY9UgTbUQ9Joyt50PoacM\r\ncc2i22GGdpowx7mrB0hnkmYmZ5CgQkrxNM2m4TCuuQwVIyaGgED5Xpa29QWaPhkM\r\njqjHBL4FOmPgYtaIFiFihQziYj5WYOtSEcIcEs/mHPx0lrY9V0fzp2yMGz+AQ3XF\r\nylBqpB33EBqXn/NGzHgWfdU1vEM="
+puts txt = "MIICUDCCATgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUIhGCK7sr\r\nO+jHy7S1ZllFCEPzhlneTnjUnjZWuZEVu7c14NUhJzpNXg//6sCoiy5cQPaIYFIs\r\nded/PosTNfJVPX6El+bWk/2Elf5iVYcScRpf+RkUBR6T3WAMFPCajx3JFonhqhny\r\n5bSXU41h7/oLpnQkeeo76ujKoxjV6vl+y36jCeUAI+dzrWLznUswWVnWvdNt/z1h\r\npWILYtCKexLsz+aOqA6NdGTVDb8r+iDorU2KGL4BJjMXGr/LutYQjeVVXZTuaeN+\r\nxa75TVMcSEzvVQm8Dk1u3C3r3hm9I9zKnpta5NqiToR/fA85Qw5YhjEZMWT/Rj+7\r\nB5LBp5NcX35vAgMBAAEWEGNoYWxsZW5nZSBzdHJpbmcwDQYJKoZIhvcNAQEEBQAD\r\nggEBABdXwDZ9yDyyC5xw8rN/+/xAZSYa8xn4gsUEg4P/mM22WZaqh/NXroXUcU5F\r\nQBeGTYlT//wVlobLeES64Mk/FaCIXrZrLRAxb5QUYIupH2MifRU5XWriYcc6pp7S\r\nD1N+U6MOUFPMziqLf2AYqXBxuky1KhFeXuL6t9j1IadEY9UgTbUQ9Joyt50PoacM\r\ncc2i22GGdpowx7mrB0hnkmYmZ5CgQkrxNM2m4TCuuQwVIyaGgED5Xpa29QWaPhkM\r\njqjHBL4FOmPgYtaIFiFihQziYj5WYOtSEcIcEs/mHPx0lrY9V0fzp2yMGz+AQ3XF\r\nylBqpB33EBqXn/NGzHgWfdU1vEM="
txt.gsub!(/(\r|\n)/,"")
puts Netscape::SPKI.new(txt).to_str