package jwk import ( "crypto/rsa" "encoding/base64" "errors" "math/big" "git.daebt.dev/golang/auth/algo" "git.daebt.dev/golang/auth/algo/rs" ) type TokenRSA struct { *Header E string `json:"e"` N string `json:"n"` } func (t *TokenRSA) encodeE(v int) { var ( buf = []byte{} skp = true ) for i := 56; i > -1; i -= 8 { b := byte(v >> i) if skp && b == 0 { continue } skp = false buf = append(buf, b) } t.E = base64.RawURLEncoding.EncodeToString(buf) } func (t *TokenRSA) decodeE() (int, error) { if t.E == "" { return 0, errors.New("e is empty") } buf, err := base64.RawURLEncoding.DecodeString(t.E) if err != nil { return 0, err } var ( num int l = len(buf) - 1 ) for i, b := range buf { i = (l - i) * 8 num = num | int(b)< 0 { t.Header.KeyId = base64.RawURLEncoding.EncodeToString(kid) } t.encodeE(pub.E) return t }