Initial QSfera import

This commit is contained in:
Курнат Андрей
2026-06-07 10:20:04 +03:00
commit 2315f25754
16485 changed files with 4826827 additions and 0 deletions
+15
View File
@@ -0,0 +1,15 @@
load("@rules_go//go:def.bzl", "go_library")
go_library(
name = "ecdsa",
srcs = ["ecdsa.go"],
importpath = "github.com/lestrrat-go/jwx/v3/jwk/ecdsa",
visibility = ["//visibility:public"],
deps = ["//jwa"],
)
alias(
name = "go_default_library",
actual = ":ecdsa",
visibility = ["//visibility:public"],
)
+76
View File
@@ -0,0 +1,76 @@
package ecdsa
import (
"crypto/elliptic"
"fmt"
"sync"
"github.com/lestrrat-go/jwx/v3/jwa"
)
var muCurves sync.RWMutex
var algToCurveMap map[jwa.EllipticCurveAlgorithm]elliptic.Curve
var curveToAlgMap map[elliptic.Curve]jwa.EllipticCurveAlgorithm
var algList []jwa.EllipticCurveAlgorithm
func init() {
muCurves.Lock()
algToCurveMap = make(map[jwa.EllipticCurveAlgorithm]elliptic.Curve)
curveToAlgMap = make(map[elliptic.Curve]jwa.EllipticCurveAlgorithm)
muCurves.Unlock()
}
// RegisterCurve registers a jwa.EllipticCurveAlgorithm constant and its
// corresponding elliptic.Curve object. Users do not need to call this unless
// they are registering a new ECDSA key type
func RegisterCurve(alg jwa.EllipticCurveAlgorithm, crv elliptic.Curve) {
muCurves.Lock()
defer muCurves.Unlock()
algToCurveMap[alg] = crv
curveToAlgMap[crv] = alg
rebuildCurves()
}
func rebuildCurves() {
l := len(algToCurveMap)
if cap(algList) < l {
algList = make([]jwa.EllipticCurveAlgorithm, 0, l)
} else {
algList = algList[:0]
}
for alg := range algToCurveMap {
algList = append(algList, alg)
}
}
// Algorithms returns the list of registered jwa.EllipticCurveAlgorithms
// that ca be used for ECDSA keys.
func Algorithms() []jwa.EllipticCurveAlgorithm {
muCurves.RLock()
defer muCurves.RUnlock()
return algList
}
func AlgorithmFromCurve(crv elliptic.Curve) (jwa.EllipticCurveAlgorithm, error) {
alg, ok := curveToAlgMap[crv]
if !ok {
return jwa.InvalidEllipticCurve(), fmt.Errorf(`unknown elliptic curve: %q`, crv)
}
return alg, nil
}
func CurveFromAlgorithm(alg jwa.EllipticCurveAlgorithm) (elliptic.Curve, error) {
crv, ok := algToCurveMap[alg]
if !ok {
return nil, fmt.Errorf(`unknown elliptic curve algorithm: %q`, alg)
}
return crv, nil
}
func IsCurveAvailable(alg jwa.EllipticCurveAlgorithm) bool {
_, ok := algToCurveMap[alg]
return ok
}