Chers amis des chats et du lisp, bonjour. Je me présente : Twinky. Je reprends ce blog afin de continuer le travail de mon prédécesseur : vous transmettre la passion des chats et du développement informatique.

twinky.jpg

Aujourd’hui, je vous informe que l’humain a agrémenté le code de gnutls/guile avec les fonctions de hachage1. Ou devrais-je dire, les fonctions de chachage ? À vous de juger. Le programme 1 montre ce qu’on peut faire avec ! Sympa, non ?

(use-modules (gnutls) (ice-9 match) (rnrs bytevectors)
             (srfi srfi-26))

(define chiffre->hex
  (cute string-ref "0123456789abcdef" <>))

(define (chiffres->hex . chiffres)
  (list->string (map chiffre->hex chiffres)))

(define (octet->hex octet)
  (call-with-values
      (cute euclidean/ octet 16)
    chiffres->hex))

(define octets->hex
  (cute map octet->hex <>))

(define (->hex octets)
  (string-join (octets->hex (bytevector->u8-list octets)) ""))

(let* ((message "Bonjour les amis des chats !")
       (condensat (hash-direct digest/sha256 (string->utf8 message))))
  (format #t "Quand je hache « ~a », j’obtiens :
#+begin_example
  ~a
#+end_example"
          message (->hex condensat)))

Quand je hache « Bonjour les amis des chats ! », j’obtiens :

37ab62b986405a49b0ac6849afb8db7fa9193814c4693bf1ff30e6803b2ed406

Footnotes:

1

Notez que depuis l’écriture de cet article, la nouvelle version 3.7.12 a été publiée avec ces changements.