Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wine-mirror
GitHub Repository: wine-mirror/wine
Path: blob/master/libs/tomcrypt/src/mac/xcbc/xcbc_memory.c
5972 views
1
/* LibTomCrypt, modular cryptographic library -- Tom St Denis
2
*
3
* LibTomCrypt is a library that provides various cryptographic
4
* algorithms in a highly modular and flexible manner.
5
*
6
* The library is free for all purposes without any express
7
* guarantee it works.
8
*/
9
#include "tomcrypt.h"
10
11
/**
12
@file xcbc_process.c
13
XCBC Support, XCBC-MAC a block of memory
14
*/
15
16
#ifdef LTC_XCBC
17
18
/** XCBC-MAC a block of memory
19
@param cipher Index of cipher to use
20
@param key [in] Secret key
21
@param keylen Length of key in octets
22
@param in [in] Message to MAC
23
@param inlen Length of input in octets
24
@param out [out] Destination for the MAC tag
25
@param outlen [in/out] Output size and final tag size
26
Return CRYPT_OK on success.
27
*/
28
int xcbc_memory(int cipher,
29
const unsigned char *key, unsigned long keylen,
30
const unsigned char *in, unsigned long inlen,
31
unsigned char *out, unsigned long *outlen)
32
{
33
xcbc_state *xcbc;
34
int err;
35
36
/* is the cipher valid? */
37
if ((err = cipher_is_valid(cipher)) != CRYPT_OK) {
38
return err;
39
}
40
41
/* Use accelerator if found */
42
if (cipher_descriptor[cipher].xcbc_memory != NULL) {
43
return cipher_descriptor[cipher].xcbc_memory(key, keylen, in, inlen, out, outlen);
44
}
45
46
xcbc = XCALLOC(1, sizeof(*xcbc));
47
if (xcbc == NULL) {
48
return CRYPT_MEM;
49
}
50
51
if ((err = xcbc_init(xcbc, cipher, key, keylen)) != CRYPT_OK) {
52
goto done;
53
}
54
55
if ((err = xcbc_process(xcbc, in, inlen)) != CRYPT_OK) {
56
goto done;
57
}
58
59
err = xcbc_done(xcbc, out, outlen);
60
done:
61
XFREE(xcbc);
62
return err;
63
}
64
65
#endif
66
67