Remove unnecessary JWK functions
This commit is contained in:
parent
ffd84f5039
commit
50ea658fc9
3 changed files with 20 additions and 78 deletions
|
@ -5,20 +5,15 @@ import (
|
||||||
"crypto/elliptic"
|
"crypto/elliptic"
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"math/big"
|
"math/big"
|
||||||
)
|
)
|
||||||
|
|
||||||
type JWK struct {
|
type JWK struct {
|
||||||
Kty string `json:"kty"`
|
KeyType string `json:"kty"`
|
||||||
Crv string `json:"crv"`
|
Curve string `json:"crv"`
|
||||||
D string `json:"d"`
|
D string `json:"d"`
|
||||||
X string `json:"x"`
|
X string `json:"x"`
|
||||||
Y string `json:"y"`
|
Y string `json:"y"`
|
||||||
Ext bool `json:"ext"`
|
|
||||||
KeyOps []string `json:"key_ops"`
|
|
||||||
PrivateBytes []byte `json:"private_bytes,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *JWK) GetPrivateKey() (*ecdsa.PrivateKey, error) {
|
func (t *JWK) GetPrivateKey() (*ecdsa.PrivateKey, error) {
|
||||||
|
@ -47,34 +42,7 @@ func (t *JWK) GetPrivateKey() (*ecdsa.PrivateKey, error) {
|
||||||
return priv, nil
|
return priv, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a byte slice containing the JWK and an error if the generation or export failed.
|
func (t *JWK) GetPublicKey() (*ecdsa.PublicKey, error) {
|
||||||
func (t *JWK) Marshal() ([]byte, error) {
|
|
||||||
JWKJSON, err := json.Marshal(t)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Printf("Failed to marshal JWK: %v", err)
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
fmt.Printf("%s\n", JWKJSON)
|
|
||||||
return JWKJSON, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *JWK) PrivKeyB64Bytes() ([]byte, error) {
|
|
||||||
decodedPrivateKey, err2 := base64.RawURLEncoding.DecodeString(t.D)
|
|
||||||
return decodedPrivateKey, err2
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *JWK) ExtractPublicKeyDetails(pubKey []byte) *JWK {
|
|
||||||
x := base64.RawURLEncoding.EncodeToString(pubKey[1:33])
|
|
||||||
y := base64.RawURLEncoding.EncodeToString(pubKey[33:])
|
|
||||||
return &JWK{
|
|
||||||
Kty: "EC",
|
|
||||||
Crv: "P-256",
|
|
||||||
X: x,
|
|
||||||
Y: y,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *JWK) DecompressPubkey() (*ecdsa.PublicKey, error) {
|
|
||||||
xBytes, err := base64.RawURLEncoding.DecodeString(t.X)
|
xBytes, err := base64.RawURLEncoding.DecodeString(t.X)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -94,46 +62,25 @@ func (t *JWK) DecompressPubkey() (*ecdsa.PublicKey, error) {
|
||||||
return pubKey, nil
|
return pubKey, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *JWK) UncompressPubKey() ([]byte, error) {
|
func (t *JWK) MarshalPubKey() ([]byte, error) {
|
||||||
xBytes, err := base64.RawURLEncoding.DecodeString(t.X)
|
pubKey, err := t.GetPublicKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
yBytes, err := base64.RawURLEncoding.DecodeString(t.Y)
|
return elliptic.Marshal(pubKey.Curve, pubKey.X, pubKey.Y), nil
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
x := new(big.Int).SetBytes(xBytes)
|
|
||||||
y := new(big.Int).SetBytes(yBytes)
|
|
||||||
|
|
||||||
pubKey := &ecdsa.PublicKey{
|
|
||||||
Curve: elliptic.P256(),
|
|
||||||
X: x,
|
|
||||||
Y: y,
|
|
||||||
}
|
|
||||||
|
|
||||||
uncompressedPubKey := elliptic.Marshal(pubKey.Curve, pubKey.X, pubKey.Y)
|
|
||||||
|
|
||||||
return uncompressedPubKey, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GenerateECDSA_P256_JWK generates a new ECDSA private key with P-256 curve
|
// GenerateECDSAKey generates a new ECDSA private key with P-256 curve
|
||||||
func GenerateECDSA_P256_JWK() (*JWK, error) {
|
func GenerateECDSAKey() (*JWK, error) {
|
||||||
privKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
|
privKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("Failed to generate private key: %v", err)
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
return &JWK{
|
||||||
JWK := &JWK{
|
KeyType: "EC",
|
||||||
Kty: "EC",
|
Curve: "P-256",
|
||||||
Crv: "P-256",
|
D: base64.RawURLEncoding.EncodeToString(privKey.D.Bytes()),
|
||||||
D: base64.RawURLEncoding.EncodeToString(privKey.D.Bytes()),
|
X: base64.RawURLEncoding.EncodeToString(privKey.X.Bytes()),
|
||||||
X: base64.RawURLEncoding.EncodeToString(privKey.X.Bytes()),
|
Y: base64.RawURLEncoding.EncodeToString(privKey.Y.Bytes()),
|
||||||
Y: base64.RawURLEncoding.EncodeToString(privKey.Y.Bytes()),
|
}, nil
|
||||||
Ext: true,
|
|
||||||
KeyOps: []string{"sign"},
|
|
||||||
}
|
|
||||||
return JWK, nil
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ refreshQrCodeTime is the interval to refresh the qr code in seconds, this is usu
|
||||||
func (c *Client) NewPairer(keyData *crypto.JWK, refreshQrCodeTime int) (*Pairer, error) {
|
func (c *Client) NewPairer(keyData *crypto.JWK, refreshQrCodeTime int) (*Pairer, error) {
|
||||||
if keyData == nil {
|
if keyData == nil {
|
||||||
var err error
|
var err error
|
||||||
keyData, err = crypto.GenerateECDSA_P256_JWK()
|
keyData, err = crypto.GenerateECDSAKey()
|
||||||
c.updateJWK(keyData)
|
c.updateJWK(keyData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Logger.Error().Any("data", keyData).Msg(err.Error())
|
c.Logger.Error().Any("data", keyData).Msg(err.Error())
|
||||||
|
|
|
@ -38,12 +38,7 @@ func RegisterPhoneRelay(jwk *crypto.JWK) ([]byte, *binary.AuthenticationContaine
|
||||||
}
|
}
|
||||||
|
|
||||||
func uncompressKey(jwk *crypto.JWK) ([]byte, error) {
|
func uncompressKey(jwk *crypto.JWK) ([]byte, error) {
|
||||||
decodedPrivateKey, err2 := jwk.PrivKeyB64Bytes()
|
uncompressedPublicKey, err3 := jwk.MarshalPubKey()
|
||||||
if err2 != nil {
|
|
||||||
return nil, err2
|
|
||||||
}
|
|
||||||
jwk.PrivateBytes = decodedPrivateKey
|
|
||||||
uncompressedPublicKey, err3 := jwk.UncompressPubKey()
|
|
||||||
if err3 != nil {
|
if err3 != nil {
|
||||||
return nil, err3
|
return nil, err3
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue