cheddar
·
2025-02-21
keyentry.go
1package keydirectory
2
3import (
4 "crypto"
5 "crypto/ecdsa"
6 "crypto/ed25519"
7 "crypto/rsa"
8 "fmt"
9 "reflect"
10
11 "github.com/common-fate/httpsig/alg_ecdsa"
12 "github.com/common-fate/httpsig/alg_ed25519"
13 "github.com/common-fate/httpsig/alg_rsa"
14 "github.com/common-fate/httpsig/verifier"
15)
16
17type keyEntry struct {
18 PublicKey crypto.PublicKey
19 UserId string
20}
21
22func (k keyEntry) toAlg() (verifier.Algorithm, error) {
23 var alg verifier.Algorithm
24 var err error
25
26 switch k.PublicKey.(type) {
27 case ed25519.PublicKey:
28 alg = alg_ed25519.Ed25519{
29 PublicKey: k.PublicKey.(ed25519.PublicKey),
30 Attrs: k.UserId,
31 }
32 case *rsa.PublicKey:
33 alg = alg_rsa.RSAPKCS256{
34 PublicKey: k.PublicKey.(*rsa.PublicKey),
35 Attrs: k.UserId,
36 }
37 case *ecdsa.PublicKey:
38 alg = alg_ecdsa.P256{
39 PublicKey: k.PublicKey.(*ecdsa.PublicKey),
40 Attrs: k.UserId,
41 }
42 default:
43 err = fmt.Errorf("unknown key type: %s", reflect.TypeOf(k.PublicKey))
44 }
45
46 return alg, err
47}