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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
/*
* Copyright 1995-2025 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the Apache License 2.0 (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
* in the file LICENSE in the source distribution or at
* https://www.openssl.org/source/license.html
*/
#include <stdio.h>
#include <openssl/bio.h>
#include "internal/e_os.h"
#include "internal/cryptlib.h"
#include "internal/common.h"
#include "internal/thread_once.h"
#include "buildinf.h"
unsigned long OpenSSL_version_num(void)
{
return OPENSSL_VERSION_NUMBER;
}
unsigned int OPENSSL_version_major(void)
{
return OPENSSL_VERSION_MAJOR;
}
unsigned int OPENSSL_version_minor(void)
{
return OPENSSL_VERSION_MINOR;
}
unsigned int OPENSSL_version_patch(void)
{
return OPENSSL_VERSION_PATCH;
}
const char *OPENSSL_version_pre_release(void)
{
return OPENSSL_VERSION_PRE_RELEASE;
}
const char *OPENSSL_version_build_metadata(void)
{
return OPENSSL_VERSION_BUILD_METADATA;
}
extern char ossl_cpu_info_str[];
#if defined(_WIN32) && defined(OSSL_WINCTX)
/* size: MAX_PATH + sizeof("OPENSSLDIR: \"\"") */
static char openssldir[MAX_PATH + 15];
/* size: MAX_PATH + sizeof("ENGINESDIR: \"\"") */
static char enginesdir[MAX_PATH + 15];
/* size: MAX_PATH + sizeof("MODULESDIR: \"\"") */
static char modulesdir[MAX_PATH + 15];
static CRYPTO_ONCE version_strings_once = CRYPTO_ONCE_STATIC_INIT;
DEFINE_RUN_ONCE_STATIC(version_strings_setup)
{
BIO_snprintf(openssldir, sizeof(openssldir), "OPENSSLDIR: \"%s\"",
ossl_get_openssldir());
BIO_snprintf(enginesdir, sizeof(enginesdir), "ENGINESDIR: \"%s\"",
ossl_get_enginesdir());
BIO_snprintf(modulesdir, sizeof(modulesdir), "MODULESDIR: \"%s\"",
ossl_get_modulesdir());
return 1;
}
# define TOSTR(x) #x
# define OSSL_WINCTX_STRING "OSSL_WINCTX: \"" TOSTR(OSSL_WINCTX) "\""
#endif
const char *OpenSSL_version(int t)
{
#if defined(_WIN32) && defined(OSSL_WINCTX)
/* Cannot really fail but we would return empty strings anyway */
(void)RUN_ONCE(&version_strings_once, version_strings_setup);
#endif
switch (t) {
case OPENSSL_VERSION:
return OPENSSL_VERSION_TEXT;
case OPENSSL_VERSION_STRING:
return OPENSSL_VERSION_STR;
case OPENSSL_FULL_VERSION_STRING:
return OPENSSL_FULL_VERSION_STR;
case OPENSSL_BUILT_ON:
return DATE;
case OPENSSL_CFLAGS:
return compiler_flags;
case OPENSSL_PLATFORM:
return PLATFORM;
#if defined(_WIN32) && defined(OSSL_WINCTX)
case OPENSSL_DIR:
return openssldir;
case OPENSSL_ENGINES_DIR:
return enginesdir;
case OPENSSL_MODULES_DIR:
return modulesdir;
#else
case OPENSSL_DIR:
# ifdef OPENSSLDIR
return "OPENSSLDIR: \"" OPENSSLDIR "\"";
# else
return "OPENSSLDIR: N/A";
# endif
case OPENSSL_ENGINES_DIR:
# ifdef ENGINESDIR
return "ENGINESDIR: \"" ENGINESDIR "\"";
# else
return "ENGINESDIR: N/A";
# endif
case OPENSSL_MODULES_DIR:
# ifdef MODULESDIR
return "MODULESDIR: \"" MODULESDIR "\"";
# else
return "MODULESDIR: N/A";
# endif
#endif
case OPENSSL_CPU_INFO:
if (OPENSSL_info(OPENSSL_INFO_CPU_SETTINGS) != NULL)
return ossl_cpu_info_str;
else
return "CPUINFO: N/A";
case OPENSSL_WINCTX:
#if defined(_WIN32) && defined(OSSL_WINCTX)
return OSSL_WINCTX_STRING;
#else
return "OSSL_WINCTX: Undefined";
#endif
}
return "not available";
}
|