changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/ffi/blake3/pkg.lisp

changeset 687: c2f4e7ee921b
parent: ebe3315b7add
author: Richard Westhaver <ellis@rwest.io>
date: Mon, 30 Sep 2024 22:27:12 -0400
permissions: -rw-r--r--
description: ffi
1 ;;; blake3.lisp --- low-level bindings to CBLAKE3
2 
3 ;;; Commentary:
4 
5 ;;; Code:
6 (defpackage :blake3/pkg
7  (:nicknames :blake3)
8  (:use :cl :std :sb-alien)
9  (:export
10  :load-blake3
11  :+blake3-key-len+
12  :+blake3-out-len+
13  :+blake3-block-len+
14  :+blake3-chunk-len+
15  :+blake3-max-depth+
16  :blake3-version
17  :blake3-chunk-state
18  :blake3-hasher
19  :blake3-hasher-init
20  :blake3-hasher-init-keyed
21  :blake3-hasher-init-derive-key
22  :blake3-hasher-init-derive-key-raw
23  :blake3-hasher-update
24  :blake3-hasher-finalize
25  :blake3-hasher-finalize-seek
26  :blake3-hasher-reset
27  :with-blake3-hasher))
28 
29 (in-package :blake3)
30 
31 (define-alien-loader "blake3")
32 
33 (define-alien-routine blake3-version c-string)
34 
35 (define-alien-type blake3-chunk-state
36  (struct blake3-chunk-state
37  (key (array unsigned-int 8))
38  (chunk-counter unsigned-long)
39  (buf (array (unsigned 8) 64))
40  (buf-len (unsigned 8))
41  (blocks-compressed (unsigned 8))
42  (flags (unsigned 8))))
43 
44 (define-alien-type blake3-hasher
45  (struct blake3-hasher
46  (key (array unsigned-int 8))
47  (chunk blake3-chunk-state)
48  (cv-stack-len (unsigned 8))
49  (cv-stack (array (unsigned 8) 1760))))
50 
51 (define-alien-routine blake3-hasher-init void (self (* blake3-hasher)))
52 
53 (define-alien-routine blake3-hasher-init-keyed void
54  (self (* blake3-hasher))
55  (key (array (unsigned 8) 32)))
56 
57 (define-alien-routine blake3-hasher-init-derive-key void
58  (self (* blake3-hasher))
59  (context c-string))
60 
61 (define-alien-routine blake3-hasher-init-derive-key-raw void
62  (self (* blake3-hasher))
63  (context (* t))
64  (context-len size-t))
65 
66 (define-alien-routine blake3-hasher-update void
67  (self (* blake3-hasher))
68  (input (* t))
69  (input-len size-t))
70 
71 (define-alien-routine blake3-hasher-finalize void
72  (self (* blake3-hasher))
73  (out (* (unsigned 8)))
74  (out-len size-t))
75 
76 (define-alien-routine blake3-hasher-finalize-seek void
77  (self (* blake3-hasher))
78  (seek (unsigned 64))
79  (out (* unsigned-char))
80  (out-len size-t))
81 
82 (define-alien-routine blake3-hasher-reset void (self (* blake3-hasher)))
83 
84 (defmacro with-blake3-hasher (hvar &body body)
85  `(with-alien ((,hvar blake3-hasher))
86  (blake3-hasher-init ,hvar)
87  ,@body))