@@ -2,6 +2,9 @@ package mobileNebula
22
33import (
44 "context"
5+ "crypto/ecdsa"
6+ "crypto/ed25519"
7+ "crypto/elliptic"
58 "encoding/json"
69 "errors"
710 "fmt"
@@ -62,7 +65,7 @@ func (c *APIClient) Enroll(code string) (*EnrollResult, error) {
6265 return nil , fmt .Errorf ("unexpected failure: %s" , err )
6366 }
6467
65- site , err := newDNSite (meta .OrganizationName , cfg , string (pkey ), * creds )
68+ site , err := newDNSite (meta .Org . Name , cfg , string (pkey ), * creds )
6669 if err != nil {
6770 return nil , fmt .Errorf ("failure generating site: %s" , err )
6871 }
@@ -106,7 +109,7 @@ func (c *APIClient) TryUpdate(siteName string, hostID string, privateKey string,
106109 defer cancel ()
107110 updateAvailable , err := c .c .CheckForUpdate (ctx , creds )
108111 switch {
109- case errors .As (err , & dnapi.InvalidCredentialsError {} ):
112+ case errors .As (err , & dnapi .ErrInvalidCredentials ):
110113 return nil , InvalidCredentialsError {}
111114 case err != nil :
112115 return nil , fmt .Errorf ("CheckForUpdate error: %s" , err )
@@ -119,9 +122,9 @@ func (c *APIClient) TryUpdate(siteName string, hostID string, privateKey string,
119122 // Perform the update and return the new site object
120123 updateCtx , updateCancel := context .WithTimeout (context .Background (), 30 * time .Second )
121124 defer updateCancel ()
122- cfg , pkey , newCreds , err := c .c .DoUpdate (updateCtx , creds )
125+ cfg , pkey , newCreds , _ , err := c .c .DoUpdate (updateCtx , creds )
123126 switch {
124- case errors .As (err , & dnapi.InvalidCredentialsError {} ):
127+ case errors .As (err , & dnapi .ErrInvalidCredentials ):
125128 return nil , InvalidCredentialsError {}
126129 case err != nil :
127130 return nil , fmt .Errorf ("DoUpdate error: %s" , err )
@@ -144,12 +147,25 @@ func unmarshalHostPrivateKey(b []byte) (keys.PrivateKey, []byte, error) {
144147 k , r , err := keys .UnmarshalHostPrivateKey (b )
145148 if err != nil {
146149 // We used to use a Nebula PEM header for these keys, so try that as a fallback
147- k , r , err := cert .UnmarshalEd25519PrivateKey (b )
150+ k , r , c , err := cert .UnmarshalSigningPrivateKeyFromPEM (b )
148151 if err != nil {
149152 return nil , r , fmt .Errorf ("failed fallback unmarshal: %w" , err )
150153 }
151154
152- pk , err := keys .NewPrivateKey (k )
155+ var rk any
156+ switch c {
157+ case cert .Curve_CURVE25519 :
158+ rk = ed25519 .PrivateKey (k )
159+ case cert .Curve_P256 :
160+ rk , err = ecdsa .ParseRawPrivateKey (elliptic .P256 (), k )
161+ if err != nil {
162+ return nil , r , fmt .Errorf ("failed to parse P256 private key: %s" , err )
163+ }
164+ default :
165+ return nil , r , fmt .Errorf ("unsupported private key type: %s" , c .String ())
166+ }
167+
168+ pk , err := keys .NewPrivateKey (rk )
153169 if err != nil {
154170 return nil , r , err
155171 }
0 commit comments