aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/golang-jwt/jwt/v5/ecdsa_utils.go
diff options
context:
space:
mode:
authorLibravatar Rutger Broekhoff2023-12-30 14:00:34 +0100
committerLibravatar Rutger Broekhoff2023-12-30 14:00:34 +0100
commitf6c92c5e2d87ab1334648b0d1293771de7aae4a5 (patch)
tree265c3a06accd398a1e0a173af56d7392a5f94a24 /vendor/github.com/golang-jwt/jwt/v5/ecdsa_utils.go
parent4f167c0fa991aa9ddb3f0252e23694b3aa6532b1 (diff)
downloadgitolfs3-f6c92c5e2d87ab1334648b0d1293771de7aae4a5.tar.gz
gitolfs3-f6c92c5e2d87ab1334648b0d1293771de7aae4a5.zip
Implement git-lfs-authenticate
Diffstat (limited to 'vendor/github.com/golang-jwt/jwt/v5/ecdsa_utils.go')
-rw-r--r--vendor/github.com/golang-jwt/jwt/v5/ecdsa_utils.go69
1 files changed, 69 insertions, 0 deletions
diff --git a/vendor/github.com/golang-jwt/jwt/v5/ecdsa_utils.go b/vendor/github.com/golang-jwt/jwt/v5/ecdsa_utils.go
new file mode 100644
index 0000000..5700636
--- /dev/null
+++ b/vendor/github.com/golang-jwt/jwt/v5/ecdsa_utils.go
@@ -0,0 +1,69 @@
1package jwt
2
3import (
4 "crypto/ecdsa"
5 "crypto/x509"
6 "encoding/pem"
7 "errors"
8)
9
10var (
11 ErrNotECPublicKey = errors.New("key is not a valid ECDSA public key")
12 ErrNotECPrivateKey = errors.New("key is not a valid ECDSA private key")
13)
14
15// ParseECPrivateKeyFromPEM parses a PEM encoded Elliptic Curve Private Key Structure
16func ParseECPrivateKeyFromPEM(key []byte) (*ecdsa.PrivateKey, error) {
17 var err error
18
19 // Parse PEM block
20 var block *pem.Block
21 if block, _ = pem.Decode(key); block == nil {
22 return nil, ErrKeyMustBePEMEncoded
23 }
24
25 // Parse the key
26 var parsedKey interface{}
27 if parsedKey, err = x509.ParseECPrivateKey(block.Bytes); err != nil {
28 if parsedKey, err = x509.ParsePKCS8PrivateKey(block.Bytes); err != nil {
29 return nil, err
30 }
31 }
32
33 var pkey *ecdsa.PrivateKey
34 var ok bool
35 if pkey, ok = parsedKey.(*ecdsa.PrivateKey); !ok {
36 return nil, ErrNotECPrivateKey
37 }
38
39 return pkey, nil
40}
41
42// ParseECPublicKeyFromPEM parses a PEM encoded PKCS1 or PKCS8 public key
43func ParseECPublicKeyFromPEM(key []byte) (*ecdsa.PublicKey, error) {
44 var err error
45
46 // Parse PEM block
47 var block *pem.Block
48 if block, _ = pem.Decode(key); block == nil {
49 return nil, ErrKeyMustBePEMEncoded
50 }
51
52 // Parse the key
53 var parsedKey interface{}
54 if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil {
55 if cert, err := x509.ParseCertificate(block.Bytes); err == nil {
56 parsedKey = cert.PublicKey
57 } else {
58 return nil, err
59 }
60 }
61
62 var pkey *ecdsa.PublicKey
63 var ok bool
64 if pkey, ok = parsedKey.(*ecdsa.PublicKey); !ok {
65 return nil, ErrNotECPublicKey
66 }
67
68 return pkey, nil
69}