XamarinChatNugget 1.0.1
dotnet add package XamarinChatNugget --version 1.0.1
NuGet\Install-Package XamarinChatNugget -Version 1.0.1
<PackageReference Include="XamarinChatNugget" Version="1.0.1" />
<PackageVersion Include="XamarinChatNugget" Version="1.0.1" />
<PackageReference Include="XamarinChatNugget" />
paket add XamarinChatNugget --version 1.0.1
#r "nuget: XamarinChatNugget, 1.0.1"
#:package XamarinChatNugget@1.0.1
#addin nuget:?package=XamarinChatNugget&version=1.0.1
#tool nuget:?package=XamarinChatNugget&version=1.0.1
Hereβs a README.md you can drop into your NuGet project repo β written for developers discovering your package:
# XamarinChatNugget π¦π
End-to-End Encrypted (E2EE) Messaging library for **Xamarin.Forms / .NET Standard 2.0**.
Built on [Sodium.Core](https://www.nuget.org/packages/Sodium.Core/) (libsodium crypto), [Xamarin.Essentials](https://learn.microsoft.com/xamarin/essentials/), and [sqlite-net-pcl](https://github.com/praeclarum/sqlite-net).
---
## β¨ Features
- π Identity key pair (X25519) auto-generated & stored securely (Keychain / Keystore).
- π End-to-end encryption (ECDH + XSalsa20-Poly1305).
- π Ephemeral keys per message for forward secrecy.
- π¦ Payload contains ciphertext, nonce, and ephemeral public key.
- π² Secure storage of own + peer public keys.
- πΎ Optional persistence layer with SQLite (swap for SQLCipher in prod).
- π Extensible transport (SignalR, WebSockets, REST).
---
## π¦ Installation
Add via NuGet:
```bash
dotnet add package XamarinChatNugget
Perfect π letβs extend your README.md so it clearly explains how to set up Firebase Authentication + Realtime Database for your XamarinChatNugget
NuGet.
Hereβs a structured version you can drop into your repo:
XamarinChatNugget
A demo NuGet package for building secure peer-to-peer chat apps with:
- π End-to-End Encryption (libsodium)
- βοΈ Firebase Authentication (user accounts)
- π‘ Firebase Realtime Database (public key directory)
π Features
- Secure key generation and storage (private key stays on device).
- Public key exchange via Firebase.
- Simple Auth (signup & login).
- Works in Xamarin.Forms (Android/iOS).
π Setup Guide
1. Create Firebase Project
Go to Firebase Console.
Create a new project.
Enable Authentication β Email/Password.
Enable Realtime Database.
Set rules to testing mode first:
{ "rules": { ".read": true, ".write": true } }
2. Get API Key & Database URL
API Key:
- Go to Project Settings β General β Web API Key.
Database URL:
Go to Realtime Database β Data β URL, e.g.:
https://your-project-id.firebaseio.com/
3. Secure Your Database Rules
Once auth works, update rules to restrict writes:
{
"rules": {
"keys": {
"$userId": {
".read": "auth != null",
".write": "auth.uid === $userId"
}
}
}
}
β This ensures each user can only write their own public key.
4. Install NuGet
In your Xamarin project:
dotnet add package XamarinChatNugget
Or via Visual Studio β Manage NuGet Packages.
5. Initialize in App.xaml.cs
public partial class App : Application
{
public static AuthService Auth { get; private set; }
public static FirebaseKeyService KeyService { get; private set; }
public App()
{
InitializeComponent();
// Replace with your Firebase project values
Auth = new AuthService("<YOUR_FIREBASE_API_KEY>");
KeyService = new FirebaseKeyService(
"https://your-project-id.firebaseio.com/",
() => Auth.IdToken
);
MainPage = new LoginPage();
}
}
6. User Signup / Login
// Sign up new user
await App.Auth.SignUpAsync("user@example.com", "password123");
// Or login
await App.Auth.LoginAsync("user@example.com", "password123");
// Generate and upload keys
var keyPair = Sodium.PublicKeyBox.GenerateKeyPair();
await App.KeyStore.StoreOwnKeysAsync(App.Auth.UserId, keyPair);
await App.KeyService.UploadKeyAsync(App.Auth.UserId, keyPair.PublicKey);
7. Fetch Peerβs Public Key
var bobPublicKey = await App.KeyService.GetKeyAsync("bob_uid");
await App.KeyStore.StorePeerPublicKeyAsync("bob_uid", bobPublicKey);
8. Encrypt & Send Message
var payload = await App.Crypto.EncryptForAsync("bob_uid", Encoding.UTF8.GetBytes("Hello Bob!"));
Send payload.Ciphertext
, payload.Nonce
, and payload.EphemeralPublicKey
via your transport layer (SignalR/WebSocket/etc).
9. Decrypt on Receiver Side
var plaintextBytes = await App.Crypto.DecryptWithEphemeralAsync("alice_uid", payload);
var plaintext = Encoding.UTF8.GetString(plaintextBytes);
β Next Steps
- Add UI pages (Login, Chat).
- Replace dummy transport with SignalR / REST / WebSocket.
- Use SQLCipher if you need encrypted local storage.
- Add device pairing (QR codes) for real apps.
β‘ You now have a secure Firebase-backed chat foundation in Xamarin!
π License
MIT License Β© 2025 YourName
---
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Sodium.Core (>= 1.4.0)
- System.Text.Json (>= 9.0.9)
- Xamarin.Essentials (>= 1.8.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.