Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6148 serge 1
/*
2
 * Blowfish algorithm
3
 * Copyright (c) 2012 Samuel Pitoiset
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2.1 of the License, or (at your option) any later version.
11
 *
12
 * FFmpeg is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with FFmpeg; if not, write to the Free Software
19
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
 */
21
 
22
#ifndef AVUTIL_BLOWFISH_H
23
#define AVUTIL_BLOWFISH_H
24
 
25
#include 
26
 
27
/**
28
 * @defgroup lavu_blowfish Blowfish
29
 * @ingroup lavu_crypto
30
 * @{
31
 */
32
 
33
#define AV_BF_ROUNDS 16
34
 
35
typedef struct AVBlowfish {
36
    uint32_t p[AV_BF_ROUNDS + 2];
37
    uint32_t s[4][256];
38
} AVBlowfish;
39
 
40
/**
41
 * Initialize an AVBlowfish context.
42
 *
43
 * @param ctx an AVBlowfish context
44
 * @param key a key
45
 * @param key_len length of the key
46
 */
47
void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len);
48
 
49
/**
50
 * Encrypt or decrypt a buffer using a previously initialized context.
51
 *
52
 * @param ctx an AVBlowfish context
53
 * @param xl left four bytes halves of input to be encrypted
54
 * @param xr right four bytes halves of input to be encrypted
55
 * @param decrypt 0 for encryption, 1 for decryption
56
 */
57
void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr,
58
                           int decrypt);
59
 
60
/**
61
 * Encrypt or decrypt a buffer using a previously initialized context.
62
 *
63
 * @param ctx an AVBlowfish context
64
 * @param dst destination array, can be equal to src
65
 * @param src source array, can be equal to dst
66
 * @param count number of 8 byte blocks
67
 * @param iv initialization vector for CBC mode, if NULL ECB will be used
68
 * @param decrypt 0 for encryption, 1 for decryption
69
 */
70
void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src,
71
                       int count, uint8_t *iv, int decrypt);
72
 
73
/**
74
 * @}
75
 */
76
 
77
#endif /* AVUTIL_BLOWFISH_H */