diff --git a/tests/testsecurity.c b/tests/testsecurity.c index 4913fc1a0..a306b2381 100644 --- a/tests/testsecurity.c +++ b/tests/testsecurity.c @@ -1,126 +1,126 @@ -/* Borrowed for Hamlib from: - * String Crypt Test (Linux) - * Copyright (C) 2012, 2015 - * - * Author: Paul E. Jones - * - * This software is licensed as "freeware." Permission to distribute - * this software in source and binary forms is hereby granted without a - * fee. THIS SOFTWARE IS PROVIDED 'AS IS' AND WITHOUT ANY EXPRESSED OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * THE AUTHOR SHALL NOT BE HELD LIABLE FOR ANY DAMAGES RESULTING FROM - * THE USE OF THIS SOFTWARE, EITHER DIRECTLY OR INDIRECTLY, INCLUDING, - * BUT NOT LIMITED TO, LOSS OF DATA OR DATA BEING RENDERED INACCURATE. - * - */ - -#include -#include -#ifdef _WIN32 -#include -//#include -#else -#include -#endif - -#include "AESStringCrypt.h" -#include "password.h" -#include "../src/misc.h" - -#if defined(_WIN32) -// gmtime_r can be defined by mingw -#ifndef gmtime_r -static struct tm *gmtime_r(const time_t *t, struct tm *r) -{ - // gmtime is threadsafe in windows because it uses TLS - const struct tm *theTm = gmtime(t); - - if (theTm) - { - *r = *theTm; - return r; - } - else - { - return 0; - } -} -#endif // gmtime_r -#endif // _WIN32 - -// using tv_usec with a sleep gives a fairly good random number -static int my_rand(int max) -{ - time_t t; - struct timeval tv; - struct tm result; - - t = time(NULL); - gmtime_r(&t, &result); - - gettimeofday(&tv, NULL); - hl_usleep(100); - int val = tv.tv_usec % max; - return val; -} - -void rig_make_key(char key[33]) -{ - const char *all = - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123467890!@#$%^&*()_=~<>/?"; - int max = strlen(all); - int i; - - for (i = 0; i < 32; ++i) - { - key[i] = all[my_rand(max)]; - } - - key[32] = 0; -} - -int main() -{ - char key1[33]; - char key2[33]; - char plaintext[33]; - unsigned char ciphertext[1024]; - int ciphertext_length; - int plaintext_length; - memset(ciphertext, 0, sizeof(ciphertext)); - rig_make_key(key1); - rig_make_key(key2); - printf("key1=%s\n", key1); - printf("key2=%s\n", key2); - ciphertext_length = AESStringCrypt((unsigned char *) key1, - strlen(key1), - (unsigned char *) key2, - strlen(key2), - (unsigned char *) ciphertext); - - for (int i = 0; i < ciphertext_length; ++i) { printf("%02x", ciphertext[i]); } - - printf("\n"); - - if (ciphertext_length == AESSTRINGCRYPT_ERROR) - { - printf("Error encrypting the string\n"); - } - - printf("Ciphertext length: %d\n", ciphertext_length); - memset(plaintext, 0, sizeof(plaintext)); - printf("Decrypting...\n"); - plaintext_length = AESStringDecrypt((unsigned char *) key1, - strlen(key1), - (unsigned char *) ciphertext, - ciphertext_length, - (unsigned char *) plaintext); - - if (plaintext_length == AESSTRINGCRYPT_ERROR) - { - printf("Error decrypting the string\n"); - } - - printf("Decrypted plaintext length: %d, %s\n", plaintext_length, plaintext); -} +/* Borrowed for Hamlib from: + * String Crypt Test (Linux) + * Copyright (C) 2012, 2015 + * + * Author: Paul E. Jones + * + * This software is licensed as "freeware." Permission to distribute + * this software in source and binary forms is hereby granted without a + * fee. THIS SOFTWARE IS PROVIDED 'AS IS' AND WITHOUT ANY EXPRESSED OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * THE AUTHOR SHALL NOT BE HELD LIABLE FOR ANY DAMAGES RESULTING FROM + * THE USE OF THIS SOFTWARE, EITHER DIRECTLY OR INDIRECTLY, INCLUDING, + * BUT NOT LIMITED TO, LOSS OF DATA OR DATA BEING RENDERED INACCURATE. + * + */ + +#include +#include +#ifdef _WIN32 +#include +//#include +#else +#include +#endif + +#include "AESStringCrypt.h" +#include "password.h" +#include "../src/misc.h" + +#if defined(_WIN32) +// gmtime_r can be defined by mingw +#ifndef gmtime_r +static struct tm *gmtime_r(const time_t *t, struct tm *r) +{ + // gmtime is threadsafe in windows because it uses TLS + const struct tm *theTm = gmtime(t); + + if (theTm) + { + *r = *theTm; + return r; + } + else + { + return 0; + } +} +#endif // gmtime_r +#endif // _WIN32 + +// using tv_usec with a sleep gives a fairly good random number +static int my_rand(int max) +{ + time_t t; + struct timeval tv; + struct tm result; + + t = time(NULL); + gmtime_r(&t, &result); + + gettimeofday(&tv, NULL); + hl_usleep(100); + int val = tv.tv_usec % max; + return val; +} + +void rig_make_key(char key[33]) +{ + const char *all = + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123467890!@#$%^&*()_=~<>/?"; + int max = strlen(all); + int i; + + for (i = 0; i < 32; ++i) + { + key[i] = all[my_rand(max)]; + } + + key[32] = 0; +} + +int main() +{ + char key1[33]; + char key2[33]; + char plaintext[33]; + unsigned char ciphertext[1024]; + int ciphertext_length; + int plaintext_length; + memset(ciphertext, 0, sizeof(ciphertext)); + rig_make_key(key1); + rig_make_key(key2); + printf("key1=%s\n", key1); + printf("key2=%s\n", key2); + ciphertext_length = AESStringCrypt((unsigned char *) key1, + strlen(key1), + (unsigned char *) key2, + strlen(key2), + (unsigned char *) ciphertext); + + for (int i = 0; i < ciphertext_length; ++i) { printf("%02x", ciphertext[i]); } + + printf("\n"); + + if (ciphertext_length == AESSTRINGCRYPT_ERROR) + { + printf("Error encrypting the string\n"); + } + + printf("Ciphertext length: %d\n", ciphertext_length); + memset(plaintext, 0, sizeof(plaintext)); + printf("Decrypting...\n"); + plaintext_length = AESStringDecrypt((unsigned char *) key1, + strlen(key1), + (unsigned char *) ciphertext, + ciphertext_length, + (unsigned char *) plaintext); + + if (plaintext_length == AESSTRINGCRYPT_ERROR) + { + printf("Error decrypting the string\n"); + } + + printf("Decrypted plaintext length: %d, %s\n", plaintext_length, plaintext); +}