blob: 3584ed12405db6509e726d147ef98675096e485c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#+options: toc:nil
#+begin_export html
---
layout: default
title: On peut maintenant hacher des données avec GnuTLS + Guile !
excerpt: La cryptographie, c’est compliqué. En Guile Scheme, ça l’est encore plus ! Heureusement, on peut utiliser GnuTLS en Guile.
---
#+end_export
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.
[[file:../../../code/images/twinky.jpg]]
Aujourd’hui, je vous informe que l’humain a agrémenté le code de
gnutls/guile [[https://gitlab.com/gnutls/guile/-/merge_requests/5][avec les fonctions de hachage]][fn::Notez que depuis
l’écriture de cet article, la nouvelle version 3.7.12 a été publiée
avec ces changements.]. Ou devrais-je dire, les fonctions de
chachage ? À vous de juger. Le programme [[exemple-hash]] montre ce qu’on
peut faire avec ! Sympa, non ?
#+name: exemple-hash
#+caption: Exemple d’utilisation de la fonction de hachage
#+begin_src scheme :eval no
(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)))
#+end_src
#+begin_src shell :eval yes :exports results :results output drawer :noweb yes
guile -s <(cat <<EOF
<<exemple-hash>>
EOF
)
#+end_src
|