Skip to content

Commit 01e9e00

Browse files
committed
Minimum set of changes to get working with the new nebula cert apis
1 parent 894e92a commit 01e9e00

File tree

14 files changed

+115
-57
lines changed

14 files changed

+115
-57
lines changed

android/app/src/main/kotlin/net/defined/mobile_nebula/NebulaVpnService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class NebulaVpnService : VpnService() {
100100
val ipNet: CIDR
101101

102102
try {
103-
ipNet = mobileNebula.MobileNebula.parseCIDR(site!!.cert!!.cert.details.ips[0])
103+
ipNet = mobileNebula.MobileNebula.parseCIDR(site!!.cert!!.cert.details.networks[0])
104104
} catch (err: Exception) {
105105
return announceExit(site!!.id, err.message ?: "$err")
106106
}
@@ -214,7 +214,7 @@ class NebulaVpnService : VpnService() {
214214
}
215215

216216
private fun registerReloadReceiver() {
217-
ContextCompat.registerReceiver(this, reloadReceiver, IntentFilter(ACTION_RELOAD), RECEIVER_NOT_EXPORTED)
217+
ContextCompat.registerReceiver(this, reloadReceiver, IntentFilter(ACTION_RELOAD), ContextCompat.RECEIVER_NOT_EXPORTED)
218218
}
219219

220220
private fun unregisterReloadReceiver() {

android/app/src/main/kotlin/net/defined/mobile_nebula/Sites.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,8 @@ data class CertificateDetails(
165165
val notAfter: String,
166166
val publicKey: String,
167167
val groups: List<String>,
168-
val ips: List<String>,
169-
val subnets: List<String>,
168+
val networks: List<String>,
169+
val unsafeNetworks: List<String>,
170170
val isCa: Boolean,
171171
val issuer: String
172172
)

ios/NebulaNetworkExtension/PacketTunnelProvider.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
8787

8888
// Make sure our ip is routed to the tun device
8989
var err: NSError?
90-
let ipNet = MobileNebulaParseCIDR(_site.cert!.cert.details.ips[0], &err)
90+
let ipNet = MobileNebulaParseCIDR(_site.cert!.cert.details.networks[0], &err)
9191
if err != nil {
9292
throw err!
9393
}

ios/NebulaNetworkExtension/Site.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ struct CertificateDetails: Codable {
102102
var notAfter: String
103103
var publicKey: String
104104
var groups: [String]
105-
var ips: [String]
106-
var subnets: [String]
105+
var networks: [String]
106+
var unsafeNetworks: [String]
107107
var isCa: Bool
108108
var issuer: String
109109

@@ -114,8 +114,8 @@ struct CertificateDetails: Codable {
114114
notAfter = ""
115115
publicKey = ""
116116
groups = []
117-
ips = ["ERROR"]
118-
subnets = []
117+
networks = ["ERROR"]
118+
unsafeNetworks = []
119119
isCa = false
120120
issuer = ""
121121
}

ios/Runner.xcodeproj/project.pbxproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@
288288
attributes = {
289289
BuildIndependentTargetsInParallel = YES;
290290
LastSwiftUpdateCheck = 1140;
291-
LastUpgradeCheck = 1600;
291+
LastUpgradeCheck = 1510;
292292
ORGANIZATIONNAME = "The Chromium Authors";
293293
TargetAttributes = {
294294
43AA89532444DA6500EDC39C = {

ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1600"
3+
LastUpgradeVersion = "1510"
44
version = "1.7">
55
<BuildAction
66
parallelizeBuildables = "YES"
@@ -66,6 +66,7 @@
6666
ignoresPersistentStateOnLaunch = "NO"
6767
debugDocumentVersioning = "YES"
6868
debugServiceExtension = "internal"
69+
enableGPUValidationMode = "1"
6970
allowLocationSimulation = "YES">
7071
<BuildableProductRunnable
7172
runnableDebuggingMode = "0">

lib/components/SimplePage.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class SimplePage extends StatelessWidget {
7979
}
8080

8181
if (addScrollbar) {
82-
realChild = Scrollbar(child: realChild);
82+
realChild = Scrollbar(controller: scrollController, child: realChild);
8383
}
8484

8585
if (alignment != null) {

lib/models/Certificate.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ class CertificateDetails {
3636
DateTime notAfter;
3737
String publicKey;
3838
List<String> groups;
39-
List<String> ips;
40-
List<String> subnets;
39+
List<String> networks;
40+
List<String> unsafeNetworks;
4141
bool isCa;
4242
String issuer;
4343

@@ -47,8 +47,8 @@ class CertificateDetails {
4747
notAfter = DateTime.now(),
4848
publicKey = "",
4949
groups = [],
50-
ips = [],
51-
subnets = [],
50+
networks = [],
51+
unsafeNetworks = [],
5252
isCa = false,
5353
issuer = "DEBUG";
5454

@@ -58,8 +58,8 @@ class CertificateDetails {
5858
notAfter = DateTime.parse(json['notAfter']),
5959
publicKey = json['publicKey'],
6060
groups = List<String>.from(json['groups']),
61-
ips = List<String>.from(json['ips']),
62-
subnets = List<String>.from(json['subnets']),
61+
networks = List<String>.from(json['networks']),
62+
unsafeNetworks = List<String>.from(json['unsafeNetworks']),
6363
isCa = json['isCa'],
6464
issuer = json['issuer'];
6565
}

lib/screens/siteConfig/CertificateDetailsScreen.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,12 @@ class _CertificateDetailsScreenState extends State<CertificateDetailsScreen> {
124124
items.add(ConfigItem(label: Text('Groups'), content: SelectableText(certInfo.cert.details.groups.join(', '))));
125125
}
126126

127-
if (certInfo.cert.details.ips.isNotEmpty) {
128-
items.add(ConfigItem(label: Text('IPs'), content: SelectableText(certInfo.cert.details.ips.join(', '))));
127+
if (certInfo.cert.details.networks.isNotEmpty) {
128+
items.add(ConfigItem(label: Text('Networks'), content: SelectableText(certInfo.cert.details.networks.join(', '))));
129129
}
130130

131-
if (certInfo.cert.details.subnets.isNotEmpty) {
132-
items.add(ConfigItem(label: Text('Subnets'), content: SelectableText(certInfo.cert.details.subnets.join(', '))));
131+
if (certInfo.cert.details.unsafeNetworks.isNotEmpty) {
132+
items.add(ConfigItem(label: Text('Unsafe Networks'), content: SelectableText(certInfo.cert.details.unsafeNetworks.join(', '))));
133133
}
134134

135135
return items.isNotEmpty

nebula/api.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package mobileNebula
22

33
import (
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

Comments
 (0)