Из приведенного ниже примера кода видно, что первая функция 1 (concat_1) практически идентична функции 2 (concat_2). Единственное отличие состоит в том, что на 1 строку больше SHA512_Update (& c, d, strlen ((char *) d)).
Мой вопрос заключается в том, как превратить эти функции в 1, чтобы код не повторится. Я считаю, что разница в 1 строку - это пустая трата ресурсов, и ее следует исправить.
Примечание: каждая функция требует поддержки библиотеки openssl для воспроизведения кода.
uint8_t md[SHA512_DIGEST_LENGTH] = {0};
uint8_t a[] = "a";
uint8_t b[] = "b";
uint8_t x[] = "x";
uint8_t d[] = "d";
void concat_1(uint8_t *md, uint8_t *a, uint8_t *b, uint8_t *x)
{
SHA512_CTX c;
SHA512_Init(&c);
SHA512_Update(&c, a, strlen((char*)a);
SHA512_Update(&c, b, strlen((char*)b);
SHA512_Update(&c, x, strlen((char*)x);
SHA512_Final(md, &c);
}
void concat_2(uint8_t *md, uint8_t *a, uint8_t *b, uint8_t *x, uint8_t *d)
{
SHA512_CTX c;
SHA512_Init(&c);
SHA512_Update(&c, a, strlen((char*)a);
SHA512_Update(&c, b, strlen((char*)b);
SHA512_Update(&c, x, strlen((char*)x));
SHA512_Update(&c, d, strlen((char*)d));
SHA512_Final(md, &c);
}