Loading test/build.info +1 −1 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ IF[{- !$disabled{tests} -}] INCLUDE[rc2test]=../include DEPEND[rc2test]=../libcrypto SOURCE[rc4test]=rc4test.c SOURCE[rc4test]=rc4test.c testutil.c test_main.c INCLUDE[rc4test]=../include DEPEND[rc4test]=../libcrypto Loading test/rc4test.c +71 −118 Original line number Diff line number Diff line /* * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy Loading @@ -7,23 +7,17 @@ * https://www.openssl.org/source/license.html */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "../e_os.h" #include "test_main.h" #include "testutil.h" #ifdef OPENSSL_NO_RC4 int main(int argc, char *argv[]) { printf("No RC4 support\n"); return (0); } #else #ifndef OPENSSL_NO_RC4 # include <openssl/rc4.h> # include <openssl/sha.h> static unsigned char keys[7][30] = { static unsigned char keys[6][30] = { {8, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, {8, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, {8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, Loading @@ -32,9 +26,9 @@ static unsigned char keys[7][30] = { {4, 0xef, 0x01, 0x23, 0x45}, }; static unsigned char data_len[7] = { 8, 8, 8, 20, 28, 10 }; static unsigned char data_len[6] = { 8, 8, 8, 20, 28, 10 }; static unsigned char data[7][30] = { static unsigned char data[6][30] = { {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xff}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff}, Loading @@ -46,10 +40,9 @@ static unsigned char data[7][30] = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0, 0x12, 0x34, 0x56, 0x78, 0xff}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff}, {0}, }; static unsigned char output[7][30] = { static unsigned char output[6][30] = { {0x75, 0xb7, 0x87, 0x80, 0x99, 0xe0, 0xc5, 0x96, 0x00}, {0x74, 0x94, 0xc2, 0xe7, 0x10, 0x4b, 0x08, 0x79, 0x00}, {0xde, 0x18, 0x89, 0x41, 0xa3, 0x37, 0x5d, 0x3a, 0x00}, Loading @@ -61,87 +54,51 @@ static unsigned char output[7][30] = { 0x89, 0x2e, 0xbe, 0x30, 0x14, 0x3c, 0xe2, 0x87, 0x40, 0x01, 0x1e, 0xcf, 0x00}, {0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf, 0xbd, 0x61, 0x00}, {0}, }; int main(int argc, char *argv[]) static int test_rc4_encrypt(const int i) { int i, err = 0; int j; unsigned char *p; RC4_KEY key; unsigned char obuf[512]; RC4_KEY key; for (i = 0; i < 6; i++) { RC4_set_key(&key, keys[i][0], &(keys[i][1])); memset(obuf, 0, sizeof(obuf)); RC4(&key, data_len[i], &(data[i][0]), obuf); if (memcmp(obuf, output[i], data_len[i] + 1) != 0) { printf("error calculating RC4\n"); printf("output:"); for (j = 0; j < data_len[i] + 1; j++) printf(" %02x", obuf[j]); printf("\n"); printf("expect:"); p = &(output[i][0]); for (j = 0; j < data_len[i] + 1; j++) printf(" %02x", *(p++)); printf("\n"); err++; } else printf("test %d ok\n", i); return TEST_mem_eq(obuf, data_len[i] + 1, output[i], data_len[i] + 1); } printf("test end processing "); for (i = 0; i < data_len[3]; i++) { static int test_rc4_end_processing(const int i) { unsigned char obuf[512]; RC4_KEY key; RC4_set_key(&key, keys[3][0], &(keys[3][1])); memset(obuf, 0, sizeof(obuf)); RC4(&key, i, &(data[3][0]), obuf); if ((memcmp(obuf, output[3], i) != 0) || (obuf[i] != 0)) { printf("error in RC4 length processing\n"); printf("output:"); for (j = 0; j < i + 1; j++) printf(" %02x", obuf[j]); printf("\n"); printf("expect:"); p = &(output[3][0]); for (j = 0; j < i; j++) printf(" %02x", *(p++)); printf(" 00\n"); err++; } else { printf("."); fflush(stdout); if (!TEST_mem_eq(obuf, i, output[3], i)) return 0; return TEST_uchar_eq(obuf[i], 0); } } printf("done\n"); printf("test multi-call "); for (i = 0; i < data_len[3]; i++) { static int test_rc4_multi_call(const int i) { unsigned char obuf[512]; RC4_KEY key; RC4_set_key(&key, keys[3][0], &(keys[3][1])); memset(obuf, 0, sizeof(obuf)); RC4(&key, i, &(data[3][0]), obuf); RC4(&key, data_len[3] - i, &(data[3][i]), &(obuf[i])); if (memcmp(obuf, output[3], data_len[3] + 1) != 0) { printf("error in RC4 multi-call processing\n"); printf("output:"); for (j = 0; j < data_len[3] + 1; j++) printf(" %02x", obuf[j]); printf("\n"); printf("expect:"); p = &(output[3][0]); for (j = 0; j < data_len[3] + 1; j++) printf(" %02x", *(p++)); err++; } else { printf("."); fflush(stdout); return TEST_mem_eq(obuf, data_len[3] + 1, output[3], data_len[3] + 1); } } printf("done\n"); printf("bulk test "); static int test_rc_bulk(void) { RC4_KEY key; unsigned char buf[513]; SHA_CTX c; unsigned char md[SHA_DIGEST_LENGTH]; int i; static unsigned char expected[] = { 0xa4, 0x7b, 0xcc, 0x00, 0x3d, 0xd0, 0xbd, 0xe1, 0xac, 0x5f, 0x12, 0x1e, 0x45, 0xbc, 0xfb, 0x1a, 0xa1, 0xf2, 0x7f, 0xc5 Loading @@ -156,20 +113,16 @@ int main(int argc, char *argv[]) } SHA1_Final(md, &c); if (memcmp(md, expected, sizeof(md))) { printf("error in RC4 bulk test\n"); printf("output:"); for (j = 0; j < (int)sizeof(md); j++) printf(" %02x", md[j]); printf("\n"); printf("expect:"); for (j = 0; j < (int)sizeof(md); j++) printf(" %02x", expected[j]); printf("\n"); err++; } else printf("ok\n"); } EXIT(err); return TEST_mem_eq(md, sizeof(md), expected, sizeof(expected)); } #endif void register_tests(void) { #ifndef OPENSSL_NO_RC4 ADD_ALL_TESTS(test_rc4_encrypt, OSSL_NELEM(data_len)); ADD_ALL_TESTS(test_rc4_end_processing, data_len[3]); ADD_ALL_TESTS(test_rc4_multi_call, data_len[3]); ADD_TEST(test_rc_bulk); #endif } Loading
test/build.info +1 −1 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ IF[{- !$disabled{tests} -}] INCLUDE[rc2test]=../include DEPEND[rc2test]=../libcrypto SOURCE[rc4test]=rc4test.c SOURCE[rc4test]=rc4test.c testutil.c test_main.c INCLUDE[rc4test]=../include DEPEND[rc4test]=../libcrypto Loading
test/rc4test.c +71 −118 Original line number Diff line number Diff line /* * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy Loading @@ -7,23 +7,17 @@ * https://www.openssl.org/source/license.html */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "../e_os.h" #include "test_main.h" #include "testutil.h" #ifdef OPENSSL_NO_RC4 int main(int argc, char *argv[]) { printf("No RC4 support\n"); return (0); } #else #ifndef OPENSSL_NO_RC4 # include <openssl/rc4.h> # include <openssl/sha.h> static unsigned char keys[7][30] = { static unsigned char keys[6][30] = { {8, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, {8, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef}, {8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, Loading @@ -32,9 +26,9 @@ static unsigned char keys[7][30] = { {4, 0xef, 0x01, 0x23, 0x45}, }; static unsigned char data_len[7] = { 8, 8, 8, 20, 28, 10 }; static unsigned char data_len[6] = { 8, 8, 8, 20, 28, 10 }; static unsigned char data[7][30] = { static unsigned char data[6][30] = { {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0xff}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff}, Loading @@ -46,10 +40,9 @@ static unsigned char data[7][30] = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0, 0x12, 0x34, 0x56, 0x78, 0xff}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff}, {0}, }; static unsigned char output[7][30] = { static unsigned char output[6][30] = { {0x75, 0xb7, 0x87, 0x80, 0x99, 0xe0, 0xc5, 0x96, 0x00}, {0x74, 0x94, 0xc2, 0xe7, 0x10, 0x4b, 0x08, 0x79, 0x00}, {0xde, 0x18, 0x89, 0x41, 0xa3, 0x37, 0x5d, 0x3a, 0x00}, Loading @@ -61,87 +54,51 @@ static unsigned char output[7][30] = { 0x89, 0x2e, 0xbe, 0x30, 0x14, 0x3c, 0xe2, 0x87, 0x40, 0x01, 0x1e, 0xcf, 0x00}, {0xd6, 0xa1, 0x41, 0xa7, 0xec, 0x3c, 0x38, 0xdf, 0xbd, 0x61, 0x00}, {0}, }; int main(int argc, char *argv[]) static int test_rc4_encrypt(const int i) { int i, err = 0; int j; unsigned char *p; RC4_KEY key; unsigned char obuf[512]; RC4_KEY key; for (i = 0; i < 6; i++) { RC4_set_key(&key, keys[i][0], &(keys[i][1])); memset(obuf, 0, sizeof(obuf)); RC4(&key, data_len[i], &(data[i][0]), obuf); if (memcmp(obuf, output[i], data_len[i] + 1) != 0) { printf("error calculating RC4\n"); printf("output:"); for (j = 0; j < data_len[i] + 1; j++) printf(" %02x", obuf[j]); printf("\n"); printf("expect:"); p = &(output[i][0]); for (j = 0; j < data_len[i] + 1; j++) printf(" %02x", *(p++)); printf("\n"); err++; } else printf("test %d ok\n", i); return TEST_mem_eq(obuf, data_len[i] + 1, output[i], data_len[i] + 1); } printf("test end processing "); for (i = 0; i < data_len[3]; i++) { static int test_rc4_end_processing(const int i) { unsigned char obuf[512]; RC4_KEY key; RC4_set_key(&key, keys[3][0], &(keys[3][1])); memset(obuf, 0, sizeof(obuf)); RC4(&key, i, &(data[3][0]), obuf); if ((memcmp(obuf, output[3], i) != 0) || (obuf[i] != 0)) { printf("error in RC4 length processing\n"); printf("output:"); for (j = 0; j < i + 1; j++) printf(" %02x", obuf[j]); printf("\n"); printf("expect:"); p = &(output[3][0]); for (j = 0; j < i; j++) printf(" %02x", *(p++)); printf(" 00\n"); err++; } else { printf("."); fflush(stdout); if (!TEST_mem_eq(obuf, i, output[3], i)) return 0; return TEST_uchar_eq(obuf[i], 0); } } printf("done\n"); printf("test multi-call "); for (i = 0; i < data_len[3]; i++) { static int test_rc4_multi_call(const int i) { unsigned char obuf[512]; RC4_KEY key; RC4_set_key(&key, keys[3][0], &(keys[3][1])); memset(obuf, 0, sizeof(obuf)); RC4(&key, i, &(data[3][0]), obuf); RC4(&key, data_len[3] - i, &(data[3][i]), &(obuf[i])); if (memcmp(obuf, output[3], data_len[3] + 1) != 0) { printf("error in RC4 multi-call processing\n"); printf("output:"); for (j = 0; j < data_len[3] + 1; j++) printf(" %02x", obuf[j]); printf("\n"); printf("expect:"); p = &(output[3][0]); for (j = 0; j < data_len[3] + 1; j++) printf(" %02x", *(p++)); err++; } else { printf("."); fflush(stdout); return TEST_mem_eq(obuf, data_len[3] + 1, output[3], data_len[3] + 1); } } printf("done\n"); printf("bulk test "); static int test_rc_bulk(void) { RC4_KEY key; unsigned char buf[513]; SHA_CTX c; unsigned char md[SHA_DIGEST_LENGTH]; int i; static unsigned char expected[] = { 0xa4, 0x7b, 0xcc, 0x00, 0x3d, 0xd0, 0xbd, 0xe1, 0xac, 0x5f, 0x12, 0x1e, 0x45, 0xbc, 0xfb, 0x1a, 0xa1, 0xf2, 0x7f, 0xc5 Loading @@ -156,20 +113,16 @@ int main(int argc, char *argv[]) } SHA1_Final(md, &c); if (memcmp(md, expected, sizeof(md))) { printf("error in RC4 bulk test\n"); printf("output:"); for (j = 0; j < (int)sizeof(md); j++) printf(" %02x", md[j]); printf("\n"); printf("expect:"); for (j = 0; j < (int)sizeof(md); j++) printf(" %02x", expected[j]); printf("\n"); err++; } else printf("ok\n"); } EXIT(err); return TEST_mem_eq(md, sizeof(md), expected, sizeof(expected)); } #endif void register_tests(void) { #ifndef OPENSSL_NO_RC4 ADD_ALL_TESTS(test_rc4_encrypt, OSSL_NELEM(data_len)); ADD_ALL_TESTS(test_rc4_end_processing, data_len[3]); ADD_ALL_TESTS(test_rc4_multi_call, data_len[3]); ADD_TEST(test_rc_bulk); #endif }