# CRYPTO_VerifySignature

## 構文

      #include <nitro/crypto/sign.h>

      int CRYPTO_VerifySignature(
      const void* data_ptr,
      int   data_len,
      const void* sign_ptr,
      const void* mod_ptr
      );

## 引数

`data_ptr` | 電子署名の検証を行う対象のデータへのポインタを指定します。
`data_len` | data_ptr で指定した検証対象データの長さを指定します。
`sign_ptr` | 128バイトの電子署名へのポインタを指定します。
`mod_ptr` | 128バイトの公開鍵の modulus へのポインタを指定します。

## 返り値

以下のいずれかの処理結果を返します。

`TRUE` | 電子署名の検証に成功しました。
`FALSE` | 検証に失敗しました。署名とデータの内容が食い違っているか、公開鍵と署名が合致していないか、署名のフォーマットが間違っているか、メモリの確保に失敗したかのいずれかです。

## 説明

電子署名を用いて、データが正しいものかを検証します。
sign_ptr に与えるのは 128 バイトの署名データです。 署名データは、ハッシュとして SHA-1 アルゴリズムを使用した、RSA の鍵長 1024bit の PKCS#1 Version 1.5 のフォーマットを与えます。
mod_ptr に与えるのは 128 バイトの公開鍵の modulus を上位バイトから並べたバイト列です。 なお、公開鍵の公開指数 (public exponent) は 65537 (0x10001) で固定です。この関数では 65537 以外の公開指数の RSA 鍵を扱うことはできません。

呼出し中に計算のため動的にメモリを確保します。`CRYPTO_SetMemAllocator()` で指定したメモリ管理関数が使用されます。 ただし、この関数で指定できるメモリ管理関数のうちメモリサイズ変更関数 (引数 realloc) は使用しません。
使用するメモリ量は検証するデータによって上下しますが、4Kバイトを用意しておけば通常は問題ありません。 もしもメモリの確保に失敗し、メモリ管理関数から NULL が渡された場合は、この関数は FALSE を返します。 なお、使用メモリ量と data_len との間には相関関係はありません。

なお、このAPIはライセンスの都合上TWLでのみ動作します。NITROで動作させる必要がある場合はNitroCryptoの 同名のAPIをリンクして利用してください。

電子署名の詳細に関しましては、「電子署名の概要」を参照してください。

## 参照

`CRYPTO_VerifySignatureWithHash`

## 履歴

2008/03/27 初版