gb.openssl: Add OpenSSL static class and RandomBytes method
[GB.OPENSSL] * NEW: Add static class OpenSSL for general utility methods provided by OpenSSL * NEW: Add OpenSSL.RandomBytes to generate a cryptographically strong pseudo-random string of given length
This commit is contained in:
parent
ade69465d6
commit
d913a59929
4 changed files with 127 additions and 0 deletions
|
@ -9,6 +9,7 @@ gb_openssl_la_CPPFLAGS = @OPENSSL_INC@ -I../../main/gbx -I../../main/share
|
|||
|
||||
gb_openssl_la_SOURCES = \
|
||||
main.h main.c \
|
||||
c_openssl.h c_openssl.c \
|
||||
c_digest.h c_digest.c \
|
||||
c_cipher.h c_cipher.c \
|
||||
c_hmac.h c_hmac.c
|
||||
|
|
80
gb.openssl/src/c_openssl.c
Normal file
80
gb.openssl/src/c_openssl.c
Normal file
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
* c_openssl.c - Static OpenSSL class
|
||||
*
|
||||
* Copyright (C) 2019 Tobias Boege <tobias@gambas-buch.de>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* In addition, as a special exception, the copyright holders give
|
||||
* permission to link the code of portions of this program with the
|
||||
* OpenSSL library under certain conditions as described in each
|
||||
* individual source file, and distribute linked combinations
|
||||
* including the two.
|
||||
* You must obey the GNU General Public License in all respects
|
||||
* for all of the code used other than OpenSSL. If you modify
|
||||
* file(s) with this exception, you may extend this exception to
|
||||
* your version of the file(s), but you are not obligated to do so.
|
||||
* If you do not wish to do so, delete this exception statement
|
||||
* from your version. If you delete this exception statement from
|
||||
* all source files in the program, then also delete it here.
|
||||
*/
|
||||
|
||||
#define __C_OPENSSL_C
|
||||
|
||||
#include <openssl/crypto.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/err.h>
|
||||
|
||||
#include "main.h"
|
||||
#include "c_openssl.h"
|
||||
|
||||
/*
|
||||
* OpenSSL
|
||||
*/
|
||||
|
||||
/**G
|
||||
* Return a cryptographically strongly pseudo-random string of the
|
||||
* given *Length*.
|
||||
**/
|
||||
BEGIN_METHOD(OpenSSL_RandomBytes, GB_INTEGER length)
|
||||
|
||||
char *ret = GB.TempString(NULL, VARG(length));
|
||||
int res;
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||
res = RAND_pseudo_bytes((unsigned char *) ret, VARG(length));
|
||||
#else
|
||||
res = RAND_bytes((unsigned char *) ret, VARG(length));
|
||||
#endif
|
||||
if (res == -1) {
|
||||
GB.Error("Random number generator not supported");
|
||||
return;
|
||||
} else if (res == 0) {
|
||||
GB.Error(ERR_error_string(ERR_get_error(), NULL));
|
||||
return;
|
||||
}
|
||||
|
||||
GB.ReturnString(ret);
|
||||
|
||||
END_METHOD
|
||||
|
||||
GB_DESC COpenSSL[] = {
|
||||
GB_DECLARE_STATIC("OpenSSL"),
|
||||
|
||||
GB_STATIC_METHOD("RandomBytes", "s", OpenSSL_RandomBytes, "(Length)i"),
|
||||
|
||||
GB_END_DECLARE
|
||||
};
|
43
gb.openssl/src/c_openssl.h
Normal file
43
gb.openssl/src/c_openssl.h
Normal file
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* c_openssl.h
|
||||
*
|
||||
* Copyright (C) 2019 Tobias Boege <tobias@gambas-buch.de>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*
|
||||
* In addition, as a special exception, the copyright holders give
|
||||
* permission to link the code of portions of this program with the
|
||||
* OpenSSL library under certain conditions as described in each
|
||||
* individual source file, and distribute linked combinations
|
||||
* including the two.
|
||||
* You must obey the GNU General Public License in all respects
|
||||
* for all of the code used other than OpenSSL. If you modify
|
||||
* file(s) with this exception, you may extend this exception to
|
||||
* your version of the file(s), but you are not obligated to do so.
|
||||
* If you do not wish to do so, delete this exception statement
|
||||
* from your version. If you delete this exception statement from
|
||||
* all source files in the program, then also delete it here.
|
||||
*/
|
||||
|
||||
#ifndef __C_OPENSSL_H
|
||||
#define __C_OPENSSL_H
|
||||
|
||||
#ifndef __C_OPENSSL_C
|
||||
extern GB_DESC COpenSSL[];
|
||||
#endif
|
||||
|
||||
#endif /* __C_OPENSSL_H */
|
||||
|
|
@ -41,6 +41,7 @@
|
|||
#include <gbx_c_array.h>
|
||||
|
||||
#include "main.h"
|
||||
#include "c_openssl.h"
|
||||
#include "c_digest.h"
|
||||
#include "c_cipher.h"
|
||||
#include "c_hmac.h"
|
||||
|
@ -48,6 +49,8 @@
|
|||
GB_INTERFACE GB EXPORT;
|
||||
|
||||
GB_DESC *GB_CLASSES[] EXPORT = {
|
||||
COpenSSL,
|
||||
|
||||
CDigest,
|
||||
CDigestMethod,
|
||||
|
||||
|
|
Loading…
Reference in a new issue