FFmpeg  4.0
hash.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2013 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include <stdio.h>
22 #include <string.h>
23 
24 #include "libavutil/hash.h"
25 
26 #define SRC_BUF_SIZE 64
27 #define DST_BUF_SIZE (AV_HASH_MAX_SIZE * 8)
28 
29 int main(void)
30 {
31  struct AVHashContext *ctx = NULL;
32  int i, j, numhashes = 0;
33  static const uint8_t src[SRC_BUF_SIZE] = { 0 };
34  uint8_t dst[DST_BUF_SIZE];
35 
36  while (av_hash_names(numhashes))
37  numhashes++;
38 
39  for (i = 0; i < numhashes; i++) {
40  if (av_hash_alloc(&ctx, av_hash_names(i)) < 0)
41  return 1;
42 
43  av_hash_init(ctx);
44  av_hash_update(ctx, src, SRC_BUF_SIZE);
45  memset(dst, 0, DST_BUF_SIZE);
47  printf("%s hex: %s\n", av_hash_get_name(ctx), dst);
48 
49  av_hash_init(ctx);
50  av_hash_update(ctx, src, SRC_BUF_SIZE);
52  printf("%s bin: ", av_hash_get_name(ctx));
53  for (j = 0; j < av_hash_get_size(ctx); j++) {
54  printf("%#x ", dst[j]);
55  }
56  printf("\n");
57 
58  av_hash_init(ctx);
59  av_hash_update(ctx, src, SRC_BUF_SIZE);
61  printf("%s b64: %s\n", av_hash_get_name(ctx), dst);
62  av_hash_freep(&ctx);
63  }
64  return 0;
65 }
#define NULL
Definition: coverity.c:32
void av_hash_final_b64(struct AVHashContext *ctx, uint8_t *dst, int size)
Finalize a hash context and store the Base64 representation of the actual hash value as a string...
Definition: hash.c:225
#define src
Definition: vp8dsp.c:254
uint8_t
Generic hashing API.
int main(void)
Definition: hash.c:29
void av_hash_init(AVHashContext *ctx)
Initialize or reset a hash context.
Definition: hash.c:137
void av_hash_final_bin(struct AVHashContext *ctx, uint8_t *dst, int size)
Finalize a hash context and store the actual hash value in a buffer.
Definition: hash.c:204
int av_hash_alloc(AVHashContext **ctx, const char *name)
Allocate a hash context for the algorithm specified by name.
Definition: hash.c:100
const char * av_hash_names(int i)
Get the names of available hash algorithms.
Definition: hash.c:84
AVFormatContext * ctx
Definition: movenc.c:48
const char * av_hash_get_name(const AVHashContext *ctx)
Definition: hash.c:90
int av_hash_get_size(const AVHashContext *ctx)
Definition: hash.c:95
void av_hash_update(AVHashContext *ctx, const uint8_t *src, int len)
Update a hash context with additional data.
Definition: hash.c:159
void av_hash_freep(AVHashContext **ctx)
Free hash context and set hash context pointer to NULL.
Definition: hash.c:238
void av_hash_final_hex(struct AVHashContext *ctx, uint8_t *dst, int size)
Finalize a hash context and store the hexadecimal representation of the actual hash value as a string...
Definition: hash.c:215
#define DST_BUF_SIZE
Definition: hash.c:27
#define SRC_BUF_SIZE
Definition: hash.c:26