dkulwin dd2bf90066 Support for Visual studio
The changes necessary to support visual studio fall into 2 basic groups.
1) reordering of header files, and 2) changes to support syntax
differences between mingw and visual studio and 3).  All changes are
conditional upon the definition of the macro __VS_BUILD__ .
2015-11-11 15:03:03 -06:00

127 lines
3.6 KiB
C

/*
* Author: NoMachine <developers@nomachine.com>
*
* Copyright (c) 2009, 2013 NoMachine
* All rights reserved
*
* Support functions and system calls' replacements needed to let the
* software run on Win32 based operating systems.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef KeyAuth_H
#define KeyAuth_H
#undef STRING
#ifdef __VS_BUILD__
#define UMDF_USING_NTSTATUS
#include <winsock2.h>
#include <Windows.h>
#include <LsaLookup.h>
#include <Ntsecapi.h>
#endif
#include <winsock2.h>
#include "Win64Fix.h"
#include <openssl/crypto.h>
#include <openssl/rsa.h>
#include <openssl/dsa.h>
#include <openssl/sha.h>
#include <openssl/md5.h>
#include <openssl/bn.h>
#include <openssl/evp.h>
#include <openssl/err.h>
#include <cstring>
#include <cstdio>
#include <windows.h>
#include <NTSecPkg.h>
#include "Types.h"
#include "String.h"
#include "PopBinary.h"
#include "Base64.h"
#include "Utils.h"
#include "Key.h"
#include "Debug.h"
#include "SSLFix.h"
#define SSH_BUG_SIGBLOB 0x00000001
#define SSH_BUG_RSASIGMD5 0x00002000
#define INTBLOB_LEN 20
#define SIGBLOB_LEN (2*INTBLOB_LEN)
//
// Minimum modulus size (n) for RSA keys.
//
#define SSH_RSA_MINIMUM_MODULUS_SIZE 768
static const Unsigned Char id_sha1[] =
{
0x30, 0x21, // type Sequence, length 0x21 (33)
0x30, 0x09, // type Sequence, length 0x09
0x06, 0x05, // type OID, length 0x05
0x2b, 0x0e, 0x03, 0x02, 0x1a, // id-sha1 OID
0x05, 0x00, // NULL
0x04, 0x14 // Octet string, length 0x14 (20),
// followed by sha1 hash
};
//
// id-md5 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
// rsadsi(113549) digestAlgorithm(2) 5 }
//
static const Unsigned Char id_md5[] =
{
0x30, 0x20, // type Sequence, length 0x20 (32)
0x30, 0x0c, // type Sequence, length 0x09
0x06, 0x08, // type OID, length 0x05
0x2a, 0x86, 0x48, 0x86, // id-md5
0xF7, 0x0D, 0x02, 0x05,
0x05, 0x00, // NULL
0x04, 0x10 // Octet string, length 0x10 (16),
// followed by md5 hash
};
Int VerifyKey(const Key *key, BYTE *sign, Int signSize,
BYTE *data, Int dataSize, Int dataFellows);
#endif