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 = \
|
gb_openssl_la_SOURCES = \
|
||||||
main.h main.c \
|
main.h main.c \
|
||||||
|
c_openssl.h c_openssl.c \
|
||||||
c_digest.h c_digest.c \
|
c_digest.h c_digest.c \
|
||||||
c_cipher.h c_cipher.c \
|
c_cipher.h c_cipher.c \
|
||||||
c_hmac.h c_hmac.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 <gbx_c_array.h>
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
#include "c_openssl.h"
|
||||||
#include "c_digest.h"
|
#include "c_digest.h"
|
||||||
#include "c_cipher.h"
|
#include "c_cipher.h"
|
||||||
#include "c_hmac.h"
|
#include "c_hmac.h"
|
||||||
|
@ -48,6 +49,8 @@
|
||||||
GB_INTERFACE GB EXPORT;
|
GB_INTERFACE GB EXPORT;
|
||||||
|
|
||||||
GB_DESC *GB_CLASSES[] EXPORT = {
|
GB_DESC *GB_CLASSES[] EXPORT = {
|
||||||
|
COpenSSL,
|
||||||
|
|
||||||
CDigest,
|
CDigest,
|
||||||
CDigestMethod,
|
CDigestMethod,
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue