summaryrefslogtreecommitdiff
path: root/modules/language/python/module/binascii.scm
diff options
context:
space:
mode:
authorStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-09-03 23:53:19 +0200
committerStefan Israelsson Tampe <stefan.itampe@gmail.com>2018-09-03 23:53:19 +0200
commit8223db0b1a660ad10830e9a5a2fe71858cf52481 (patch)
tree28b1659900a411318e567914a66c7695f1966dbc /modules/language/python/module/binascii.scm
parentd75a196fe299e3661e23d6f216008ab49660edec (diff)
bytes64 copmiles and testprogram works
Diffstat (limited to 'modules/language/python/module/binascii.scm')
-rw-r--r--modules/language/python/module/binascii.scm20
1 files changed, 11 insertions, 9 deletions
diff --git a/modules/language/python/module/binascii.scm b/modules/language/python/module/binascii.scm
index bda660e..ab3dd69 100644
--- a/modules/language/python/module/binascii.scm
+++ b/modules/language/python/module/binascii.scm
@@ -138,16 +138,19 @@
(bytes (list))
(let lp ((i 0) (r '()))
(cond
+ ((>= i n)
+ (bytes (reverse r)))
+
((or (= (get1 n i) 10) (= (get1 n i) 13))
(lp (+ i 1) r))
- ((< i n)
+ (else
(let ((b1 (get1 n i))
(b2 (get1 n (+ i 1)))
- (b3 (get1 n (+ i 2)))
- (b4 (get1 n (+ i 3))))
+ (b3 (get1 n (+ i 2)))
+ (b4 (get1 n (+ i 3))))
(let ((b1 (get2 b1))
- (b2 (get2 b1)))
+ (b2 (get2 b2)))
(if (= x=x b4)
(if (= x=x b3)
(let* ((x (logior b1 (ash b2 6)))
@@ -164,9 +167,8 @@
(ch1 (logand x #xff))
(ch2 (ash (logand x #xff00) -8))
(ch3 (ash (logand x #xff0000) -16)))
- (lp (+ i 4) (cons* ch3 ch2 ch1 r)))))))
- (else
- (bytes (reverse (cons 10 r)))))))))
+ (lp (+ i 4) (cons* ch3 ch2 ch1 r))))))))))))
+
(def (b2a_base64 data (= newline #t))
(define x=x (char->integer #\=))
@@ -182,7 +184,7 @@
(define (get2 i)
(bytevector-u8-ref to64 i))
(cond
- ((= i (- n 1))
+ ((= i (- n 2))
(let* ((b1 (get i))
(b2 (get (+ i 1)))
(x (logior b1 (ash b2 8)))
@@ -192,7 +194,7 @@
(a4 x=x))
(lp (+ i 3) (cons* a4 a3 a2 a1 r))))
- ((= i (- n 2))
+ ((= i (- n 1))
(let* ((x (get i))
(a1 (get2 (logand #x3f x)))
(a2 (get2 (ash (logand #xfc0 x) -6)))