mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
openpgp: Use Libgcrypt's crc24 implementation.
This gives an 18% speedup on the wall-clock time of: guile -c '(use-modules (git) (guix git-authenticate)) (load-keyring-from-reference (repository-open ".") "keyring")' * guix/openpgp.scm (crc24): Rewrite by calling out to 'bytevector-hash'.
This commit is contained in:
parent
4ebbd92c29
commit
6f233040d3
1 changed files with 4 additions and 17 deletions
|
@ -1029,23 +1029,10 @@ (define* (get-openpgp-keyring port
|
|||
|
||||
(define (crc24 bv)
|
||||
"Compute a CRC24 as described in RFC4880, Section 6.1."
|
||||
(define poly #x1864cfb)
|
||||
|
||||
(let loop ((crc #xb704ce)
|
||||
(index 0))
|
||||
(if (= index (bytevector-length bv))
|
||||
(logand crc #xffffff)
|
||||
(let ((crc (logxor (ash (bytevector-u8-ref bv index) 16)
|
||||
crc)))
|
||||
(let inner ((i 0)
|
||||
(crc crc))
|
||||
(if (< i 8)
|
||||
(let ((crc (ash crc 1)))
|
||||
(inner (+ i 1)
|
||||
(if (zero? (logand crc #x1000000))
|
||||
crc
|
||||
(logxor crc poly))))
|
||||
(loop crc (+ index 1))))))))
|
||||
;; We used to have it implemented in Scheme but the C version here makes
|
||||
;; 'load-keyring-from-reference' 18% faster when loading the 72
|
||||
;; ASCII-armored files of today's Guix keyring.
|
||||
(bytevector->uint (bytevector-hash bv (hash-algorithm crc24-rfc2440))))
|
||||
|
||||
(define %begin-block-prefix "-----BEGIN ")
|
||||
(define %begin-block-suffix "-----")
|
||||
|
|
Loading…
Reference in a new issue