auth.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /* SCTP kernel implementation
  2. * (C) Copyright 2007 Hewlett-Packard Development Company, L.P.
  3. *
  4. * This file is part of the SCTP kernel implementation
  5. *
  6. * This SCTP implementation is free software;
  7. * you can redistribute it and/or modify it under the terms of
  8. * the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2, or (at your option)
  10. * any later version.
  11. *
  12. * This SCTP implementation is distributed in the hope that it
  13. * will be useful, but WITHOUT ANY WARRANTY; without even the implied
  14. * ************************
  15. * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  16. * See the GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with GNU CC; see the file COPYING. If not, write to
  20. * the Free Software Foundation, 59 Temple Place - Suite 330,
  21. * Boston, MA 02111-1307, USA.
  22. *
  23. * Please send any bug reports or fixes you make to the
  24. * email address(es):
  25. * lksctp developers <lksctp-developers@lists.sourceforge.net>
  26. *
  27. * Or submit a bug report through the following website:
  28. * http://www.sf.net/projects/lksctp
  29. *
  30. * Written or modified by:
  31. * Vlad Yasevich <vladislav.yasevich@hp.com>
  32. *
  33. * Any bugs reported given to us we will try to fix... any fixes shared will
  34. * be incorporated into the next SCTP release.
  35. */
  36. #ifndef __sctp_auth_h__
  37. #define __sctp_auth_h__
  38. #include <linux/list.h>
  39. #include <linux/crypto.h>
  40. struct sctp_endpoint;
  41. struct sctp_association;
  42. struct sctp_authkey;
  43. struct sctp_hmacalgo;
  44. /*
  45. * Define a generic struct that will hold all the info
  46. * necessary for an HMAC transform
  47. */
  48. struct sctp_hmac {
  49. __u16 hmac_id; /* one of the above ids */
  50. char *hmac_name; /* name for loading */
  51. __u16 hmac_len; /* length of the signature */
  52. };
  53. /* This is generic structure that containst authentication bytes used
  54. * as keying material. It's a what is referred to as byte-vector all
  55. * over SCTP-AUTH
  56. */
  57. struct sctp_auth_bytes {
  58. atomic_t refcnt;
  59. __u32 len;
  60. __u8 data[];
  61. };
  62. /* Definition for a shared key, weather endpoint or association */
  63. struct sctp_shared_key {
  64. struct list_head key_list;
  65. __u16 key_id;
  66. struct sctp_auth_bytes *key;
  67. };
  68. #define key_for_each(__key, __list_head) \
  69. list_for_each_entry(__key, __list_head, key_list)
  70. #define key_for_each_safe(__key, __tmp, __list_head) \
  71. list_for_each_entry_safe(__key, __tmp, __list_head, key_list)
  72. static inline void sctp_auth_key_hold(struct sctp_auth_bytes *key)
  73. {
  74. if (!key)
  75. return;
  76. atomic_inc(&key->refcnt);
  77. }
  78. void sctp_auth_key_put(struct sctp_auth_bytes *key);
  79. struct sctp_shared_key *sctp_auth_shkey_create(__u16 key_id, gfp_t gfp);
  80. void sctp_auth_destroy_keys(struct list_head *keys);
  81. int sctp_auth_asoc_init_active_key(struct sctp_association *asoc, gfp_t gfp);
  82. struct sctp_shared_key *sctp_auth_get_shkey(
  83. const struct sctp_association *asoc,
  84. __u16 key_id);
  85. int sctp_auth_asoc_copy_shkeys(const struct sctp_endpoint *ep,
  86. struct sctp_association *asoc,
  87. gfp_t gfp);
  88. int sctp_auth_init_hmacs(struct sctp_endpoint *ep, gfp_t gfp);
  89. void sctp_auth_destroy_hmacs(struct crypto_hash *auth_hmacs[]);
  90. struct sctp_hmac *sctp_auth_get_hmac(__u16 hmac_id);
  91. struct sctp_hmac *sctp_auth_asoc_get_hmac(const struct sctp_association *asoc);
  92. void sctp_auth_asoc_set_default_hmac(struct sctp_association *asoc,
  93. struct sctp_hmac_algo_param *hmacs);
  94. int sctp_auth_asoc_verify_hmac_id(const struct sctp_association *asoc,
  95. __be16 hmac_id);
  96. int sctp_auth_send_cid(sctp_cid_t chunk, const struct sctp_association *asoc);
  97. int sctp_auth_recv_cid(sctp_cid_t chunk, const struct sctp_association *asoc);
  98. void sctp_auth_calculate_hmac(const struct sctp_association *asoc,
  99. struct sk_buff *skb,
  100. struct sctp_auth_chunk *auth, gfp_t gfp);
  101. /* API Helpers */
  102. int sctp_auth_ep_add_chunkid(struct sctp_endpoint *ep, __u8 chunk_id);
  103. int sctp_auth_ep_set_hmacs(struct sctp_endpoint *ep,
  104. struct sctp_hmacalgo *hmacs);
  105. int sctp_auth_set_key(struct sctp_endpoint *ep,
  106. struct sctp_association *asoc,
  107. struct sctp_authkey *auth_key);
  108. int sctp_auth_set_active_key(struct sctp_endpoint *ep,
  109. struct sctp_association *asoc,
  110. __u16 key_id);
  111. int sctp_auth_del_key_id(struct sctp_endpoint *ep,
  112. struct sctp_association *asoc,
  113. __u16 key_id);
  114. #endif