> ## Documentation Index
> Fetch the complete documentation index at: https://crossmint-wallets-docs-2-5.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# EVM

> Sign messages from your wallet

## Prerequisites

* Ensure you have a wallet created.
* **API Key**: Ensure you have an API key with the scopes: `wallets:signatures.create`.

## Signing a Message

<Tabs>
  <Tab title="React">
    ```typescript theme={null}
    import { useWallet, EVMWallet } from '@crossmint/client-sdk-react-ui';

    const { wallet } = useWallet();

    const evmWallet = EVMWallet.from(wallet);

    const signedMessage = await evmWallet.signMessage(message);
    ```

    ### Parameters

    <ParamField path="message" type="string" required>
      The message to sign.
    </ParamField>

    ### Returns

    <ParamField path="signature" type="string">
      The signature of the message.
    </ParamField>
  </Tab>

  <Tab title="Node.js">
    ```typescript theme={null}
    const wallet = await crossmintWallets.getWallet(walletLocator);

    const evmWallet = EVMWallet.from(wallet);

    const signedMessage = await evmWallet.signMessage(message);
    ```

    ### Parameters

    <ParamField path="message" type="string" required>
      The message to sign.
    </ParamField>

    ### Returns

    <ParamField path="signature" type="string">
      The signature of the message.
    </ParamField>
  </Tab>

  <Tab title="React Native">
    ```typescript theme={null}
    import { useWallet } from '@crossmint/client-sdk-react-native-ui';

    const { wallet } = useWallet();

    const evmWallet = EVMWallet.from(wallet);

    const signedMessage = await evmWallet.signMessage(message);
    ```

    ### Parameters

    <ParamField path="message" type="string" required>
      The message to sign.
    </ParamField>

    ### Returns

    <ParamField path="signature" type="string">
      The signature of the message.
    </ParamField>
  </Tab>
</Tabs>

## Signing Typed Data

<Tabs>
  <Tab title="React">
    ```typescript theme={null}
    import { useWallet, EVMWallet } from '@crossmint/client-sdk-react-ui';

    const { wallet } = useWallet();

    const evmWallet = EVMWallet.from(wallet);

    const signedMessage = await evmWallet.signTypedData(typedData);
    ```

    ### Parameters

    <ParamField path="typedData" type="TypedData" required>
      The typed data to sign.
    </ParamField>

    ### Returns

    <ParamField path="signature" type="string">
      The signature of the message.
    </ParamField>
  </Tab>

  <Tab title="Node.js">
    ```typescript theme={null}
    const wallet = await crossmintWallets.getWallet(walletLocator);

    const evmWallet = EVMWallet.from(wallet);

    const signedMessage = await evmWallet.signTypedData(typedData);
    ```
  </Tab>

  <Tab title="React Native">
    ```typescript theme={null}
    import { useWallet } from '@crossmint/client-sdk-react-native-ui';

    const { wallet } = useWallet();

    const evmWallet = EVMWallet.from(wallet);

    const signedMessage = await evmWallet.signTypedData(typedData);
    ```
  </Tab>
</Tabs>
