sig-auth.git

git clone https://git.crispbyte.dev/sig-auth.git

sig-auth.git / keydirectory
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}