Version:  2.0.40 2.2.26 2.4.37 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10

Linux/crypto/kpp.c

  1 /*
  2  * Key-agreement Protocol Primitives (KPP)
  3  *
  4  * Copyright (c) 2016, Intel Corporation
  5  * Authors: Salvatore Benedetto <salvatore.benedetto@intel.com>
  6  *
  7  * This program is free software; you can redistribute it and/or modify it
  8  * under the terms of the GNU General Public License as published by the Free
  9  * Software Foundation; either version 2 of the License, or (at your option)
 10  * any later version.
 11  *
 12  */
 13 #include <linux/errno.h>
 14 #include <linux/kernel.h>
 15 #include <linux/module.h>
 16 #include <linux/seq_file.h>
 17 #include <linux/slab.h>
 18 #include <linux/string.h>
 19 #include <linux/crypto.h>
 20 #include <crypto/algapi.h>
 21 #include <linux/cryptouser.h>
 22 #include <net/netlink.h>
 23 #include <crypto/kpp.h>
 24 #include <crypto/internal/kpp.h>
 25 #include "internal.h"
 26 
 27 #ifdef CONFIG_NET
 28 static int crypto_kpp_report(struct sk_buff *skb, struct crypto_alg *alg)
 29 {
 30         struct crypto_report_kpp rkpp;
 31 
 32         strncpy(rkpp.type, "kpp", sizeof(rkpp.type));
 33 
 34         if (nla_put(skb, CRYPTOCFGA_REPORT_KPP,
 35                     sizeof(struct crypto_report_kpp), &rkpp))
 36                 goto nla_put_failure;
 37         return 0;
 38 
 39 nla_put_failure:
 40         return -EMSGSIZE;
 41 }
 42 #else
 43 static int crypto_kpp_report(struct sk_buff *skb, struct crypto_alg *alg)
 44 {
 45         return -ENOSYS;
 46 }
 47 #endif
 48 
 49 static void crypto_kpp_show(struct seq_file *m, struct crypto_alg *alg)
 50         __attribute__ ((unused));
 51 
 52 static void crypto_kpp_show(struct seq_file *m, struct crypto_alg *alg)
 53 {
 54         seq_puts(m, "type         : kpp\n");
 55 }
 56 
 57 static void crypto_kpp_exit_tfm(struct crypto_tfm *tfm)
 58 {
 59         struct crypto_kpp *kpp = __crypto_kpp_tfm(tfm);
 60         struct kpp_alg *alg = crypto_kpp_alg(kpp);
 61 
 62         alg->exit(kpp);
 63 }
 64 
 65 static int crypto_kpp_init_tfm(struct crypto_tfm *tfm)
 66 {
 67         struct crypto_kpp *kpp = __crypto_kpp_tfm(tfm);
 68         struct kpp_alg *alg = crypto_kpp_alg(kpp);
 69 
 70         if (alg->exit)
 71                 kpp->base.exit = crypto_kpp_exit_tfm;
 72 
 73         if (alg->init)
 74                 return alg->init(kpp);
 75 
 76         return 0;
 77 }
 78 
 79 static const struct crypto_type crypto_kpp_type = {
 80         .extsize = crypto_alg_extsize,
 81         .init_tfm = crypto_kpp_init_tfm,
 82 #ifdef CONFIG_PROC_FS
 83         .show = crypto_kpp_show,
 84 #endif
 85         .report = crypto_kpp_report,
 86         .maskclear = ~CRYPTO_ALG_TYPE_MASK,
 87         .maskset = CRYPTO_ALG_TYPE_MASK,
 88         .type = CRYPTO_ALG_TYPE_KPP,
 89         .tfmsize = offsetof(struct crypto_kpp, base),
 90 };
 91 
 92 struct crypto_kpp *crypto_alloc_kpp(const char *alg_name, u32 type, u32 mask)
 93 {
 94         return crypto_alloc_tfm(alg_name, &crypto_kpp_type, type, mask);
 95 }
 96 EXPORT_SYMBOL_GPL(crypto_alloc_kpp);
 97 
 98 static void kpp_prepare_alg(struct kpp_alg *alg)
 99 {
100         struct crypto_alg *base = &alg->base;
101 
102         base->cra_type = &crypto_kpp_type;
103         base->cra_flags &= ~CRYPTO_ALG_TYPE_MASK;
104         base->cra_flags |= CRYPTO_ALG_TYPE_KPP;
105 }
106 
107 int crypto_register_kpp(struct kpp_alg *alg)
108 {
109         struct crypto_alg *base = &alg->base;
110 
111         kpp_prepare_alg(alg);
112         return crypto_register_alg(base);
113 }
114 EXPORT_SYMBOL_GPL(crypto_register_kpp);
115 
116 void crypto_unregister_kpp(struct kpp_alg *alg)
117 {
118         crypto_unregister_alg(&alg->base);
119 }
120 EXPORT_SYMBOL_GPL(crypto_unregister_kpp);
121 
122 MODULE_LICENSE("GPL");
123 MODULE_DESCRIPTION("Key-agreement Protocol Primitives");
124 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us