#include <crypto/hash.h>
#include <crypto/if_alg.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/module.h>
#include <linux/net.h>
#include <net/sock.h>
struct hash_ctx { … };
static int hash_alloc_result(struct sock *sk, struct hash_ctx *ctx)
{ … }
static void hash_free_result(struct sock *sk, struct hash_ctx *ctx)
{ … }
static int hash_sendmsg(struct socket *sock, struct msghdr *msg,
size_t ignored)
{ … }
static int hash_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
int flags)
{ … }
static int hash_accept(struct socket *sock, struct socket *newsock,
struct proto_accept_arg *arg)
{ … }
static struct proto_ops algif_hash_ops = …;
static int hash_check_key(struct socket *sock)
{ … }
static int hash_sendmsg_nokey(struct socket *sock, struct msghdr *msg,
size_t size)
{ … }
static int hash_recvmsg_nokey(struct socket *sock, struct msghdr *msg,
size_t ignored, int flags)
{ … }
static int hash_accept_nokey(struct socket *sock, struct socket *newsock,
struct proto_accept_arg *arg)
{ … }
static struct proto_ops algif_hash_ops_nokey = …;
static void *hash_bind(const char *name, u32 type, u32 mask)
{ … }
static void hash_release(void *private)
{ … }
static int hash_setkey(void *private, const u8 *key, unsigned int keylen)
{ … }
static void hash_sock_destruct(struct sock *sk)
{ … }
static int hash_accept_parent_nokey(void *private, struct sock *sk)
{ … }
static int hash_accept_parent(void *private, struct sock *sk)
{ … }
static const struct af_alg_type algif_type_hash = …;
static int __init algif_hash_init(void)
{ … }
static void __exit algif_hash_exit(void)
{ … }
module_init(…) …;
module_exit(algif_hash_exit);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;