Hi,
I have a simple program using the blowfish egg in a macro to do some obscurity:
(require-extension blowfish)
(define-syntax curtain
(ir-macro-transformer
(lambda (form inject compare?)
(let* ((str (cadr form))
(len (string-length str))
(pad (make-string (- 8 (modulo len 8)) #\space))
(key (with-input-from-file "/dev/urandom"
(lambda ()
(read-string 56))))
(hidden (blob->string ((make-blowfish-encryptor (string->blob key))
(string->blob (string-append str pad))))))
`(lambda ()
(substring (blob->string ((make-blowfish-decryptor (string->blob ,key))
(string->blob ,hidden)))
0 ,len))))))
(define (main . args)
(display ((curtain "top-secret")))
(newline))
When I run it with csi it works fine:
$ csi -ss curtain.scm
top-secret
But when I try to compile it I get an error:
$ csc -R blowfish -ss curtain.scm
Error: during expansion of (curtain ...) - unbound variable: blowfish#make-blowfish-encryptor
Call history:
<syntax> (##core#lambda args (display ((curtain "top-secret"))) (newline))
<syntax> (##core#begin (display ((curtain "top-secret"))) (newline))
<syntax> (display ((curtain "top-secret")))
<syntax> ((curtain "top-secret"))
<syntax> (##core#let ((g33 (curtain "top-secret"))) (g33))
<syntax> (curtain "top-secret")
<eval> (cadr form)
<eval> (string-length str)
<eval> (make-string (- 8 (modulo len 8)) #\space)
<eval> (- 8 (modulo len 8))
<eval> (modulo len 8)
<eval> (with-input-from-file "/dev/urandom" (lambda () (read-string 56)))
<eval> (read-string 56)
<eval> (blob->string ((make-blowfish-encryptor (string->blob key)) (string->blob (string-append str pad))))
<eval> ((make-blowfish-encryptor (string->blob key)) (string->blob (string-append str pad)))
<eval> (make-blowfish-encryptor (string->blob key)) <--
Error: shell command terminated with non-zero exit status 17920: /usr/bin/chicken curtain.scm -output-file curtain.c -dynamic -feature chicken-compile-shared -feature chicken-compile-shared -require-extension blowfish
I am wondering why the blowfish function is unbound although I have specified the module. Can anybody give me a hint what I did wrong?