implement bindings for sign and lock
This commit is contained in:
parent
05736756ec
commit
9bc5eece92
|
@ -16,9 +16,9 @@
|
||||||
;; You should have received a copy of the GNU Affero General Public License
|
;; You should have received a copy of the GNU Affero General Public License
|
||||||
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(require ffi/vector ffi/unsafe racket/random
|
(require ffi/vector ffi/unsafe racket/bool racket/random
|
||||||
"static-support.rkt"
|
"static-support.rkt"
|
||||||
(for-syntax racket/base racket/string racket/syntax)
|
(for-syntax racket/base racket/string)
|
||||||
(only-in racket/contract provide/contract)
|
(only-in racket/contract provide/contract)
|
||||||
;; MATTHIAS
|
;; MATTHIAS
|
||||||
;; WHY
|
;; WHY
|
||||||
|
@ -43,6 +43,65 @@
|
||||||
stx (string-replace (symbol->string (syntax->datum #'name)) "-" "_"))])
|
stx (string-replace (symbol->string (syntax->datum #'name)) "-" "_"))])
|
||||||
#'(define name (get-ffi-obj/runtime c-name monocypher type)))]))
|
#'(define name (get-ffi-obj/runtime c-name monocypher type)))]))
|
||||||
|
|
||||||
|
;; public key signatures
|
||||||
|
|
||||||
(define/ffi crypto-sign-public-key
|
(define/ffi crypto-sign-public-key
|
||||||
(_fun (pubkey : (_u8vector o 32)) (seckey : _u8vector) -> _void -> pubkey))
|
(_fun (pubkey : (_u8vector o 32)) (seckey : _u8vector) -> _void -> pubkey))
|
||||||
(provide/contract [crypto-sign-public-key (contract:-> (bytes-len/c 32) (bytes-len/c 32))])
|
(provide/contract [crypto-sign-public-key (contract:-> (bytes-len/c 32) (bytes-len/c 32))])
|
||||||
|
|
||||||
|
(define/ffi crypto-sign
|
||||||
|
(_fun (signature : (_u8vector o 64)) (seckey : _u8vector) (pubkey : _u8vector)
|
||||||
|
(message : _u8vector) (msgsize : _size = (u8vector-length message))
|
||||||
|
-> _void -> signature))
|
||||||
|
(provide/contract [crypto-sign (contract:-> (bytes-len/c 32) (bytes-len/c 32) bytes?
|
||||||
|
(bytes-len/c 64))])
|
||||||
|
|
||||||
|
(define/ffi crypto-check
|
||||||
|
(_fun (signature : _u8vector) (pubkey : _u8vector) (message : _u8vector)
|
||||||
|
(msgsize : _size = (u8vector-length message))
|
||||||
|
-> (result : _int) -> (zero? result)))
|
||||||
|
(provide/contract [crypto-check (contract:-> (bytes-len/c 64) (bytes-len/c 32) bytes? boolean?)])
|
||||||
|
|
||||||
|
(define (crypto-sign-make-key)
|
||||||
|
(crypto-random-bytes 32))
|
||||||
|
(provide crypto-sign-make-key)
|
||||||
|
|
||||||
|
;; key exchange
|
||||||
|
|
||||||
|
;; XXX : in monocypher crypto_key_exchange_public_key is actually crypto_x25519_public_key
|
||||||
|
(define/ffi crypto-x25519-public-key
|
||||||
|
(_fun (pubkey : (_u8vector o 32)) (seckey : _u8vector) -> _void -> pubkey))
|
||||||
|
(define crypto-key-exchange-public-key crypto-x25519-public-key)
|
||||||
|
(provide/contract [crypto-key-exchange-public-key (contract:-> (bytes-len/c 32) (bytes-len/c 32))])
|
||||||
|
|
||||||
|
(define/ffi crypto-key-exchange
|
||||||
|
(_fun (outkey : (_u8vector o 32)) (yourseckey : _u8vector) (theirpubkey : _u8vector)
|
||||||
|
-> _void -> outkey))
|
||||||
|
(provide/contract [crypto-key-exchange (contract:-> (bytes-len/c 32) (bytes-len/c 32)
|
||||||
|
(bytes-len/c 32))])
|
||||||
|
|
||||||
|
(define (crypto-key-exchange-make-key)
|
||||||
|
(crypto-random-bytes 32))
|
||||||
|
(provide crypto-key-exchange-make-key)
|
||||||
|
|
||||||
|
;; authenticated encryption
|
||||||
|
|
||||||
|
(define/ffi crypto-lock
|
||||||
|
(_fun (mac : (_u8vector o 16)) (ct : (_u8vector o textsize)) (key : _u8vector) (nonce : _u8vector)
|
||||||
|
(pt : _u8vector) (textsize : _size = (u8vector-length pt))
|
||||||
|
-> _void -> (values ct mac)))
|
||||||
|
(provide/contract [crypto-lock (contract:-> (bytes-len/c 32) (bytes-len/c 24) bytes?
|
||||||
|
(values bytes? (bytes-len/c 16)))])
|
||||||
|
|
||||||
|
(define/ffi crypto-unlock
|
||||||
|
(_fun (pt : (_u8vector o textsize)) (key : _u8vector) (nonce : _u8vector) (mac : _u8vector)
|
||||||
|
(ct : _u8vector) (textsize : _size = (u8vector-length ct))
|
||||||
|
-> (res : _int) -> (if (zero? res) pt #f)))
|
||||||
|
(provide/contract [crypto-unlock (contract:-> (bytes-len/c 32) (bytes-len/c 24) (bytes-len/c 16)
|
||||||
|
bytes? (or/c false? bytes?))])
|
||||||
|
|
||||||
|
(define (crypto-lock-make-key)
|
||||||
|
(crypto-random-bytes 32))
|
||||||
|
(define (crypto-lock-make-nonce)
|
||||||
|
(crypto-random-bytes 24))
|
||||||
|
(provide crypto-lock-make-key crypto-lock-make-nonce)
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
;; You should have received a copy of the GNU Affero General Public License
|
;; You should have received a copy of the GNU Affero General Public License
|
||||||
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
(require ffi/unsafe racket/bool racket/string)
|
(require ffi/unsafe racket/bool)
|
||||||
(provide get-ffi-obj/static static-ffi-available?
|
(provide get-ffi-obj/static static-ffi-available?
|
||||||
ffi-lib/runtime get-ffi-obj/runtime)
|
ffi-lib/runtime get-ffi-obj/runtime)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue