Go to the documentation of this file.00001
00002
00003
00004
00005 #include "ossl.h"
00006
00007 VALUE mPKCS5;
00008 VALUE ePKCS5;
00009
00010 #ifdef HAVE_PKCS5_PBKDF2_HMAC
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 static VALUE
00027 ossl_pkcs5_pbkdf2_hmac(VALUE self, VALUE pass, VALUE salt, VALUE iter, VALUE keylen, VALUE digest)
00028 {
00029 VALUE str;
00030 const EVP_MD *md;
00031 int len = NUM2INT(keylen);
00032
00033 StringValue(pass);
00034 StringValue(salt);
00035 md = GetDigestPtr(digest);
00036
00037 str = rb_str_new(0, len);
00038
00039 if (PKCS5_PBKDF2_HMAC(RSTRING_PTR(pass), RSTRING_LEN(pass), RSTRING_PTR(salt), RSTRING_LEN(salt), NUM2INT(iter), md, len, RSTRING_PTR(str)) != 1)
00040 ossl_raise(ePKCS5, "PKCS5_PBKDF2_HMAC");
00041
00042 return str;
00043 }
00044 #else
00045 #define ossl_pkcs5_pbkdf2_hmac rb_f_notimplement
00046 #endif
00047
00048
00049 #ifdef HAVE_PKCS5_PBKDF2_HMAC_SHA1
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 static VALUE
00065 ossl_pkcs5_pbkdf2_hmac_sha1(VALUE self, VALUE pass, VALUE salt, VALUE iter, VALUE keylen)
00066 {
00067 VALUE str;
00068 int len = NUM2INT(keylen);
00069
00070 StringValue(pass);
00071 StringValue(salt);
00072
00073 str = rb_str_new(0, len);
00074
00075 if (PKCS5_PBKDF2_HMAC_SHA1(RSTRING_PTR(pass), RSTRING_LEN(pass),
00076 (const unsigned char *)RSTRING_PTR(salt), RSTRING_LEN(salt), NUM2INT(iter),
00077 len, (unsigned char *)RSTRING_PTR(str)) != 1)
00078 ossl_raise(ePKCS5, "PKCS5_PBKDF2_HMAC_SHA1");
00079
00080 return str;
00081 }
00082 #else
00083 #define ossl_pkcs5_pbkdf2_hmac_sha1 rb_f_notimplement
00084 #endif
00085
00086 void
00087 Init_ossl_pkcs5()
00088 {
00089
00090
00091
00092
00093 mPKCS5 = rb_define_module_under(mOSSL, "PKCS5");
00094 ePKCS5 = rb_define_class_under(mPKCS5, "PKCS5Error", eOSSLError);
00095
00096 rb_define_module_function(mPKCS5, "pbkdf2_hmac", ossl_pkcs5_pbkdf2_hmac, 5);
00097 rb_define_module_function(mPKCS5, "pbkdf2_hmac_sha1", ossl_pkcs5_pbkdf2_hmac_sha1, 4);
00098 }
00099