import React, { ChangeEvent, useCallback, useState } from 'react'; import classNames from 'classnames'; export function PubkeyInput(props: { onNext: (pubkey: string) => Promise; className?: string; }) { const [error, setError] = useState(''); const [pubkey, setPubkey] = useState(''); const isValidPEMKey = (key: string): boolean => { try { const trimmedKey = key.trim(); if ( !trimmedKey.startsWith('-----BEGIN PUBLIC KEY-----') || !trimmedKey.endsWith('-----END PUBLIC KEY-----') ) { setError('Invalid PEM format: header or footer missing'); return false; } const keyContent = trimmedKey .replace('-----BEGIN PUBLIC KEY-----', '') .replace('-----END PUBLIC KEY-----', '') .trim(); try { atob(keyContent); } catch (err) { setError('Invalid Base64 encoding'); return false; } return true; } catch (err) { console.error('Error validating key:', err); return false; } }; const onChange = useCallback( async (e: ChangeEvent) => { setError(''); const pubkey = e.target.value; setPubkey(pubkey); }, [pubkey], ); const onNext = useCallback(async () => { if (isValidPEMKey(pubkey)) { try { await props.onNext(pubkey); } catch (e: any) { if (typeof e === 'string') { setError(e); } else { setError(e?.message || 'Unable to verify proof'); } } } }, [pubkey]); return (
Please enter the notary key: