gnutls_cipher_init Error on armv7 architecture but not on amd64
Nicolas Mora <[email protected]> Tue, 21 Sep 2021 12:02:10 -0400
| Newsgroups | gmane.network.gnutls.general |
|---|---|
| Message-ID | <[email protected]> |
Hello, I'm seeing a different behavior between two architectures when using gnutls_cipher_init with incorrect key size. If I use gnutls_cipher_init with the gnutls_cipher_algorithm_t GNUTLS_CIPHER_AES_128_GCM and a key of 24 bits, I have a different result value if I execute the same code on an AMD64 or an ARMV7 architecture. On a AMD64 CPU, using the attached sample program, I have the following output: $ gcc -o gnutls-cipher-init gnutls-cipher-init.c -lgnutls && ./gnutls-cipher-init gnutls_cipher_init OK On an ARMV7 CPU (Odroid C2 or Raspberry Pi), gnutls_cipher_init returns an error: $ gcc -o gnutls-cipher-init gnutls-cipher-init.c -lgnutls && ./gnutls-cipher-init gnutls_cipher_init Error: The request is invalid. Is it a bug? If so, which architecture has the correct answer? /Nicolas _______________________________________________ Gnutls-help mailing list [email protected] http://lists.gnupg.org/mailman/listinfo/gnutls-help
gnutls-cipher-init.c
(text/x-csrc, 824 B)
#include <stdio.h>
#include <gnutls/gnutls.h>
#include <gnutls/crypto.h>
#include <gnutls/abstract.h>
#include <gnutls/x509.h>
int main(void) {
gnutls_datum_t key, iv;
gnutls_cipher_hd_t handle = NULL;
unsigned char key_data[] = {0xcb, 0xfc, 0x7c, 0x78, 0x15, 0x27, 0x99, 0xaf, 0xc8, 0x82, 0xa1, 0x44, 0xa2, 0xb2, 0x1a, 0x27, 0x00, 0xac, 0x09, 0xd9, 0xe1, 0x43, 0x1d, 0x59},
iv_data[] = {0x74, 0x98, 0x05, 0x8f, 0xf1, 0x02, 0x03, 0x17, 0x33, 0x49, 0x70, 0x78};
int res;
key.data = key_data;
key.size = sizeof(key_data);
iv.data = iv_data;
iv.size = sizeof(iv_data);
res = gnutls_cipher_init(&handle, GNUTLS_CIPHER_AES_128_GCM, &key, &iv);
if (res < 0) {
printf("gnutls_cipher_init Error: %s\n", gnutls_strerror(res));
} else {
printf("gnutls_cipher_init OK\n");
}
}