#include "defs.h"
-#ifdef HAVE_LINUX_CRYPTOUSER_H
-
# include "netlink.h"
# include "nlattr.h"
# include "print_fields.h"
-# include <linux/cryptouser.h>
+# if HAVE_LINUX_CRYPTOUSER_H
+# include <linux/cryptouser.h>
+# endif
# include "xlat/crypto_nl_attrs.h"
+# define XLAT_MACROS_ONLY
+# include "xlat/crypto_msgs.h"
+# undef XLAT_MACROS_ONLY
+
+
+# ifndef CRYPTO_MAX_NAME
+# define CRYPTO_MAX_NAME 64
+# endif
+
+typedef struct {
+ char cru_name[CRYPTO_MAX_NAME];
+ char cru_driver_name[CRYPTO_MAX_NAME];
+ char cru_module_name[CRYPTO_MAX_NAME];
+ uint32_t cru_type;
+ uint32_t cru_mask;
+ uint32_t cru_refcnt;
+ uint32_t cru_flags;
+} struct_crypto_user_alg;
+
+typedef struct {
+ char type[CRYPTO_MAX_NAME];
+ uint32_t blocksize;
+ uint32_t digestsize;
+} struct_crypto_report_hash;
+
+typedef struct {
+ char type[CRYPTO_MAX_NAME];
+ uint32_t blocksize;
+ uint32_t min_keysize;
+ uint32_t max_keysize;
+} struct_crypto_report_cipher;
+
+typedef struct {
+ char type[CRYPTO_MAX_NAME];
+ char geniv[CRYPTO_MAX_NAME];
+ uint32_t blocksize;
+ uint32_t min_keysize;
+ uint32_t max_keysize;
+ uint32_t ivsize;
+} struct_crypto_report_blkcipher;
+
+typedef struct {
+ char type[CRYPTO_MAX_NAME];
+ char geniv[CRYPTO_MAX_NAME];
+ uint32_t blocksize;
+ uint32_t maxauthsize;
+ uint32_t ivsize;
+} struct_crypto_report_aead;
+
+typedef struct {
+ char type[CRYPTO_MAX_NAME];
+ uint32_t seedsize;
+} struct_crypto_report_rng;
+
+# ifdef HAVE_STRUCT_CRYPTO_USER_ALG
+static_assert(sizeof(struct_crypto_user_alg) == sizeof(struct crypto_user_alg),
+ "struct crypto_user_alg mismatch, please update the decoder");
+# endif
+# ifdef HAVE_STRUCT_CRYPTO_REPORT_HASH
+static_assert(sizeof(struct_crypto_report_hash)
+ == sizeof(struct crypto_report_hash),
+ "struct crypto_report_hash mismatch, please update the decoder");
+# endif
+# ifdef HAVE_STRUCT_CRYPTO_REPORT_CIPHER
+static_assert(sizeof(struct_crypto_report_cipher)
+ == sizeof(struct crypto_report_cipher),
+ "struct crypto_report_cipher mismatch, please update the decoder");
+# endif
+# ifdef HAVE_STRUCT_CRYPTO_REPORT_BLKCIPHER
+static_assert(sizeof(struct_crypto_report_blkcipher)
+ == sizeof(struct crypto_report_blkcipher),
+ "struct crypto_report_blkcipher mismatch, please update the decoder");
+# endif
+# ifdef HAVE_STRUCT_CRYPTO_REPORT_AEAD
+static_assert(sizeof(struct_crypto_report_aead)
+ == sizeof(struct crypto_report_aead),
+ "struct crypto_report_aead mismatch, please update the decoder");
+# endif
+# ifdef HAVE_STRUCT_CRYPTO_REPORT_RNG
+static_assert(sizeof(struct_crypto_report_rng)
+ == sizeof(struct crypto_report_rng),
+ "struct crypto_report_rng mismatch, please update the decoder");
+# endif
+
+
static bool
decode_crypto_report_generic(struct tcb *const tcp,
const kernel_ulong_t addr,
const unsigned int len,
const void *const opaque_data)
{
-# ifdef HAVE_STRUCT_CRYPTO_REPORT_HASH
- struct crypto_report_hash rhash;
+ struct_crypto_report_hash rhash;
if (len < sizeof(rhash))
printstrn(tcp, addr, len);
PRINT_FIELD_U(", ", rhash, digestsize);
tprints("}");
}
-# else
- printstrn(tcp, addr, len);
-# endif
return true;
}
const unsigned int len,
const void *const opaque_data)
{
-# ifdef HAVE_STRUCT_CRYPTO_REPORT_BLKCIPHER
- struct crypto_report_blkcipher rblkcipher;
+ struct_crypto_report_blkcipher rblkcipher;
if (len < sizeof(rblkcipher))
printstrn(tcp, addr, len);
PRINT_FIELD_U(", ", rblkcipher, ivsize);
tprints("}");
}
-# else
- printstrn(tcp, addr, len);
-# endif
return true;
}
const unsigned int len,
const void *const opaque_data)
{
-# ifdef HAVE_STRUCT_CRYPTO_REPORT_AEAD
- struct crypto_report_aead raead;
+ struct_crypto_report_aead raead;
if (len < sizeof(raead))
printstrn(tcp, addr, len);
PRINT_FIELD_U(", ", raead, ivsize);
tprints("}");
}
-# else
- printstrn(tcp, addr, len);
-# endif
return true;
}
const unsigned int len,
const void *const opaque_data)
{
-# ifdef HAVE_STRUCT_CRYPTO_REPORT_RNG
- struct crypto_report_rng rrng;
+ struct_crypto_report_rng rrng;
if (len < sizeof(rrng))
printstrn(tcp, addr, len);
PRINT_FIELD_U(", ", rrng, seedsize);
tprints("}");
}
-# else
- printstrn(tcp, addr, len);
-# endif
return true;
}
const unsigned int len,
const void *const opaque_data)
{
-# ifdef HAVE_STRUCT_CRYPTO_REPORT_CIPHER
- struct crypto_report_cipher rcipher;
+ struct_crypto_report_cipher rcipher;
if (len < sizeof(rcipher))
printstrn(tcp, addr, len);
PRINT_FIELD_U(", ", rcipher, max_keysize);
tprints("}");
}
-# else
- printstrn(tcp, addr, len);
-# endif
return true;
}
const kernel_ulong_t addr,
const unsigned int len)
{
- struct crypto_user_alg alg;
+ struct_crypto_user_alg alg;
if (len < sizeof(alg))
printstrn(tcp, addr, len);
return true;
}
-
-#endif /* HAVE_LINUX_CRYPTOUSER_H */