summaryrefslogtreecommitdiff
path: root/srtp/crypto/macSkein.h
blob: 71c2ad96c2fd9b14ccfae334a15de9e41e8896c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
  Copyright (C) 2010 Werner Dittmann

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/


#ifndef MAC_SKEIN_H
#define MAC_SKEIN_H

#include <crypto/skeinApi.h>
/**
 * @file macSkein.h
 * @brief Function that provide Skein MAC support
 * 
 *
 * Functions to compute Skein MAC.
 *
 * @ingroup GNU_ZRTP
 * @{
 */

/**
 * Compute Skein MAC.
 *
 * This functions takes one data chunk and computes its Skein MAC.
 *
 * @param key
 *    The MAC key.
 * @param key_length
 *    Lneght of the MAC key in bytes
 * @param data
 *    Points to the data chunk.
 * @param data_length
 *    Length of the data in bytes
 * @param mac
 *    Points to a buffer that receives the computed digest.
 * @param mac_length
 *    Integer that contains the length of the MAC in bits (not bytes).
 * @param skeinSize
 *    The Skein size to use.
 */
void macSkein( uint8_t* key, int32_t key_length,
                const uint8_t* data, uint32_t data_length,
                uint8_t* mac, int32_t mac_length, SkeinSize_t skeinSize );

/**
 * Compute Skein MAC over several data cunks.
 *
 * This functions takes several data chunk and computes the Skein MAC.
 *
 * @param key
 *    The MAC key.
 * @param key_length
 *    Lneght of the MAC key in bytes
 * @param data
 *    Points to an array of pointers that point to the data chunks. A NULL
 *    pointer in an array element terminates the data chunks.
 * @param data_length
 *    Points to an array of integers that hold the length of each data chunk.
 * @param mac
 *    Points to a buffer that receives the computed digest.
 * @param mac_length
 *    Integer that contains the length of the MAC in bits (not bytes).
 * @param skeinSize
 *    The Skein size to use.
 */
void macSkein( uint8_t* key, int32_t key_length,
                const uint8_t* data[], uint32_t data_length[],
                uint8_t* mac, int32_t mac_length, SkeinSize_t skeinSize);

/**
 * Create and initialize a Skein MAC context.
 *
 * An application uses this context to hash several data with on Skein MAC
 * Context with the same key, key length and mac length
 *
 * @param key
 *    The MAC key.
 * @param key_length
 *    Lenght of the MAC key in bytes
 * @param mac_length
 *    Integer that contains the length of the MAC in bits (not bytes).
 * @param skeinSize
 *    The Skein size to use.
 * @return Returns a pointer to the initialized context
 */
void* createSkeinMacContext(uint8_t* key, int32_t key_length, 
                            int32_t mac_length, SkeinSize_t skeinSize);

/**
 * Compute Skein MAC.
 *
 * This functions takes one data chunk and computes its Skein MAC.
 *
 * @param ctx
 *     Pointer to initialized Skein MAC context
 * @param data
 *    Points to the data chunk.
 * @param data_length
 *    Length of the data in bytes
 * @param mac
 *    Points to a buffer that receives the computed digest.
 */

void macSkeinCtx(void* ctx, const uint8_t* data, uint32_t data_length,
                uint8_t* mac);

/**
 * Compute Skein MAC over several data cunks.
 *
 * This functions takes several data chunk and computes the SHA1 HAMAC.
 *
 * @param ctx 
 *     Pointer to initialized Skein MAC context
 * @param data
 *    Points to an array of pointers that point to the data chunks. A NULL
 *    pointer in an array element terminates the data chunks.
 * @param data_length
 *    Points to an array of integers that hold the length of each data chunk.
 * @param mac
 *    Points to a buffer that receives the computed digest.
 */
void macSkeinCtx(void* ctx, const uint8_t* data[], uint32_t data_length[],
                uint8_t* mac);

/**
 * Free Skein MAC context.
 *
 * @param ctx a pointer to Skein MAC context
 */
void freeSkeinMacContext(void* ctx);

/**
 * @}
 */
#endif