diff -pruN 0.10.1-1/.github/workflows/tests.yml 0.10.2-1/.github/workflows/tests.yml
--- 0.10.1-1/.github/workflows/tests.yml	2025-04-13 08:05:22.000000000 +0000
+++ 0.10.2-1/.github/workflows/tests.yml	2025-11-28 15:25:04.000000000 +0000
@@ -23,7 +23,7 @@ jobs:
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        os: [ubuntu-latest, macos-latest, windows-latest]
+        os: [ubuntu-latest, macos-14, windows-latest]
         python:
           - '3.13'
           - '3.12'
diff -pruN 0.10.1-1/debian/changelog 0.10.2-1/debian/changelog
--- 0.10.1-1/debian/changelog	2025-04-13 11:58:13.000000000 +0000
+++ 0.10.2-1/debian/changelog	2025-11-30 11:06:20.000000000 +0000
@@ -1,3 +1,10 @@
+python-aioice (0.10.2-1) unstable; urgency=medium
+
+  [ upstream ]
+  * new release
+
+ -- Jonas Smedegaard <dr@jones.dk>  Sun, 30 Nov 2025 12:06:20 +0100
+
 python-aioice (0.10.1-1) unstable; urgency=medium
 
   [ upstream ]
diff -pruN 0.10.1-1/docs/changelog.rst 0.10.2-1/docs/changelog.rst
--- 0.10.1-1/docs/changelog.rst	2025-04-13 08:05:22.000000000 +0000
+++ 0.10.2-1/docs/changelog.rst	2025-11-28 15:25:04.000000000 +0000
@@ -3,6 +3,11 @@ Changelog
 
 .. currentmodule:: aioice
 
+0.10.2
+------
+
+ * Fix local ice-ufrag/ice-pwd validation.
+
 0.10.1
 ------
 
diff -pruN 0.10.1-1/src/aioice/__init__.py 0.10.2-1/src/aioice/__init__.py
--- 0.10.1-1/src/aioice/__init__.py	2025-04-13 08:05:22.000000000 +0000
+++ 0.10.2-1/src/aioice/__init__.py	2025-11-28 15:25:04.000000000 +0000
@@ -4,7 +4,7 @@ from .candidate import Candidate
 from .ice import Connection, ConnectionClosed, TransportPolicy
 
 __all__ = ["Candidate", "Connection", "ConnectionClosed", "TransportPolicy"]
-__version__ = "0.10.1"
+__version__ = "0.10.2"
 
 # Set default logging handler to avoid "No handler found" warnings.
 logging.getLogger(__name__).addHandler(logging.NullHandler())
diff -pruN 0.10.1-1/src/aioice/ice.py 0.10.2-1/src/aioice/ice.py
--- 0.10.1-1/src/aioice/ice.py	2025-04-13 08:05:22.000000000 +0000
+++ 0.10.2-1/src/aioice/ice.py	2025-11-28 15:25:04.000000000 +0000
@@ -183,7 +183,7 @@ def validate_password(value: str) -> Non
 
     See RFC 5245 - 15.4. "ice-ufrag" and "ice-pwd" Attributes
     """
-    if not re.match("^[a-z0-9+/]{22,256}$", value):
+    if not re.match("^[a-zA-Z0-9+/]{22,256}$", value):
         raise ValueError("Password must satisfy 22*256ice-char")
 
 
@@ -203,7 +203,7 @@ def validate_username(value: str) -> Non
 
     See RFC 5245 - 15.4. "ice-ufrag" and "ice-pwd" Attributes
     """
-    if not re.match("^[a-z0-9+/]{4,256}$", value):
+    if not re.match("^[a-zA-Z0-9+/]{4,256}$", value):
         raise ValueError("Username must satisfy 4*256ice-char")
 
 
diff -pruN 0.10.1-1/tests/test_ice.py 0.10.2-1/tests/test_ice.py
--- 0.10.1-1/tests/test_ice.py	2025-04-13 08:05:22.000000000 +0000
+++ 0.10.2-1/tests/test_ice.py	2025-11-28 15:25:04.000000000 +0000
@@ -182,11 +182,11 @@ class IceConnectionTest(unittest.TestCas
         # Valid username and password.
         connection = ice.Connection(
             ice_controlling=True,
-            local_username="test+user",
-            local_password="some+password/that+is/long+enough",
+            local_username="test+User1",
+            local_password="some+password/that+is/Long+en0ugh",
         )
-        self.assertEqual(connection.local_username, "test+user")
-        self.assertEqual(connection.local_password, "some+password/that+is/long+enough")
+        self.assertEqual(connection.local_username, "test+User1")
+        self.assertEqual(connection.local_password, "some+password/that+is/Long+en0ugh")
 
         # Invalid username.
         with self.assertRaises(ValueError) as cm:
