void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len){ AVMD5 ctx[1]; av_md5_init(ctx); av_md5_update(ctx, src, len); av_md5_final(ctx, dst); }
void av_md5_sum(uint8_t *dst, const uint8_t *src, size_t len) #endif { AVMD5 ctx; av_md5_init(&ctx); av_md5_update(&ctx, src, len); av_md5_final(&ctx, dst); }
static int write_header(struct AVFormatContext *s) { if (PRIVSIZE < av_md5_size) { av_log(s, AV_LOG_ERROR, "Insuffient size for md5 context\n"); return -1; } av_md5_init(s->priv_data); return 0; }
static int write_header(struct AVFormatContext *s) { struct MD5Context *c = s->priv_data; c->md5 = av_md5_alloc(); if (!c->md5) return AVERROR(ENOMEM); av_md5_init(c->md5); return 0; }
static int framemd5_write_packet(struct AVFormatContext *s, AVPacket *pkt) { struct MD5Context *c = s->priv_data; char buf[256]; av_md5_init(c->md5); av_md5_update(c->md5, pkt->data, pkt->size); snprintf(buf, sizeof(buf) - 64, "%d, %10"PRId64", %10"PRId64", %8d, %8d, ", pkt->stream_index, pkt->dts, pkt->pts, pkt->duration, pkt->size); md5_finish(s, buf); return 0; }
static uint32_t draw_image(mp_image_t *mpi) { unsigned char md5sum[16]; uint32_t w = mpi->w; uint32_t h = mpi->h; uint8_t *rgbimage = mpi->planes[0]; uint8_t *planeY = mpi->planes[0]; uint8_t *planeU = mpi->planes[1]; uint8_t *planeV = mpi->planes[2]; uint32_t strideY = mpi->stride[0]; uint32_t strideU = mpi->stride[1]; uint32_t strideV = mpi->stride[2]; uint8_t md5_context_memory[av_md5_size]; struct AVMD5 *md5_context = (struct AVMD5*) md5_context_memory; unsigned int i; if (mpi->flags & MP_IMGFLAG_PLANAR) { /* Planar */ if (mpi->flags & MP_IMGFLAG_YUV) { /* Planar YUV */ av_md5_init(md5_context); for (i=0; i<h; i++) { av_md5_update(md5_context, planeY + i * strideY, w); } w = w / 2; h = h / 2; for (i=0; i<h; i++) { av_md5_update(md5_context, planeU + i * strideU, w); } for (i=0; i<h; i++) { av_md5_update(md5_context, planeV + i * strideV, w); } av_md5_final(md5_context, md5sum); md5sum_output_sum(md5sum); return VO_TRUE; } else { /* Planar RGB */ return VO_FALSE; } } else { /* Packed */ if (mpi->flags & MP_IMGFLAG_YUV) { /* Packed YUV */ return VO_FALSE; } else { /* Packed RGB */ av_md5_sum(md5sum, rgbimage, mpi->w * (mpi->bpp >> 3) * mpi->h); md5sum_output_sum(md5sum); return VO_TRUE; } } return VO_FALSE; }
static int md5_open(URLContext *h, const char *filename, int flags) { struct MD5Context *c = h->priv_data; if (!(flags & AVIO_FLAG_WRITE)) return AVERROR(EINVAL); c->md5 = av_md5_alloc(); if (!c->md5) return AVERROR(ENOMEM); av_md5_init(c->md5); return 0; }
static int md5_open(URLContext *h, const char *filename, int flags) { if (PRIV_SIZE < av_md5_size) { av_log(NULL, AV_LOG_ERROR, "Insuffient size for MD5 context\n"); return -1; } if (flags != AVIO_WRONLY) return AVERROR(EINVAL); av_md5_init(h->priv_data); return 0; }
static void init_out(const char *name) { char buf[100]; cur_name = name; snprintf(buf, sizeof(buf), "%s.%s", cur_name, format); av_md5_init(md5); if (write_file) { out = fopen(buf, "wb"); if (!out) perror(buf); } out_size = 0; }
static int framemd5_write_packet(struct AVFormatContext *s, AVPacket *pkt) { char buf[256]; if (PRIVSIZE < av_md5_size) { av_log(s, AV_LOG_ERROR, "Insuffient size for md5 context\n"); return -1; } av_md5_init(s->priv_data); av_md5_update(s->priv_data, pkt->data, pkt->size); snprintf(buf, sizeof(buf) - 64, "%d, %10"PRId64", %10"PRId64", %8d, %8d, ", pkt->stream_index, pkt->dts, pkt->pts, pkt->duration, pkt->size); md5_finish(s, buf); return 0; }
/* Do something useful with the filtered data: this simple * example just prints the MD5 checksum of each plane to stdout. */ static int process_output(struct AVMD5 *md5, AVFrame *frame) { int planar = av_sample_fmt_is_planar(frame->format); int channels = av_get_channel_layout_nb_channels(frame->channel_layout); int planes = planar ? channels : 1; int bps = av_get_bytes_per_sample(frame->format); int plane_size = bps * frame->nb_samples * (planar ? 1 : channels); int i, j; for (i = 0; i < planes; i++) { uint8_t checksum[16]; av_md5_init(md5); av_md5_sum(checksum, frame->extended_data[i], plane_size); fprintf(stdout, "plane %d: 0x", i); for (j = 0; j < sizeof(checksum); j++) fprintf(stdout, "%02X", checksum[j]); fprintf(stdout, "\n"); } fprintf(stdout, "\n"); return 0; }
void AudioLoader::openAudioFile(const string& filename) { E_DEBUG(EAlgorithm, "AudioLoader: opening file: " << filename); // Open file int errnum; if ((errnum = avformat_open_input(&_demuxCtx, filename.c_str(), NULL, NULL)) != 0) { char errorstr[128]; string error = "Unknown error"; if (av_strerror(errnum, errorstr, 128) == 0) error = errorstr; throw EssentiaException("AudioLoader: Could not open file \"", filename, "\", error = ", error); } // Retrieve stream information if ((errnum = avformat_find_stream_info(_demuxCtx, NULL)) < 0) { char errorstr[128]; string error = "Unknown error"; if (av_strerror(errnum, errorstr, 128) == 0) error = errorstr; avformat_close_input(&_demuxCtx); _demuxCtx = 0; throw EssentiaException("AudioLoader: Could not find stream information, error = ", error); } // Dump information about file onto standard error //dump_format(_demuxCtx, 0, filename.c_str(), 0); // Check that we have only 1 audio stream in the file _streams.clear(); for (int i=0; i<(int)_demuxCtx->nb_streams; i++) { if (_demuxCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) { _streams.push_back(i); } } int nAudioStreams = _streams.size(); if (nAudioStreams == 0) { avformat_close_input(&_demuxCtx); _demuxCtx = 0; throw EssentiaException("AudioLoader ERROR: found 0 streams in the file, expecting one or more audio streams"); } if (_selectedStream >= nAudioStreams) { avformat_close_input(&_demuxCtx); _demuxCtx = 0; throw EssentiaException("AudioLoader ERROR: 'audioStream' parameter set to ", _selectedStream ,". It should be smaller than the audio streams count, ", nAudioStreams); } _streamIdx = _streams[_selectedStream]; // Load corresponding audio codec _audioCtx = _demuxCtx->streams[_streamIdx]->codec; _audioCodec = avcodec_find_decoder(_audioCtx->codec_id); if (!_audioCodec) { throw EssentiaException("AudioLoader: Unsupported codec!"); } if (avcodec_open2(_audioCtx, _audioCodec, NULL) < 0) { throw EssentiaException("AudioLoader: Unable to instantiate codec..."); } // Configure format convertion (no samplerate conversion yet) int64_t layout = av_get_default_channel_layout(_audioCtx->channels); /* const char* fmt = 0; get_format_from_sample_fmt(&fmt, _audioCtx->sample_fmt); E_DEBUG(EAlgorithm, "AudioLoader: converting from " << (fmt ? fmt : "unknown") << " to FLT"); */ E_DEBUG(EAlgorithm, "AudioLoader: using sample format conversion from libavresample"); _convertCtxAv = avresample_alloc_context(); av_opt_set_int(_convertCtxAv, "in_channel_layout", layout, 0); av_opt_set_int(_convertCtxAv, "out_channel_layout", layout, 0); av_opt_set_int(_convertCtxAv, "in_sample_rate", _audioCtx->sample_rate, 0); av_opt_set_int(_convertCtxAv, "out_sample_rate", _audioCtx->sample_rate, 0); av_opt_set_int(_convertCtxAv, "in_sample_fmt", _audioCtx->sample_fmt, 0); av_opt_set_int(_convertCtxAv, "out_sample_fmt", AV_SAMPLE_FMT_FLT, 0); if (avresample_open(_convertCtxAv) < 0) { throw EssentiaException("AudioLoader: Could not initialize avresample context"); } av_init_packet(&_packet); _decodedFrame = av_frame_alloc(); if (!_decodedFrame) { throw EssentiaException("AudioLoader: Could not allocate audio frame"); } av_md5_init(_md5Encoded); }
/* Generate a digest reply, according to RFC 2617. */ static char *make_digest_auth(HTTPAuthState *state, const char *username, const char *password, const char *uri, const char *method) { DigestParams *digest = &state->digest_params; int len; uint32_t cnonce_buf[2]; char cnonce[17]; char nc[9]; int i; char A1hash[33], A2hash[33], response[33]; struct AVMD5 *md5ctx; uint8_t hash[16]; char *authstr; digest->nc++; snprintf(nc, sizeof(nc), "%08x", digest->nc); /* Generate a client nonce. */ for (i = 0; i < 2; i++) cnonce_buf[i] = av_get_random_seed(); ff_data_to_hex(cnonce, (const uint8_t*) cnonce_buf, sizeof(cnonce_buf), 1); cnonce[2*sizeof(cnonce_buf)] = 0; md5ctx = av_md5_alloc(); if (!md5ctx) return NULL; av_md5_init(md5ctx); update_md5_strings(md5ctx, username, ":", state->realm, ":", password, NULL); av_md5_final(md5ctx, hash); ff_data_to_hex(A1hash, hash, 16, 1); A1hash[32] = 0; if (!strcmp(digest->algorithm, "") || !strcmp(digest->algorithm, "MD5")) { } else if (!strcmp(digest->algorithm, "MD5-sess")) { av_md5_init(md5ctx); update_md5_strings(md5ctx, A1hash, ":", digest->nonce, ":", cnonce, NULL); av_md5_final(md5ctx, hash); ff_data_to_hex(A1hash, hash, 16, 1); A1hash[32] = 0; } else { /* Unsupported algorithm */ av_free(md5ctx); return NULL; } av_md5_init(md5ctx); update_md5_strings(md5ctx, method, ":", uri, NULL); av_md5_final(md5ctx, hash); ff_data_to_hex(A2hash, hash, 16, 1); A2hash[32] = 0; av_md5_init(md5ctx); update_md5_strings(md5ctx, A1hash, ":", digest->nonce, NULL); if (!strcmp(digest->qop, "auth") || !strcmp(digest->qop, "auth-int")) { update_md5_strings(md5ctx, ":", nc, ":", cnonce, ":", digest->qop, NULL); } update_md5_strings(md5ctx, ":", A2hash, NULL); av_md5_final(md5ctx, hash); ff_data_to_hex(response, hash, 16, 1); response[32] = 0; av_free(md5ctx); if (!strcmp(digest->qop, "") || !strcmp(digest->qop, "auth")) { } else if (!strcmp(digest->qop, "auth-int")) { /* qop=auth-int not supported */ return NULL; } else { /* Unsupported qop value. */ return NULL; } len = strlen(username) + strlen(state->realm) + strlen(digest->nonce) + strlen(uri) + strlen(response) + strlen(digest->algorithm) + strlen(digest->opaque) + strlen(digest->qop) + strlen(cnonce) + strlen(nc) + 150; authstr = av_malloc(len); if (!authstr) return NULL; snprintf(authstr, len, "Authorization: Digest "); /* TODO: Escape the quoted strings properly. */ av_strlcatf(authstr, len, "username=\"%s\"", username); av_strlcatf(authstr, len, ", realm=\"%s\"", state->realm); av_strlcatf(authstr, len, ", nonce=\"%s\"", digest->nonce); av_strlcatf(authstr, len, ", uri=\"%s\"", uri); av_strlcatf(authstr, len, ", response=\"%s\"", response); if (digest->algorithm[0]) av_strlcatf(authstr, len, ", algorithm=%s", digest->algorithm); if (digest->opaque[0]) av_strlcatf(authstr, len, ", opaque=\"%s\"", digest->opaque); if (digest->qop[0]) { av_strlcatf(authstr, len, ", qop=\"%s\"", digest->qop); av_strlcatf(authstr, len, ", cnonce=\"%s\"", cnonce); av_strlcatf(authstr, len, ", nc=%s", nc); } av_strlcatf(authstr, len, "\r\n"); return authstr; }