;;;; Tests of Blowfish
-(define (variable-key-test i c)
+(define (define-bf-test name procedure)
+ (if (blowfish-available?)
+ (define-test name procedure)))
+
+(define (define-variable-key-test i c)
(define k24
#u8(#xF0 #xE1 #xD2 #xC3 #xB4 #xA5 #x96 #x87
#x78 #x69 #x5A #x4B #x3C #x2D #x1E #x0F
(define p24 #u8(#xFE #xDC #xBA #x98 #x76 #x54 #x32 #x10))
(let ((k (bytevector-copy k24 0 i))
(p p24))
- (let ((bf (blowfish-set-key k))
- (buf (make-bytevector 8)))
- (blowfish-ecb p buf bf #t)
- (if (not (equal? buf c))
- (error "Test failed:" (symbol 'VARIABLE-KEY ': i ': 'ENCRYPT))))
- (let ((bf (blowfish-set-key k))
- (buf (make-bytevector 8)))
- (blowfish-ecb c buf bf #f)
- (if (not (equal? buf p))
- (error "Test failed:" (symbol 'VARIABLE-KEY ': i ': 'DECRYPT))))))
+ (define-bf-test (symbol 'VARIABLE-KEY ': i ': 'ENCRYPT)
+ (lambda ()
+ (let ((bf (blowfish-set-key k))
+ (buf (make-bytevector 8)))
+ (blowfish-ecb p buf bf #t)
+ (assert-equal buf c))))
+ (define-bf-test (symbol 'VARIABLE-KEY ': i ': 'DECRYPT)
+ (lambda ()
+ (let ((bf (blowfish-set-key k))
+ (buf (make-bytevector 8)))
+ (blowfish-ecb c buf bf #f)
+ (assert-equal buf p))))))
-(variable-key-test 1 #u8(#xF9 #xAD #x59 #x7C #x49 #xDB #x00 #x5E))
-(variable-key-test 2 #u8(#xE9 #x1D #x21 #xC1 #xD9 #x61 #xA6 #xD6))
-(variable-key-test 3 #u8(#xE9 #xC2 #xB7 #x0A #x1B #xC6 #x5C #xF3))
-(variable-key-test 4 #u8(#xBE #x1E #x63 #x94 #x08 #x64 #x0F #x05))
-(variable-key-test 5 #u8(#xB3 #x9E #x44 #x48 #x1B #xDB #x1E #x6E))
-(variable-key-test 6 #u8(#x94 #x57 #xAA #x83 #xB1 #x92 #x8C #x0D))
-(variable-key-test 7 #u8(#x8B #xB7 #x70 #x32 #xF9 #x60 #x62 #x9D))
-(variable-key-test 8 #u8(#xE8 #x7A #x24 #x4E #x2C #xC8 #x5E #x82))
-(variable-key-test 9 #u8(#x15 #x75 #x0E #x7A #x4F #x4E #xC5 #x77))
-(variable-key-test 10 #u8(#x12 #x2B #xA7 #x0B #x3A #xB6 #x4A #xE0))
-(variable-key-test 11 #u8(#x3A #x83 #x3C #x9A #xFF #xC5 #x37 #xF6))
-(variable-key-test 12 #u8(#x94 #x09 #xDA #x87 #xA9 #x0F #x6B #xF2))
-(variable-key-test 13 #u8(#x88 #x4F #x80 #x62 #x50 #x60 #xB8 #xB4))
-(variable-key-test 14 #u8(#x1F #x85 #x03 #x1C #x19 #xE1 #x19 #x68))
-(variable-key-test 15 #u8(#x79 #xD9 #x37 #x3A #x71 #x4C #xA3 #x4F))
-(variable-key-test 16 #u8(#x93 #x14 #x28 #x87 #xEE #x3B #xE1 #x5C))
-(variable-key-test 17 #u8(#x03 #x42 #x9E #x83 #x8C #xE2 #xD1 #x4B))
-(variable-key-test 18 #u8(#xA4 #x29 #x9E #x27 #x46 #x9F #xF6 #x7B))
-(variable-key-test 19 #u8(#xAF #xD5 #xAE #xD1 #xC1 #xBC #x96 #xA8))
-(variable-key-test 20 #u8(#x10 #x85 #x1C #x0E #x38 #x58 #xDA #x9F))
-(variable-key-test 21 #u8(#xE6 #xF5 #x1E #xD7 #x9B #x9D #xB2 #x1F))
-(variable-key-test 22 #u8(#x64 #xA6 #xE1 #x4A #xFD #x36 #xB4 #x6F))
-(variable-key-test 23 #u8(#x80 #xC7 #xD7 #xD4 #x5A #x54 #x79 #xAD))
-(variable-key-test 24 #u8(#x05 #x04 #x4B #x62 #xFA #x52 #xD0 #x80))
+(define-variable-key-test 1 #u8(#xF9 #xAD #x59 #x7C #x49 #xDB #x00 #x5E))
+(define-variable-key-test 2 #u8(#xE9 #x1D #x21 #xC1 #xD9 #x61 #xA6 #xD6))
+(define-variable-key-test 3 #u8(#xE9 #xC2 #xB7 #x0A #x1B #xC6 #x5C #xF3))
+(define-variable-key-test 4 #u8(#xBE #x1E #x63 #x94 #x08 #x64 #x0F #x05))
+(define-variable-key-test 5 #u8(#xB3 #x9E #x44 #x48 #x1B #xDB #x1E #x6E))
+(define-variable-key-test 6 #u8(#x94 #x57 #xAA #x83 #xB1 #x92 #x8C #x0D))
+(define-variable-key-test 7 #u8(#x8B #xB7 #x70 #x32 #xF9 #x60 #x62 #x9D))
+(define-variable-key-test 8 #u8(#xE8 #x7A #x24 #x4E #x2C #xC8 #x5E #x82))
+(define-variable-key-test 9 #u8(#x15 #x75 #x0E #x7A #x4F #x4E #xC5 #x77))
+(define-variable-key-test 10 #u8(#x12 #x2B #xA7 #x0B #x3A #xB6 #x4A #xE0))
+(define-variable-key-test 11 #u8(#x3A #x83 #x3C #x9A #xFF #xC5 #x37 #xF6))
+(define-variable-key-test 12 #u8(#x94 #x09 #xDA #x87 #xA9 #x0F #x6B #xF2))
+(define-variable-key-test 13 #u8(#x88 #x4F #x80 #x62 #x50 #x60 #xB8 #xB4))
+(define-variable-key-test 14 #u8(#x1F #x85 #x03 #x1C #x19 #xE1 #x19 #x68))
+(define-variable-key-test 15 #u8(#x79 #xD9 #x37 #x3A #x71 #x4C #xA3 #x4F))
+(define-variable-key-test 16 #u8(#x93 #x14 #x28 #x87 #xEE #x3B #xE1 #x5C))
+(define-variable-key-test 17 #u8(#x03 #x42 #x9E #x83 #x8C #xE2 #xD1 #x4B))
+(define-variable-key-test 18 #u8(#xA4 #x29 #x9E #x27 #x46 #x9F #xF6 #x7B))
+(define-variable-key-test 19 #u8(#xAF #xD5 #xAE #xD1 #xC1 #xBC #x96 #xA8))
+(define-variable-key-test 20 #u8(#x10 #x85 #x1C #x0E #x38 #x58 #xDA #x9F))
+(define-variable-key-test 21 #u8(#xE6 #xF5 #x1E #xD7 #x9B #x9D #xB2 #x1F))
+(define-variable-key-test 22 #u8(#x64 #xA6 #xE1 #x4A #xFD #x36 #xB4 #x6F))
+(define-variable-key-test 23 #u8(#x80 #xC7 #xD7 #xD4 #x5A #x54 #x79 #xAD))
+(define-variable-key-test 24 #u8(#x05 #x04 #x4B #x62 #xFA #x52 #xD0 #x80))
((lambda (ks ps cs)
((lambda (doit) (for-each doit (iota (length ks)) ks ps cs))
(lambda (i k p c)
- (let ((bf (blowfish-set-key k))
- (buf (make-bytevector 8)))
- (blowfish-ecb p buf bf #t)
- (if (not (equal? buf c))
- (error "Test failed:" (symbol 'ENCRYPT ': i))))
- (let ((bf (blowfish-set-key k))
- (buf (make-bytevector 8)))
- (blowfish-ecb c buf bf #f)
- (if (not (equal? buf p))
- (error "Test failed:" (symbol 'DECRYPT ': i)))))))
-
+ (define-bf-test (symbol 'ENCRYPT ': i)
+ (lambda ()
+ (let ((bf (blowfish-set-key k))
+ (buf (make-bytevector 8)))
+ (blowfish-ecb p buf bf #t)
+ (assert-equal buf c))))
+ (define-bf-test (symbol 'DECRYPT ': i)
+ (lambda ()
+ (let ((bf (blowfish-set-key k))
+ (buf (make-bytevector 8)))
+ (blowfish-ecb c buf bf #f)
+ (assert-equal buf p)))))))
'(#u8(#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00)
#u8(#xFF #xFF #xFF #xFF #xFF #xFF #xFF #xFF)
#u8(#x30 #x00 #x00 #x00 #x00 #x00 #x00 #x00)
#u8(#x24 #x59 #x46 #x88 #x57 #x54 #x36 #x9A)
#u8(#x6B #x5C #x5A #x9C #x5D #x9E #x0A #x5A)))
-(define (cbc-test i c)
+(define (define-cbc-test i c)
(define k #u8(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))
(define iv #u8(7 6 5 4 3 2 1 0))
(define p #u8(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23))
(let ((p (bytevector-copy p 0 i)))
- (let ((bf (blowfish-set-key k))
- (iv (bytevector-copy iv))
- (buf (make-bytevector i)))
- (blowfish-cbc p buf bf iv #t)
- (if (not (and (equal? buf c)
- (equal? iv (bytevector-copy buf (- i 8) i))))
- (error "Test failed:" (symbol 'CBC:ENCRYPT ': i))))
- (let ((bf (blowfish-set-key k))
- (iv (bytevector-copy iv))
- (buf (make-bytevector i)))
- (blowfish-cbc c buf bf iv #f)
- (if (not (and (equal? buf p)
- (equal? iv (bytevector-copy c (- i 8) i))))
- (error "Test failed:" (symbol 'CBC:DECRYPT ': i))))))
+ (define-bf-test (symbol 'CBC:ENCRYPT ': i)
+ (lambda ()
+ (let ((bf (blowfish-set-key k))
+ (iv (bytevector-copy iv))
+ (buf (make-bytevector i)))
+ (blowfish-cbc p buf bf iv #t)
+ (assert-equal buf c)
+ (assert-equal iv (bytevector-copy buf (- i 8) i)))))
+ (define-bf-test (symbol 'CBC:DECRYPT ': i)
+ (lambda ()
+ (let ((bf (blowfish-set-key k))
+ (iv (bytevector-copy iv))
+ (buf (make-bytevector i)))
+ (blowfish-cbc c buf bf iv #f)
+ (assert-equal buf p)
+ (assert-equal iv (bytevector-copy c (- i 8) i)))))))
-(cbc-test 8
+(define-cbc-test 8
#u8(#x90 #x6a #xb9 #x17 #xb0 #x9f #xcd #x3a))
-(cbc-test 16
+(define-cbc-test 16
#u8(#x90 #x6a #xb9 #x17 #xb0 #x9f #xcd #x3a
#x2b #x41 #x4d #x69 #xbb #xa0 #xc0 #xdf))
-(cbc-test 24
+(define-cbc-test 24
#u8(#x90 #x6a #xb9 #x17 #xb0 #x9f #xcd #x3a
#x2b #x41 #x4d #x69 #xbb #xa0 #xc0 #xdf
- #xed #x69 #x9e #xca #x55 #x13 #xc2 #x7e))
\ No newline at end of file
+ #xed #x69 #x9e #xca #x55 #x13 #xc2 #x7e))