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