chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-users] How to load modules for compilation


From: Sascha Ziemann
Subject: [Chicken-users] How to load modules for compilation
Date: Mon, 6 Oct 2014 15:44:38 +0200

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?

Regards,
Sascha


reply via email to

[Prev in Thread] Current Thread [Next in Thread]