821 } |
821 } |
822 |
822 |
823 static size_t dav_read_h(void *buf, size_t size, size_t nelm, void *stream) { |
823 static size_t dav_read_h(void *buf, size_t size, size_t nelm, void *stream) { |
824 HashStream *s = stream; |
824 HashStream *s = stream; |
825 if(!s->sha) { |
825 if(!s->sha) { |
826 s->sha = dav_hash_init(); |
826 s->sha = dav_sha256_create(); |
827 } |
827 } |
828 |
828 |
829 size_t r = s->read(buf, size, nelm, s->stream); |
829 size_t r = s->read(buf, size, nelm, s->stream); |
830 dav_hash_update(s->sha, buf, r); |
830 dav_sha256_update(s->sha, buf, r); |
831 return r; |
831 return r; |
832 } |
832 } |
833 |
833 |
834 static int dav_seek_h(void *stream, long offset, int whence) { |
834 static int dav_seek_h(void *stream, long offset, int whence) { |
835 HashStream *s = stream; |
835 HashStream *s = stream; |
836 if(offset == 0 && whence == SEEK_SET) { |
836 if(offset == 0 && whence == SEEK_SET) { |
837 unsigned char buf[DAV_SHA256_DIGEST_LENGTH]; |
837 unsigned char buf[DAV_SHA256_DIGEST_LENGTH]; |
838 dav_hash_final(s->sha, buf); |
838 dav_sha256_final(s->sha, buf); |
839 s->sha = NULL; |
839 s->sha = NULL; |
840 } else { |
840 } else { |
841 s->error = 1; |
841 s->error = 1; |
842 } |
842 } |
843 return s->seek(s->stream, offset, whence); |
843 return s->seek(s->stream, offset, whence); |
936 dav_read_h, |
936 dav_read_h, |
937 (dav_seek_func)dav_seek_h, |
937 (dav_seek_func)dav_seek_h, |
938 data->length); |
938 data->length); |
939 |
939 |
940 if(hstr.sha) { |
940 if(hstr.sha) { |
941 dav_hash_final(hstr.sha, (unsigned char*)data->hash); |
941 dav_sha256_final(hstr.sha, (unsigned char*)data->hash); |
942 char *hash = util_hexstr((unsigned char*)data->hash, 32); |
942 char *hash = util_hexstr((unsigned char*)data->hash, 32); |
943 dav_set_string_property_ns(res, DAV_NS, "content-hash", hash); |
943 dav_set_string_property_ns(res, DAV_NS, "content-hash", hash); |
944 free(hash); |
944 free(hash); |
945 } |
945 } |
946 } else { |
946 } else { |