xref: /netbsd-src/crypto/external/bsd/openssl/dist/test/rc2test.c (revision 8fbed61efdd901c0e09614c9f45356aeeab23fe3)
1c7da899bSchristos /*
2*8fbed61eSchristos  * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
3c7da899bSchristos  *
4*8fbed61eSchristos  * Licensed under the Apache License 2.0 (the "License").  You may not use
5c7da899bSchristos  * this file except in compliance with the License.  You can obtain a copy
6c7da899bSchristos  * in the file LICENSE in the source distribution or at
7c7da899bSchristos  * https://www.openssl.org/source/license.html
8c7da899bSchristos  */
9c7da899bSchristos 
10*8fbed61eSchristos /*
11*8fbed61eSchristos  * RC2 low level APIs are deprecated for public use, but still ok for internal
12*8fbed61eSchristos  * use.
13*8fbed61eSchristos  */
14*8fbed61eSchristos #include "internal/deprecated.h"
15*8fbed61eSchristos 
16e0ea3921Schristos #include "internal/nelem.h"
17e0ea3921Schristos #include "testutil.h"
18c7da899bSchristos 
19e0ea3921Schristos #ifndef OPENSSL_NO_RC2
20c7da899bSchristos # include <openssl/rc2.h>
21c7da899bSchristos 
22c7da899bSchristos static unsigned char RC2key[4][16] = {
23c7da899bSchristos     {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
24c7da899bSchristos      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
25c7da899bSchristos     {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
26c7da899bSchristos      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
27c7da899bSchristos     {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
28c7da899bSchristos      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
29c7da899bSchristos     {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
30c7da899bSchristos      0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F},
31c7da899bSchristos };
32c7da899bSchristos 
33c7da899bSchristos static unsigned char RC2plain[4][8] = {
34c7da899bSchristos     {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
35c7da899bSchristos     {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
36c7da899bSchristos     {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
37c7da899bSchristos     {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
38c7da899bSchristos };
39c7da899bSchristos 
40c7da899bSchristos static unsigned char RC2cipher[4][8] = {
41c7da899bSchristos     {0x1C, 0x19, 0x8A, 0x83, 0x8D, 0xF0, 0x28, 0xB7},
42c7da899bSchristos     {0x21, 0x82, 0x9C, 0x78, 0xA9, 0xF9, 0xC0, 0x74},
43c7da899bSchristos     {0x13, 0xDB, 0x35, 0x17, 0xD3, 0x21, 0x86, 0x9E},
44c7da899bSchristos     {0x50, 0xDC, 0x01, 0x62, 0xBD, 0x75, 0x7F, 0x31},
45c7da899bSchristos };
46c7da899bSchristos 
test_rc2(const int n)47e0ea3921Schristos static int test_rc2(const int n)
48c7da899bSchristos {
49e0ea3921Schristos     int testresult = 1;
50c7da899bSchristos     RC2_KEY key;
51c7da899bSchristos     unsigned char buf[8], buf2[8];
52c7da899bSchristos 
53c7da899bSchristos     RC2_set_key(&key, 16, &(RC2key[n][0]), 0 /* or 1024 */ );
54c7da899bSchristos 
55e0ea3921Schristos     RC2_ecb_encrypt(&RC2plain[n][0], buf, &key, RC2_ENCRYPT);
56e0ea3921Schristos     if (!TEST_mem_eq(&RC2cipher[n][0], 8, buf, 8))
57e0ea3921Schristos         testresult = 0;
58c7da899bSchristos 
59c7da899bSchristos     RC2_ecb_encrypt(buf, buf2, &key, RC2_DECRYPT);
60e0ea3921Schristos     if (!TEST_mem_eq(&RC2plain[n][0], 8, buf2, 8))
61e0ea3921Schristos         testresult = 0;
62c7da899bSchristos 
63e0ea3921Schristos     return testresult;
64c7da899bSchristos }
65c7da899bSchristos 
66c7da899bSchristos #endif
67e0ea3921Schristos 
setup_tests(void)68e0ea3921Schristos int setup_tests(void)
69e0ea3921Schristos {
70e0ea3921Schristos #ifndef OPENSSL_NO_RC2
71e0ea3921Schristos     ADD_ALL_TESTS(test_rc2, OSSL_NELEM(RC2key));
72e0ea3921Schristos #endif
73e0ea3921Schristos     return 1;
74e0ea3921Schristos }
75