;; sha2-native.scm -- SHA-2 digest algorithms native interface
;; Copyright (c) 2015 Alexei Lozovsky.  All rights reserved.
;; BSD-style license: http://synthcode.com/license.txt

(define (procees-sha-data! context src)
  (cond ((or (bytevector? src) (string? src))
         (add-sha-data! context src))
        ((input-port? src)
         (let lp ((chunk (read-bytevector 1024 src)))
           (unless (eof-object? chunk)
             (add-sha-data! context chunk)
             (lp (read-bytevector 1024 src)))))
        (else
         (error "unknown digest source: " src))))

(define (sha-224 src)
  (let ((context (start-sha type-sha-224)))
    (procees-sha-data! context src)
    (get-sha context)))

(define (sha-256 src)
  (let ((context (start-sha type-sha-256)))
    (procees-sha-data! context src)
    (get-sha context)))