diff options
author | Michal Rokos <m.rokos@sh.cvut.cz> | 2002-01-06 16:09:45 +0000 |
---|---|---|
committer | Michal Rokos <m.rokos@sh.cvut.cz> | 2002-01-06 16:09:45 +0000 |
commit | 2253db99c8dc924ecf5dd103740a033d54426330 (patch) | |
tree | 7fad037117681f344c0b31bd167d7aa840e881a2 | |
parent | 9951f389c1a4df41cbd1a68f5fb04378948f369a (diff) | |
download | ruby-openssl-history-2253db99c8dc924ecf5dd103740a033d54426330.tar.gz |
* BN is (somewhat) full imp. now
* Config reworked (get_value, get_section)
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | README | 8 | ||||
-rw-r--r-- | lib/openssl.rb | 6 | ||||
-rw-r--r-- | ossl.c | 31 | ||||
-rw-r--r-- | ossl.h | 7 | ||||
-rw-r--r-- | ossl_bn.c | 101 | ||||
-rw-r--r-- | ossl_config.c | 160 | ||||
-rw-r--r-- | strncasecmp.c | 22 | ||||
-rw-r--r-- | strptime.c | 364 | ||||
-rwxr-xr-x | test/ossl_config.rb | 18 | ||||
-rw-r--r-- | test/spki.rb | 2 |
11 files changed, 215 insertions, 508 deletions
@@ -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/ @@ -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 @@ -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; } @@ -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 @@ -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 |