guix-devel
[Top][All Lists]
Advanced

[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?




reply via email to

[Prev in Thread] Current Thread [Next in Thread]