[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Using G-Expressions for public keys (substitutes and possibly more)
From: |
Liliana Marie Prikler |
Subject: |
Re: Using G-Expressions for public keys (substitutes and possibly more) |
Date: |
Sun, 21 Nov 2021 09:28:44 +0100 |
User-agent: |
Evolution 3.34.2 |
Hi,
Am Sonntag, den 21.11.2021, 01:12 +0100 schrieb Jelle Licht:
> What about something such as the following?
>
> --8<---------------cut here---------------start------------->8---
> (use-modules (gcrypt base16)
> (gcrypt pk-crypto))
>
> (define-record-type <canonical-sexp-wrapper>
> (canonical-sexp-wrapper name sexp)
> canonical-sexp-wrapper?
> (name canonical-sexp-wrapper-name)
> (sexp canonical-sexp-wrapper-sexp))
>
> (define-gexp-compiler (canonical-sexp-wrapper-compiler
> (wrapper <canonical-sexp-wrapper>) system
> target)
> (match wrapper
> (($ <canonical-sexp-wrapper> name sexp)
> (text-file name (canonical-sexp->string
> (sexp->canonical-sexp sexp)) '()))))
> --8<---------------cut here---------------end--------------->8---
>
> This would still leave constructing your s-expression as an exercise
> to the reader, which is definitely not amazing. In this specific
> instance, I had to look at the output of canonical-sexp->sexp, which
> is of course whatever the opposite of discoverable and good UX :).
Apart from the name "-wrapper" instead of "-file", I think this would
be acceptable. I think we ought to handle two cases here, though: one
with sexp being a sexp, and one with it being a canonical sexp.
> For the Ed25519 key:
> --8<---------------cut here---------------start------------->8---
> (define my-public-key
> (canonical-sexp-wrapper
> "my-key.pub"
> `(public-key
> (ecc
> (curve Ed25519)
> (q ,(base16-string->bytevector
> (string-downcase
> "C9F307AE...")))))))
> --8<---------------cut here---------------end--------------->8---
>
> To improve on this, is one sexp-based-gexp-compiler + N helper
> functions to construct the most-used value types a direction worth
> exploring?
I think we would probably want to improve on this end in the guile-
gcrypt module, i.e. have a public-key "constructor" that returns a
canonical-sexp and so on. WDYT?