/* Copyright (C) 2000 artofcode LLC. All rights reserved. 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA, 02111-1307. */ /*$Id: smd5.c,v 1.3.6.1.2.1 2003/01/17 00:49:05 giles Exp $ */ /* MD5Encode filter */ #include "memory_.h" #include "strimpl.h" #include "smd5.h" /* ------ MD5Encode ------ */ private_st_MD5E_state(); /* Initialize the state. */ private int s_MD5E_init(stream_state * st) { stream_MD5E_state *const ss = (stream_MD5E_state *) st; md5_init(&ss->md5); return 0; } /* Process a buffer. */ private int s_MD5E_process(stream_state * st, stream_cursor_read * pr, stream_cursor_write * pw, bool last) { stream_MD5E_state *const ss = (stream_MD5E_state *) st; int status = 0; if (pr->ptr < pr->limit) { md5_append(&ss->md5, pr->ptr + 1, pr->limit - pr->ptr); pr->ptr = pr->limit; } if (last) { if (pw->limit - pw->ptr >= 16) { md5_finish(&ss->md5, pw->ptr + 1); pw->ptr += 16; status = EOFC; } else status = 1; } return status; } /* Stream template */ const stream_template s_MD5E_template = { &st_MD5E_state, s_MD5E_init, s_MD5E_process, 1, 16 };