ronnie
2022-10-14 1504bb53e29d3d46222c0b3ea994fc494b48e153
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
/*
 * Copyright (c) 2005 Darren Tucker <dtucker@zip.com.au>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */
 
#define SSH_DONT_OVERLOAD_OPENSSL_FUNCS
#include "includes.h"
 
#ifdef WITH_OPENSSL
 
#include <stdarg.h>
#include <string.h>
 
#ifdef USE_OPENSSL_ENGINE
# include <openssl/engine.h>
# include <openssl/conf.h>
#endif
 
#include "log.h"
 
#include "openssl-compat.h"
 
/*
 * OpenSSL version numbers: MNNFFPPS: major minor fix patch status
 * We match major, minor, fix and status (not patch) for <1.0.0.
 * After that, we acceptable compatible fix versions (so we
 * allow 1.0.1 to work with 1.0.0). Going backwards is only allowed
 * within a patch series.
 */
 
int
ssh_compatible_openssl(long headerver, long libver)
{
   long mask, hfix, lfix;
 
   /* exact match is always OK */
   if (headerver == libver)
       return 1;
 
   /* for versions < 1.0.0, major,minor,fix,status must match */
   if (headerver < 0x1000000f) {
       mask = 0xfffff00fL; /* major,minor,fix,status */
       return (headerver & mask) == (libver & mask);
   }
 
   /*
    * For versions >= 1.0.0, major,minor,status must match and library
    * fix version must be equal to or newer than the header.
    */
   mask = 0xfff0000fL; /* major,minor,status */
   hfix = (headerver & 0x000ff000) >> 12;
   lfix = (libver & 0x000ff000) >> 12;
   if ( (headerver & mask) == (libver & mask) && lfix >= hfix)
       return 1;
   return 0;
}
 
#ifdef    USE_OPENSSL_ENGINE
void
ssh_OpenSSL_add_all_algorithms(void)
{
   OpenSSL_add_all_algorithms();
 
   /* Enable use of crypto hardware */
   ENGINE_load_builtin_engines();
   ENGINE_register_all_complete();
   OPENSSL_config(NULL);
}
#endif
 
#endif /* WITH_OPENSSL */