From 156b488f766d9128215d8e8d67056fa70214d314 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Sat, 10 Nov 2001 14:24:58 +0000 Subject: [PATCH] updates. --- win32/tests/testi2.cpp | 468 +++++++++++++++++++++++++++++++++++++++++ win32/tests/testi2.h | 12 ++ 2 files changed, 480 insertions(+) create mode 100644 win32/tests/testi2.cpp create mode 100644 win32/tests/testi2.h diff --git a/win32/tests/testi2.cpp b/win32/tests/testi2.cpp new file mode 100644 index 00000000..b2a9ec52 --- /dev/null +++ b/win32/tests/testi2.cpp @@ -0,0 +1,468 @@ +// testi2.cpp : Defines the entry point for the application. +// + +#define FD_SETSIZE 5000 +#include "stdafx.h" +#include "resource.h" +#include +#include +extern "C" +{ +#define FD_SETSIZE 5000 +#include "silcincludes.h" +#include "clientlibincludes.h" +} + +#define MAX_LOADSTRING 100 + +// Global Variables: +HINSTANCE hInst; // current instance +TCHAR szTitle[MAX_LOADSTRING]; // The title bar text +TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text + +// Foward declarations of functions included in this code module: +ATOM MyRegisterClass(HINSTANCE hInstance); +BOOL InitInstance(HINSTANCE, int); +LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM); + +void silc_op_say(SilcClient client, SilcClientConnection conn, + SilcClientMessageType type, char *msg, ...) +{ + va_list vp; + char message[2048]; + + memset(message, 0, sizeof(message)); + strncat(message, "\n*** ", 5); + + va_start(vp, msg); + vsprintf(message + 5, msg, vp); + va_end(vp); + + MessageBox( NULL, (char *)message, "say", MB_OK | MB_ICONINFORMATION ); +} + +void silc_notify(SilcClient client, SilcClientConnection conn, + SilcNotifyType type, ...) +{ + +} + +void silc_connect(SilcClient client, SilcClientConnection conn, int success) +{ + +} + +int silc_auth_meth(SilcClient client, SilcClientConnection conn, + char *hostname, uint16 port, + SilcProtocolAuthMeth *auth_meth, + unsigned char **auth_data, + uint32 *auth_data_len) +{ + *auth_meth = SILC_AUTH_NONE; + return TRUE; +} +void silc_verify_public_key(SilcClient client, SilcClientConnection conn, + SilcSocketType conn_type, unsigned char *pk, + uint32 pk_len, SilcSKEPKType pk_type, + SilcVerifyPublicKey completion, void *context) +{ + completion(TRUE, context); +} + +void silc_command_reply(SilcClient client, SilcClientConnection conn, + SilcCommandPayload cmd_payload, int success, + SilcCommand command, SilcCommandStatus status, ...) +{ + +} + +/* SILC client operations */ +SilcClientOperations ops = { + silc_op_say, + NULL, + NULL, + silc_notify, + NULL, + silc_command_reply, + silc_connect, + NULL, + silc_auth_meth, + silc_verify_public_key, +}; + +SILC_TASK_CALLBACK(connect_client) +{ + SilcClient client = (SilcClient)context; + silc_client_connect_to_server(client, 1334, "leevi.kuo.fi.ssh.com", NULL); +} + +void silc_log(char *message) +{ +} + +void silc_debugl(char *file, char *function, + int line, char *message) +{ + char m[5000]; + memcpy(m, message, strlen(message)); + m[strlen(message)] = '\n'; + m[strlen(message) + 1] = 0; + OutputDebugString(m); +} + +void silc_hexdumpl(char *file, char *function, + int line, unsigned char *data_in, + uint32 data_len, char *message) +{ + int i, k; + int off, pos, count; + unsigned char *data = (unsigned char *)data_in; + char m[10000], *cp; + int len = data_len; + +// memset(m, 0, sizeof(m)); + + cp = m; + snprintf(cp, 10000, "%s:%d: %s\n", function, line, message); + cp += strlen(cp); + + k = 0; + off = len % 16; + pos = 0; + count = 16; + while (1) { + + if (off) { + if ((len - pos) < 16 && (len - pos <= len - off)) + count = off; + } else { + if (pos == len) + count = 0; + } + if (off == len) + count = len; + + if (count) { + snprintf(cp, sizeof(m), "%08X ", k++ * 16); + cp += strlen(cp); + } + + for (i = 0; i < count; i++) { + snprintf(cp, sizeof(m), "%02X ", data[pos + i]); + cp += strlen(cp); + + if ((i + 1) % 4 == 0) { + snprintf(cp, sizeof(m), " "); + cp += strlen(cp); + } + } + + if (count && count < 16) { + int j; + + for (j = 0; j < 16 - count; j++) { + snprintf(cp, sizeof(m), " "); + cp += strlen(cp); + + if ((j + count + 1) % 4 == 0) { + snprintf(cp, sizeof(m), " "); + cp += strlen(cp); + } + } + } + + for (i = 0; i < count; i++) { + char ch; + + if (data[pos] < 32 || data[pos] >= 127) + ch = '.'; + else + ch = data[pos]; + + snprintf(cp, sizeof(m), "%c", ch); + cp += strlen(cp); + pos++; + } + + if (count) { + snprintf(cp, sizeof(m), "\n"); + cp += strlen(cp); + } + + if (count < 16) + break; + } + + OutputDebugString(m); + MessageBox( NULL, (char *)m, "hexdump", MB_OK | MB_ICONINFORMATION ); +} + +static int +silc_create_key_pair(char *pkcs_name, int bits, char *path, + char *identifier, + SilcPublicKey *ret_pub_key, + SilcPrivateKey *ret_prv_key) +{ + SilcPKCS pkcs; + SilcPublicKey pub_key; + SilcPrivateKey prv_key; + SilcRng rng; + unsigned char *key; + uint32 key_len; + char pkfile[256], prvfile[256]; + + if (!pkcs_name || !path) + return FALSE; + + if (!bits) + bits = 1024; + + rng = silc_rng_alloc(); + silc_rng_init(rng); + silc_rng_global_init(rng); + + /* Generate keys */ + silc_pkcs_alloc((const unsigned char *)pkcs_name, &pkcs); + pkcs->pkcs->init(pkcs->context, bits, rng); + + /* Save public key into file */ + key = silc_pkcs_get_public_key(pkcs, &key_len); + pub_key = silc_pkcs_public_key_alloc(pkcs->pkcs->name, identifier, + key, key_len); + *ret_pub_key = pub_key; + + memset(key, 0, sizeof(key_len)); + silc_free(key); + + /* Save private key into file */ + key = silc_pkcs_get_private_key(pkcs, &key_len); + prv_key = silc_pkcs_private_key_alloc(pkcs->pkcs->name, key, key_len); + *ret_prv_key = prv_key; + + memset(key, 0, sizeof(key_len)); + silc_free(key); + + silc_rng_free(rng); + silc_pkcs_free(pkcs); + + return TRUE; +} + + +int APIENTRY WinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPSTR lpCmdLine, + int nCmdShow) +{ + // TODO: Place code here. + MSG msg; + HACCEL hAccelTable; + HANDLE h; + HANDLE handles[100]; + SOCKET s; + unsigned int k; + WSAEVENT e, e2, e3; + int ret; + DWORD ready; + HMODULE mod; + + // Initialize global strings + LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); + LoadString(hInstance, IDC_TESTI2, szWindowClass, MAX_LOADSTRING); + MyRegisterClass(hInstance); + + // Perform application initialization: + if (!InitInstance (hInstance, nCmdShow)) + { + return FALSE; + } + + hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_TESTI2); + + { + SilcSchedule sched; + SilcClient client; + + silc_net_win32_init(); + client = silc_client_alloc(&ops, NULL, NULL, "SILC-1.0-0.5.1"); + client->realname = "pekka riikonen"; + client->username = "priikone"; + client->hostname = "leevi.kuo.fi.ssh.com"; + + silc_cipher_register_default(); + silc_pkcs_register_default(); + silc_hash_register_default(); + silc_hmac_register_default(); + + silc_debug = TRUE; + silc_log_set_debug_callbacks(silc_debugl, silc_hexdumpl); + + silc_create_key_pair("rsa", 1024, "kk", "UN=priikone, HN=pelle.kuo.fi.ssh.com", + &client->public_key, &client->private_key); + + silc_client_init(client); + + silc_schedule_task_add(client->schedule, 0, connect_client, + client, 0, 1, SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL); + + silc_client_run(client); + } + + return msg.wParam; +} + +// +// FUNCTION: MyRegisterClass() +// +// PURPOSE: Registers the window class. +// +// COMMENTS: +// +// This function and its usage is only necessary if you want this code +// to be compatible with Win32 systems prior to the 'RegisterClassEx' +// function that was added to Windows 95. It is important to call this function +// so that the application will get 'well formed' small icons associated +// with it. +// +ATOM MyRegisterClass(HINSTANCE hInstance) +{ + WNDCLASSEX wcex; + + wcex.cbSize = sizeof(WNDCLASSEX); + + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = (WNDPROC)WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_TESTI2); + wcex.hCursor = LoadCursor(NULL, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); + wcex.lpszMenuName = (LPCSTR)IDC_TESTI2; + wcex.lpszClassName = szWindowClass; + wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL); + + return RegisterClassEx(&wcex); +} + +// +// FUNCTION: InitInstance(HANDLE, int) +// +// PURPOSE: Saves instance handle and creates main window +// +// COMMENTS: +// +// In this function, we save the instance handle in a global variable and +// create and display the main program window. +// +BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) +{ + HWND hWnd; + + hInst = hInstance; // Store instance handle in our global variable + + hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); + + if (!hWnd) + { + LPVOID lpMsgBuf; + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + GetLastError(), + 0, // Default language + (LPTSTR) &lpMsgBuf, + 0, + NULL + ); + // Process any inserts in lpMsgBuf. + // ... + // Display the string. + MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION ); + // Free the buffer. + LocalFree( lpMsgBuf ); + + return FALSE; + } + + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); + + return TRUE; +} + +// +// FUNCTION: WndProc(HWND, unsigned, WORD, LONG) +// +// PURPOSE: Processes messages for the main window. +// +// WM_COMMAND - process the application menu +// WM_PAINT - Paint the main window +// WM_DESTROY - post a quit message and return +// +// +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + int wmId, wmEvent; + PAINTSTRUCT ps; + HDC hdc; + TCHAR szHello[MAX_LOADSTRING]; + LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING); + + switch (message) + { + case WM_COMMAND: + wmId = LOWORD(wParam); + wmEvent = HIWORD(wParam); + // Parse the menu selections: + switch (wmId) + { + case IDM_ABOUT: + DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About); + break; + case IDM_EXIT: + DestroyWindow(hWnd); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + break; + case WM_PAINT: + hdc = BeginPaint(hWnd, &ps); + // TODO: Add any drawing code here... + RECT rt; + GetClientRect(hWnd, &rt); + DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER); + EndPaint(hWnd, &ps); + break; + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; +} + +// Mesage handler for about box. +LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + case WM_INITDIALOG: + return TRUE; + + case WM_COMMAND: + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + { + EndDialog(hDlg, LOWORD(wParam)); + return TRUE; + } + break; + } + return FALSE; +} diff --git a/win32/tests/testi2.h b/win32/tests/testi2.h new file mode 100644 index 00000000..1cac1a70 --- /dev/null +++ b/win32/tests/testi2.h @@ -0,0 +1,12 @@ + +#if !defined(AFX_TESTI2_H__01E3C6D6_6C6A_11D5_A2B8_000102F0ABE4__INCLUDED_) +#define AFX_TESTI2_H__01E3C6D6_6C6A_11D5_A2B8_000102F0ABE4__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "resource.h" + + +#endif // !defined(AFX_TESTI2_H__01E3C6D6_6C6A_11D5_A2B8_000102F0ABE4__INCLUDED_) -- 2.24.0