@polkadot/util-crypto#signatureVerify TypeScript Examples
The following examples show how to use
@polkadot/util-crypto#signatureVerify.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: Keyring.ts From gear-js with GNU General Public License v3.0 | 5 votes |
static checkSign(publicKey: string, signature: string, message: string) {
if (signatureVerify(message, signature, publicKey).isValid) {
return true;
} else {
return false;
}
}
Example #2
Source File: keyring.ts From sdk with Apache License 2.0 | 5 votes |
async function verifySignature(message: string, signature: string, address: string) {
return signatureVerify(wrapBytes(message), signature, address);
}
Example #3
Source File: Verify.tsx From crust-apps with Apache License 2.0 | 4 votes |
function Verify ({ className = '' }: Props): React.ReactElement {
const { t } = useTranslation();
const { isEthereum } = useApi();
const [{ cryptoType, isValid }, setValidity] = useState<{ cryptoType: CryptoTypes; isValid: boolean }>({ cryptoType: 'unknown', isValid: false });
const [{ data, isHexData }, setData] = useState<{ data: string; isHexData: boolean }>({ data: '', isHexData: false });
const [{ isValidPk, publicKey }, setPublicKey] = useState<{ isValidPk: boolean; publicKey: Uint8Array | null }>({ isValidPk: false, publicKey: null });
const [{ isValidSignature, signature }, setSignature] = useState<{ isValidSignature: boolean; signature: string }>({ isValidSignature: false, signature: '' });
const [cryptoOptions] = useState([{ text: t<string>('Crypto not detected'), value: 'unknown' }].concat(settings.availableCryptos as any[]));
useEffect((): void => {
let cryptoType: CryptoTypes = 'unknown';
let isValid = isValidPk && isValidSignature;
// We use signatureVerify to detect validity and crypto type
if (isValid && publicKey) {
const verification = signatureVerify(data, signature, publicKey);
if (verification.crypto !== 'none') {
isValid = verification.isValid;
cryptoType = verification.crypto;
}
}
setValidity({ cryptoType, isValid });
}, [data, isValidPk, isValidSignature, publicKey, signature]);
const _onChangeAddress = useCallback(
(accountId: string | null): void => {
let publicKey: Uint8Array | null = null;
try {
publicKey = keyring.decodeAddress(accountId || '');
} catch (err) {
console.error(err);
}
setPublicKey({ isValidPk: !!publicKey && (publicKey.length === 32 || (isEthereum && publicKey.length === 20)), publicKey });
},
[isEthereum]
);
const _onChangeData = useCallback(
(data: string) => setData({ data, isHexData: isHex(data) }),
[]
);
const _onChangeSignature = useCallback(
(signature: string) => setSignature({ isValidSignature: isHex(signature) && (signature.length === 130 || (isEthereum && signature.length === 132)), signature }),
[isEthereum]
);
return (
<div className={`toolbox--Verify ${className}`}>
<div className='ui--row'>
<InputAddress
className='full'
help={t<string>('The account that signed the input')}
isError={!isValidPk}
isInput
label={t<string>('verify using address')}
onChange={_onChangeAddress}
/>
</div>
<div className='ui--row'>
<Input
autoFocus
className='full'
help={t<string>('The data that was signed. This is used in combination with the signature for the verification. It can either be hex or a string.')}
label={t<string>('using the following data')}
onChange={_onChangeData}
value={data}
/>
</div>
<div className='ui--row'>
<div className='ui--AlignedIconContainer'>
<Badge
className='alignedBadge'
color={isValid ? 'green' : (isValidSignature ? 'red' : 'gray')}
icon={isValid ? 'check' : (isValidSignature ? 'exclamation' : 'question')}
/>
</div>
<Input
className='full'
help={t<string>('The signature as by the account being checked, supplied as a hex-formatted string.')}
isError={!isValidSignature}
label={t<string>('the supplied signature')}
onChange={_onChangeSignature}
value={signature}
/>
</div>
<div className='ui--row'>
<Dropdown
defaultValue={cryptoType}
help={t<string>('Cryptography used to create this signature. It is auto-detected on valid signatures.')}
isDisabled
label={t<string>('signature crypto type')}
options={cryptoOptions}
/>
<Static
className='medium'
help={t<string>('Detection on the input string to determine if it is hex or non-hex.')}
label={t<string>('hex input data')}
value={
isHexData
? t<string>('Yes')
: t<string>('No')
}
/>
</div>
</div>
);
}