diff --git a/lib/utils/siwe-utils.js b/lib/utils/siwe-utils.js
--- a/lib/utils/siwe-utils.js
+++ b/lib/utils/siwe-utils.js
@@ -13,6 +13,11 @@
   return ethereumAddressRegex.test(candidate);
 }
 
+const primaryIdentityPublicKeyRegex: RegExp = /^[a-zA-Z0-9+/]{43}$/;
+function isValidPrimaryIdentityPublicKey(candidate: string): boolean {
+  return primaryIdentityPublicKeyRegex.test(candidate);
+}
+
 const siweStatement: string =
   'By continuing, I accept the Comm Terms of Service: https://comm.app/terms';
 
@@ -36,5 +41,6 @@
   siweStatement,
   isValidSIWENonce,
   isValidEthereumAddress,
+  isValidPrimaryIdentityPublicKey,
   isValidSIWEMessage,
 };
diff --git a/lib/utils/siwe-utils.test.js b/lib/utils/siwe-utils.test.js
--- a/lib/utils/siwe-utils.test.js
+++ b/lib/utils/siwe-utils.test.js
@@ -1,6 +1,10 @@
 // @flow
 
-import { isValidEthereumAddress, isValidSIWENonce } from './siwe-utils.js';
+import {
+  isValidEthereumAddress,
+  isValidPrimaryIdentityPublicKey,
+  isValidSIWENonce,
+} from './siwe-utils.js';
 
 describe('SIWE Nonce utils', () => {
   it('isValidSIWENonce should match valid nonces', () => {
@@ -153,4 +157,22 @@
     const invalidAddress = 'e523fc253bcdea8373e030ee66e00c6864776d70';
     expect(isValidEthereumAddress(invalidAddress)).toBe(false);
   });
+
+  it(`isValidPrimaryIdentityPublicKey should succeed for valid ed25519 keys`, () => {
+    const validPublicKey = 'rPFzRtV7E6v1b60zjTvghqb2xgnggmn6j4UaYccJYdo';
+    expect(isValidPrimaryIdentityPublicKey(validPublicKey)).toBe(true);
+
+    const anotherValidPublicKey = '98+/eB2MUVvYCpkESOS1zuWnWttsYWDKeDXl8T3o8LY';
+    expect(isValidPrimaryIdentityPublicKey(anotherValidPublicKey)).toBe(true);
+  });
+
+  it(`isValidPrimaryIdentityPublicKey should fail for keys < 43 chars`, () => {
+    const shortPublicKey = 'rPFzRtV7E6v1b60zjTvghqb2xgnggmn6j4JYdo';
+    expect(isValidPrimaryIdentityPublicKey(shortPublicKey)).toBe(false);
+  });
+
+  it(`isValidPrimaryIdentityPublicKey should fail for keys > 43 chars`, () => {
+    const longPublicKey = '98+/eB2MUVvYCpkESOSWttsYWDKeDXl8TAAAAAAAAAA3o8LY';
+    expect(isValidPrimaryIdentityPublicKey(longPublicKey)).toBe(false);
+  });
 });