1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
/*
* $Id$
* 'OpenSSL for Ruby' project
* Copyright (C) 2001 Michal Rokos <m.rokos@sh.cvut.cz>
* All rights reserved.
*/
/*
* This program is licenced under the same licence as Ruby.
* (See the file 'LICENCE'.)
*/
#include <openssl/err.h>
#include "ossl.h"
void ossl_check_type(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));
}
}
char *ossl_error(void)
{
return ERR_error_string(ERR_get_error(), NULL);
}
VALUE asn1time_to_time(ASN1_UTCTIME *time)
{
struct tm tm;
switch(time->type) {
case V_ASN1_UTCTIME:
if (!strptime(time->data, "%y%m%d%H%M%S", &tm)) {
rb_raise(rb_eTypeError, "bad UTCTIME format");
}
break;
case V_ASN1_GENERALIZEDTIME:
if (!strptime(time->data, "%Y%m%d%H%M%S", &tm)) {
rb_raise(rb_eTypeError, "bad GENERALIZEDTIME format" );
}
break;
default:
rb_raise(rb_eTypeError, "unknown time format");
}
return rb_time_new(mktime(&tm), 0);
}
/*
* Modules
*/
VALUE mOSSL;
VALUE mX509;
VALUE mDigest;
VALUE mCipher;
VALUE mPKey;
VALUE mNetscape;
VALUE mSSL;
VALUE mPKCS7;
/*
* OSSL library init
*/
void Init_openssl()
{
OpenSSL_add_all_algorithms();
ERR_load_crypto_strings();
/*
* Universe of Module
*/
mOSSL = rb_define_module("OpenSSL");
mX509 = rb_define_module_under(mOSSL, "X509");
mDigest = rb_define_module_under(mOSSL, "Digest");
mPKey = rb_define_module_under(mOSSL, "PKey");
mNetscape = rb_define_module_under(mOSSL, "Netscape");
mCipher = rb_define_module_under(mOSSL, "Cipher");
mSSL = rb_define_module_under(mOSSL, "SSL");
mPKCS7 = rb_define_module_under(mOSSL, "PKCS7");
/*
* Components
*/
/* Init_ossl_config(mOSSL); TO BE DROPPED OUT??? */
Init_ossl_x509(mX509);
Init_ossl_x509name(mX509);
Init_ossl_x509revoked(mX509);
Init_ossl_x509crl(mX509);
Init_ossl_x509store(mX509);
Init_ossl_digest(mDigest);
Init_ossl_x509req(mX509);
Init_ossl_x509ext(mX509);
Init_ossl_x509attr(mX509);
Init_ossl_spki(mNetscape);
Init_ossl_cipher(mCipher);
Init_ossl_rand(mOSSL);
Init_ossl_pkey(mPKey);
Init_ssl(mSSL);
Init_PKCS7(mPKCS7);
}
|