USBメモリドングル説明書

Similar documents
AquesTalk プログラミングガイド

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1

AquesTalk Win Manual

プログラマブル LED 制御モジュール アプリ操作説明書 プログラマブル LED 制御モジュール設定アプリ操作説明書 適用モジュール 改訂番号 エレラボドットコム 1

Origin 2017 と 2018 のプロダクトキーは共通なので 両方のバージョンを合わせてご契約 台数までしかインストールすることができません あらかじめご了承ください Origin を使用する PC を変更したい場合は 元の PC でライセンスを取り外してから 別の PC に同じプロダクトキー

Section 16-7 Mac で Windows も使う (Boot Camp) 光学式ドライブ DVD が読み取れる光学式ドライブを使った方がスムーズにインストールできます 光学式ドライブの付 いていない Mac は Windows インストールディスクの ISO イメージデータを使ってもイン

成功しました と表示されればライセンス認証の更新は完了です プロダクトキーを入力した後にテキストエディタが開き エラーメッセージが表示された場合 WEB ブラウザを起動して指定されたアドレスにアクセスしアカウントでログインします 画面に表示された ライセンスファイル を全てコピーし Originのダ

Windows AIKを使用したPE2

UX-MF70/80シリーズ向 ファームウェア書換手順

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

CompuSec SW 強制削除手順

ネットキーの操作手順について

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C

Microsoft PowerPoint - ソフトウェア更新手順書_DAN-W62_mac_ _1.ppt

AquesTalk for WinCE プログラミングガイド

TFU-RW811A ドライバインストール手順書

User Support Tool 操作ガイド

Android Layout SDK プログラミング マニュアル

SeciossLink クイックスタートガイド

『テクノス』V2プログラムインストール説明書

PN-T321

<31305F F C815B82C582CC91808DEC8EE88F878F A5F56322E342E786C7378>

FT-450D シリーズ MAIN ファームウェアアップデートマニュアル 本ソフトウェアは FT-450D/FT-450DM/FT-450DS の アップデートファームウェアです FT-450 シリーズのアップデートには使用できません 八重洲無線株式会社

Windows ユーザー名に全角が含まれている場合は インストールできません のエラーが表示される場合の対処法 手順 1 管理者権限のある Windows ユーザーでログインした上で 以下の処理を行ってください 画面左下の 旗のマークを左クリックし 続いて表示される一覧から 設定 ( 左側に歯車のよ

エコノナビットⅱ 電力管理ソフト/壁紙書き換えソフト

地図 SD カードを取り外す 最初に ナビゲーション本体から地図 SD カードを取り外します 本操作は地図 SD カードを初めて ROAD EXPLORER Updater に登録するときや パソコンにダウンロードしたデータを地図 SD カードに保存するときに実行してください 1 ナビゲーション本体

monologue Sound Librarian 取扱説明書

プリンタドライバのバージョンと パッケージのバージョン バージョン には プリンタドライバ単体のバージョンとプリンタドライバ群を表すパッケージバージョンの 2 通りあります プリンタドライバのバージョンは プリンタドライバプロパティを開いて確認することができます 1. プリンタフォルダを開きます 2

クライアント証明書導入マニュアル

Microsoft Word - TS-816.doc

OKI Universal Hiper-C プリンタドライバ ユーザーズマニュアル ( セットアップと使い方編 ) 最終更新日 2012 年 9 月第 2 版

nLiteによるドライバの統合 - フロッピーディスク不要のXPインストールCDの作成方法 -

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

1. ユーザ専用ページから 該当パッケージをダウンロードする 手順は 以下になります 1-1 STRWEB ( ) にアクセスしてください A B 1-2 [ ユーザID ] [ パスワード ] A に ユーザ専用ページID ( fcnから始ま

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

操作手順 - 説明 1 エクスプローラを起動し ドライブ D に 下図のように 新規に 01- 進路説明 の名称のフォルダを作成し この 01- 進路説明 フォルダの中に 高校受験 32 のデータの収録フォルダとして下図のように 高校関連 フォルダと 生徒関連 フォルダを作成しました ドライブ D

アルテラ USB-Blastre ドライバのインストール方法 for Windows OS

V-Client for Mac ユーザーズガイド

Microsoft Word - Cプログラミング演習(10)

AGT10(Android (TM) 2.3) ファームウェア更新方法

Windows2000/XPインストール手順

◎ エラーメッセージ 画面別 対応一覧表 ◎

無線LAN JRL-710/720シリーズ ファームウェアバージョンアップマニュアル 第2.1版

CR-UK1ソフトウェアユーザーズガイド

User Support Tool 操作ガイド

インストール手順 2 セットアップの種類 [ 標準インストール (S)] [Thunderbird を既定のメールプログラムとして使用する (U)] にチェックを入れ [ 次へ (N)] をクリックします インストール手順 3 セットアップ設定の確認 [ インストール (I)] をクリックします 2

Windows2000/XPインストール手順

メモリハイロガーLR8431、熱流ロガーLR8432を無線LANで利用する方法

目次 はじめに StorageCraft Recovery Environment Builder をインストールする 必要なソフトウェアを確認する ダウンロードする インストールを実行する Window

セキュリティ設定ツールインストール 桐セキュリティ設定ツールインストール C: K3 KIRIV9 Security フォルダ内 KISECURE をダブルクリックして設定を開始します 初回セキュリティ設定ツールを起動時はウィザート形式で設定します メッセージにしたがって初期設定を行ってください セ

おことわり 本書の内容の一部又は全部を無断転載することは禁止されています 本機の外観及び仕様は改良のため 将来予告無しに変更することがあります 本書の内容について万一不審な点や誤りなどのお気付きの点がありましたらご連絡ください 本書に記載されている会社名 商品名などは 一般に各社の商標又は登録商標で

目次 1. 概要 動作環境

本書は INpMac v2.20(intime 5.2 INplc 3 Windows7/8/8.1に対応 ) の内容を元に記載しています Microsoft Windows Visual Studio は 米国 Microsoft Corporation の米国及びその他の国における登録商標です

Microsoft Word - winscp-LINUX-SCPを使用したファイル転送方法について

microsd メモリカード (microsdhc メモリカードを含む ) を IS11LG 本体にセットして データを保存することができます また 連絡先 メール ブックマークなどを microsd メモリカードに控えておくことができます アプリケーションによっては microsdメモリカードをセ

プロッタドライバインストールガイド <OPS628>-Windows 2000/XP- プロッタドライバインストールガイド <OPS628> Windows 2000/XP 環境 本説明書は グラフテックのホームページよりドライバをダウンロードして コンピュータにインストール する手順を説明したもの

Imation Lock の使用 Imation Lock を使用しますとフラッシュドライブにパスワードで保護されたセキュリティエリアを設定すること ができます フラッシュドライブ全体をセキュリティエリアに設定することも 一部容量をセキュリティエリアに 設定することも可能です 一部容量をセキュリティ

Android用 印刷プラグイン Canon Print Service マニュアル

フォント作成ツール説明書

ADempiere (3.5)

Windows8対応版「図脳RAPID17/PRO17」インストールの手引き

PC 移行は以下の流れで行います 次ページ以降に各手順を記載しますのでご確認ください ( をクリックすると該当の説明にジャンプします ) 移行元の PC での作業 Step1 移行するデータをバックアップする (3 ページ ) [ 随時処理 ]-[ データコピー処理 ] メニュー 複数のデータが存在

V-CUBE One

Microsoft Word - Manual-FlashLock V224-T05_Japanese.doc

Microsoft PowerPoint - DSOX-2000/3000/4000 ライセンスの取得_ pptx[読み取り専用]

CashDrawer ライブラリ API 仕様書 2014/07/09 CashDrawer ライブラリ API 仕様書 Rev / 10

Windows ユーザー名に全角が含まれている場合は インストールできません のエラーが表示される 手順 1 管理者権限のある Windows ユーザーでログインした上で 以下の処理を行ってください 左下のスタートボタンをクリックし メニューが表示されましたら コントロールパネル をクリックしてくだ

Microsoft Word - ModelAnalys操作マニュアル_

産直くん 9 リピートくん 9 バックアップ リストア作業チェックリスト バックアップ リストア作業項目一覧 作業項目作業目安時間概要 00 バックアップ リストア作業を行う前に 産直くん 9 リピートくん 9 のバックアップ リストア作業を円滑に行うための確認事項をまとめています 1. バックアッ

IRsolution インストール手順書 修正箇所

新規インストールガイド Microsoft Office Professional Plus 2016 本書は Download Station から Microsoft Office Professional Plus 2016( 以下 Office) をダウンロ ドし 新規インストールを行う手順

エコノナビットⅱ 電力管理ソフト/壁紙書き換えソフト

プリンタドライバインストールガイド <OPS645>-Windows Vista(32bit 版 )/ Windows 7(32bit 版 )/ Windows 8(32bit 版 )/ Windows 8.1(32bit 版 )- プリンタドライバインストールガイド <OPS645> Window

プロッタドライバインストールガイド プロッタドライバインストールガイド <OPS628>-Windows 7- <OPS628> Windows 7 環境 本説明書は グラフテックのホームページよりドライバをダウンロードして コンピュータにインストールする手順を説明したものです 内容をご確認のうえ

プリンタドライバ説明書

2. FileZilla のインストール 2.1. ダウンロード 次の URL に接続し 最新版の FileZilla をダウンロードします URL: なお バージョンが異なるとファイル名が

eWide利用者ガイド

目 次 1. はじめに アルコールチェッカー管理ソフトのインストール アルコールチェッカー管理ソフトのアンインストール アルコールチェッカー管理ソフトの操作方法 ソフトの起動 NG 判定値の設定

ライセンス認証ガイド Windows 10 Pro 本書は Download Station から Windows10 のライセンス情報をダウンロ ドし インストール済みの Windows 10 に適用する手順を記載しています 本手順は学内ネットワークに接続した状態で行う必要があります 認証プログラ

取引上手くん 9 のインストール時にエラーが表示される際の対処法 ~Windows8 Windows8.1~ 本ドキュメントは Windows8/8.1 のパソコンにおいて 取引上手くん 9 のインストールが正常にできなかった場合の対処 法をまとめたものです なお インストールの手順そのものにつきま

Outlook 2016 設定マニュアル 目次 1 POP 系の設定 初めて設定する場合 ( 追加メールアドレスの設定 ) 設定内容の確認 変更 メールアドレス変更後の設定変更 メールパスワード変更後の設定変更

ファイル管理 microsdメモリカードを利用する 232 microsdメモリカードを取り付ける 233 microsdメモリカードを取り外す 234 microusbケーブルでパソコンと接続する 235 メモリの使用量を確認する

Transcription:

Ver. 1.0.7 2019/7 USB メモリライセンス認証ライセンス書込 DLL / LIB 使用方法 API 有限会社リビッグ 233-0002 横浜市港南区上大岡西 1-12-2 Tel: 045-843-7122 Fax: 045-843-7142 http://www.ribig.co.jp

内容 Ⅰ. USB メモリライセンス認証...... 4 1. 適切な USB メモリ選択...... 4 2. USB メモリにライセンスを書込む (USB メモリのドングル化 )... 5 3. API DLL テンプレートから実 DLL を生成する... 5 Ⅱ. ディスクのファイルについて...... 6 API DLL x86/64...... 6 API - Header......... 6 API - LIB x86/64...... 6 TOOL......... 7 Sample......... 7 Ⅲ. USB メモリのドングル化...... 8 Ⅳ. 実 DLL 生成........ 11 DLL......... 12 LIB......... 12 固有データ埋め込みプログラム embedinfo.exe... 13 embedinfo.exe 起動方法... 13 SDK 付属 API DLL(32 ビット版 /64 ビット版 ) への固有データ埋め込み... 13 API LIB をリンクした実行ファイル (EXE/DLL EXE/DLL) への固有データ埋め込み... 13 Ⅴ. ライセンス管理 USB キー...... 14 Ⅵ. USB メモリドングルの操作...... 15 操作手順......... 16 Ⅶ ネイティブ API 説明...... 18 Init_MatrixAPI... 18 Release_MatrixAPI... 18 GetVersionAPI... 18 Dongle_Count... 19 Dongle_MemSize... 19 Dongle_Version... 20 Dongle_ReadData... 20 Dongle_ReadDataEx... 21 Dongle_WriteData... 22 2

Dongle_WriteDataEx... 23 Dongle_ReadSerNr... 24 Dongle_WriteKey... 25 Dongle_GetKeyFlag... 26 Dongle_EncryptData... 27 Dongle_DecryptData... 28 ドングル抜き差し検出 API...... 29 Ⅷ マネージ API...... 30 API クラス......... 30 Detect クラス......... 31 評価版について 製品版では ライセンスを発行するためには必ずライセンス管理 USB キーを接続しなければなり ません ライセンス管理 USB キーによってライセンス発行数が管理されます 評価版ではライセンス管理 USB キーの接続は不要です 評価版には発行可能なライセンス数に制限はありません ただし ユーザ固有データは生成されません SDK 付属の固有データしか使えません 評価版を利用するすべてのユーザの USB メモリドングルのデータは他のユーザによって読み込み 解読可能です 評価版のセキュリティは確保されません 評価版は USB メモリドングルを使用するために必要な一連の作業とアプリケーションプログラ ムでの API 呼び出しを確認するために提供されるとご理解ください 3

Ⅰ. USB メモリライセンス認証 アプリケーションプログラムから USB ライセンス認証 API を利用する前に必要な作業について 説明します 1. 適切な USB メモリ選択 すべてのUSB メモリをドングルとして利用できるわけではありません 固有 ID が割り当てられたUSB メモリだけが利用可能です 固有 ID を持たないUSB メモリも出回っています まず最初に検討しているUSB メモリが固有 ID が割り当てられているタイプかどうか確認しなければなりません SDK の [tool] フォルダのcheck_usbmem.exe はUSB メモリキーのID を確認するツールです 実行すると次のウィンドウが表示されます 確認するUSB メモリキーを1つ接続してから [ 確認 ] ボタンをクリックしてください USB メモリのID が表示されます 複数キーを接続してから [ 確認 ] ボタンをクリックすると それぞれの ID を比較 すべて異なっていると固有 ID を持っていると判定します USB キーによっては 同じ機種の2-3つのキーが異なるID を持っていたとしても 本当にキー固有の ID なのか判定が難しいことがあります ( 製造バッチで異なるID が割り当てられることがあるようです ) できるだけ多くのキーをつかって判定することで確実な結果を得ることができます USB キー各個体で異なるID を設定するのは すべての個体で同一 ID を設定するのと比べ コストがかかるはずです 一般的に超小型にもかかわらず安価な USB メモリは固有 ID を持っていない傾向にあるようです 通常サイズのUSB メモリは安価なものでも固有 ID を持っているケースがあります 4

2. USB メモリにライセンスを書込む (USB メモリのドングル化 ) 選択したUSB キーにライセンス情報を書き込みドングル化します 詳細は Ⅲ. USB メモリのドングル化 に記載されています 3. API DLL テンプレートから実 DLL を生成する ライセンスはお客様側で自動生成される秘密鍵やデータ ( 以降固有データ ) をもとに作成されます ライセンスは固有データを使わなければ解読できません しかし API ライブラリは固有データを事前に持つことはできません そのままではライセンスを解読できません API ライブラリのファイルには固有データを埋め込む領域が用意されています そこに固有データを埋め込むことで 固有データをもとに作成されたライセンスを解読できるようになります SDK 付属のAPI DLL/LIB はそのままでは利用できません これらDLL/LIB に固有データを埋め込むことで初めて正常に動作するようになります 固有データの埋め込み方法詳細は Ⅳ. 実 DLL 生成 に記載されています 評価版の制限 評価版では固有データは生成されません 評価版に付属する固有データを基にライセンスは発行 されます 5

Ⅱ. ディスクのファイルについて API DLL x86/64 API - Header API - LIB x86/64 6

TOOL Sample C/C++ サンプル C# Interop Service を使ったサンプル () ネイティブmatrix32mem.dll 呼び出し C# API クラスを使ったサンプル.NET クラス matrix32memclass.dll 呼び出し 7

Ⅲ. USB メモリのドングル化 ドングル化プログラム usbmem_mxapi.exe USB メモリにライセンスを書き込むプログラムは usbmem_mxapi.exe です このプログ ラムの実行には以下要件を満たす必要があります 1. ライセンス管理 USB セキュリティキーを接続しなければなりません ライセンス管理 USB セキュリティキー保有者でなければライセンスは発行できません ライセンス管理 USB セキュリティキーにより発行可能ライセンス数 発行済ライセンス数が管理されます 評価版ではライセンス管理 USB セキュリティキーの接続は不要です 2. 同じフォルダに matrix.uc ファイルが存在しなければなりません matrix.uc ファイルはライセンス管理キーに付属するものを使用してください 評価版では matrix.uc ファイルは不要です 3. 同じフォルダに usbmem_mxapi.ini 設定ファイルがあればシリアル番号の初期値を設定できます SERNR で次回発行するライセンスのシリアル番号を指定できます usbmem_mxapi.ini [OPTIONS] SERNR=1000000004 usbmem_mxapi.exe を起動すると以下ウィンドウが表示します ドングル化する USB メモリを接続後 [USB メモリのドングル化 ] をクリックします 8

USB メモリにライセンスが既に書き込まれていて 固有データ生成済みで同じフォルダにあれ ばドライブ名とシリアル番号を表示します ライセンス発行時の固有データが同じフォルダになければライセンスを読み込むことはできませ ん エラーになります USB メモリにライセンスが書き込まれておらず usbmem_mxapi.exe と同じフォルダに 固有データが存在しなければ USB メモリのドライブを表示してドングル化するかどうか確認を 求めます ドングル化に成功するとドライブ名とシリアル番号を表示します シリアル番号は USB メモリの 固有 ID ではありません ドングル化プログラムが割り当てたライセンスのシリアル番号です 9

発行するライセンスのシリアル番号は usbmem_mxapi.exe と同じフォルダに usbmem_mxapi.ini に記録されます 初期値は自由書き換えて構いません usbmem_mxapi.ini [OPTIONS] SERNR=1000000004 ライセンス発行されると 同じフォルダに以下ファイル ( 固有データ ) が作成されます 評価版では固有データは作成されません SDK 付属の固有データが使われます private.pem enc_public.txt devices.dat datakeys.txt aeskey.txt public.pem これら固有データファイルは絶対に変更や削除はしないでください ライセンスを発行したUSB メモリの固有 ID は device.dat に保存されます USB メモリ 上のライセンスファイルを誤って削除してしまっても device.dat に固有 ID の記録があれば ライセンス数を増加させずにライセンスを再書き込みできます ライセンスを書き込もうとする USB メモリの固有 ID が device.dat に見つかれば 以下メッセージが表示されます 10

Ⅳ. 実 DLL 生成 お客様固有のデータは データが存在しないフォルダでライセンス書き込みプログラムを実行すると自動作成されます ライセンスや USB メモリ上のデータは固有データを使って暗号化されます API ライブラリは同じ固有データを使わなければライセンス / データを解読できません API ライブラリ (DLL/LIB) には固有データを 埋め込む 場所が確保されていて そこに固有データを埋め込む作業が必ず必要です USB メモリのドングル化プログラム API DLL テンプレート 固有データ 埋込プログラム テンプレートへの固有データ埋め込み 固有データに基づくライセンス 実 API DLL アプリケーションプログラム アプリケーションプログラムは SDK 付属 DLL ではなく 固有データが埋め込まれた実 API DLL 経由で USB メモリドングルを操作しなければなりません スタティックライブラリ (LIB) には直接固有データを埋め込むことはできません LIB をリンク したアプリケーションプログラム (EXE/DLL) に固有データを埋め込みます 固有データ LIB とリンクした EXE/DLL 埋込プログラム 実 EXE/DLL 11

固有データは データが存在しないフォルダでライセンス書き込みプログラムを実行すると自動 作成されます 1. 固有データ ( 複数ファイル ) を失うと そのデータに基づくライセンスの新規発行 は不可能です 既存ライセンスや実 DLL/EXE はそのまま使えますが その実 DLL/EXE が解読できる新規ライセンスを発行することはできません 2. 固有データが存在しないフォルダでライセンス書き込みプログラムを実行すると新 規に固有データが自動作成されます 異なる固有データに基づくライセンスで同一 プログラムを運用できます API DLL 固有データ固有データ LIB とリンクした EXE/DLL 埋込プログラム 実 EXE/DLL 実 EXE/DLL 同一 DLL/Exe から異なるライセンスを解読する実 EXE/DLL 作成可能 3. 公開鍵は埋め込まれますが秘密鍵は埋め込まれません ユーザが秘密鍵を管理しま す このような仕組みのため SDK 付属 API ライブラリ (DLL/LIB) は そのままでは USB メモリ に書き込まれたライセンスにアクセスできません API ライブラリを正常に動作させるには 固 有データを埋め込む作業が必要です DLL API ライブラリ DLL には直接固有データを埋め込みます LIB API ライブラリ LIB に対して直接埋め込むことはできません LIB をリンクしたプログラム本体 (EXE/DLL) に固有データを埋め込みます 12

固有データ埋め込みプログラム embedinfo.exe embedinfo.exe はコンソールプログラムです コマンドプロンプトで実行してください a. embedinfo.exe を起動するにはライセンス管理キーを接続してください b. 同じフォルダに固有データファイル / matrix.uc がなければなりません embedinfo.exe 起動方法 固有データを埋め込む DLL/EXE を引数に指定して起動します 例 : >embedinfo.. matrix32mem.dll 固有データが埋め込まれたファイルは.embed 拡張子が追加されて埋め込む元ファイルと同じ フォルダに作成されます 例 :.. matrix32mem.dll -.. matrix32mem.dll.embed matrix32mem.dll.embed が実 DLL ファイルです.embed 拡張子を取り除いて使用してく ださい SDK 付属 API DLL(32 ビット版 /64 ビット版 ) への固有データ埋め込み以下 2つ付属 API DLL に固有データを埋め込んでください matrix32mem.dll matrix32memclass.dll API LIB をリンクした実行ファイル (EXE/DLL XE/DLL) への固有データ埋め込み LIB ファイルをリンクしたプログラムはそのままではライセンスを解読できません 固有データを埋め込んでください 13

Ⅴ. ライセンス管理 USB キー ライセンス発行プログラム usbmem_mxapi.exe はライセンス管理 USB キーを使って発行可 能ライセンス最大数と発行済みライセンス数を管理します 発行可能ライセンス最大数は購入し たライセンス数に設定されます 発行済みライセンス数が発行可能最大数に達すると ライセンスを新規に発行することはできま せん 追加ライセンスを購入後 ライセンス管理 USB キーを弊社まで返送ください ライセンス管理 USB キーの発行済みライセンス数を0 購入した追加ライセンス数を発行可能ライセンス最大数に再設定します また usbmem_mxapi.exe も更新されます 発行可能ライセンス最大数の管理は ライセンス管理 USB キーだけでなく プログラム側でも処理しているためです usbmem_mxapi.exe は更新されても 既存固有データはそのまま利用可能です 評価版ではライセンス管理 USB キーの接続は不要です 評価版には発行可能なライセンス数に制限はありません ただし ユーザ固有データは生成されません SDK 付属の固有データしか使えません 評価版を利用するすべてのユーザの USB メモリドングルのデータは他のユーザによって読み込み 解読可能です 評価版のセキュリティは確保されません 14

Ⅵ. USB メモリドングルの操作 SDK 付属 API DLL/LIB には以下 API が含まれます Init_MatrixAPI USB メモリドングル API を初期化する Release_MatrixAPI USB メモリドングル API を開放する GetVersionAPI USB メモリドングル API のバージョン番号を返す Dongle_Count USB ポートに接続されている USB メモリドングル数を返す Dongle_MemSize メモリサイズを返す ( バイト ) Dongle_Version USB メモリドングルのバージョン番号を返す Dongle_ReadData 1 番目から n 番目までのデータフィールドからデータを読み込む Dongle_ReadDataEx m 番目から n 番目までのデータフィールドからデータを読み込む Dongle_WriteData 1 番目から n 番目までのデータフィールドにデータを書き込む Dongle_WriteDataEx M 番目から n 番目までのデータフィールドにデータを書き込む Dongle_ReadSerNr シリアル番号を読み込む Dongle_WriteKey 128 ビットの TEA 秘密鍵を書き込む Dongle_GetKeyFlag 128 ビットの TEA 秘密鍵が USB メモリドングルに書き込まれているか確認 する Dongle_EncryptData 8 バイトのデータブロックを USB メモリドングルに暗号化させる Dongle_DecryptData 8 バイトのデータブロックを USB メモリドングルに復号化させる 15

操作手順 もっとも単純な使い方は 正当なライセンスが書き込まれた USB メモリドングルが接続している かどうかを確認します 1. 他の API を呼び出す前に Init_MatrixAPI を呼び出す 2. Dongle_Count で接続している USB メモリドングル数を確認 3. Release_MatrixAPI で API 操作を終了 Init_MatrixAPI(); short count = Dongle_Count(85); Release_MatrixAPI(); if( count <= 0 ) { // 未接続 return; } API DLL ファイルを認証するには USB メモリドングルに秘密鍵を事前に設定します 1. 他のAPI を呼び出す前にInit_MatrixAPI を呼び出す 2. Dongle_Count で接続している USB メモリドングル数を確認 3. ランダム数を2 つ生成して Dongle_EncryptData 呼び出して暗号化 4. 暗号化データをアプリケーションプログラム側で復号化 暗号化前のデータと一致することを確認 5. Release_MatrixAPI で API 操作を終了 秘密鍵書き込み Init_MatrixAPI(); short count = Dongle_Count(85); if( count <= 0 ) { // 未接続 return; } long key[4]; 16

key[0] = 1111111; key[1] = 2222222; key[2] = 3333333; key[3] = 4444444; Dongle_WriteKey( UserCode, key, 1, 85 ); Release_MatrixAPI(); API DLL 認証 #include mxtea.h Init_MatrixAPI(); short count = Dongle_Count(85); if( count <= 0 ) { // 未接続 return; } long data[2], data1[2] data1[0] = data[0] = GetTickCount64(); data1[1] = data[1] = time(null); short ret = Dongle_EncryptData(UserCode, data, 1, 85 ); if( ret < 0 ) return; long key[4]; key[0] = 1111111; key[1] = 2222222; key[2] = 3333333; key[3] = 4444444; MxApp_DecryptData( key, data ); if( data[0] == data1[0] && data[1] == data1[1] ) // ok Release_MatrixAPI(); メモリフィールドにデータ ( 暗号化したもの ) を書き込んで確認する方法なども考えられます シリアル番号を利用すると USB キードングル事に異なるデータの保管可能になります 17

Ⅶ ネイティブ API 説明 ネイティブプログラムであるダイナミックライブラリ Matrix32mem.DLL / スタリックライブラリに含まれるAPI を説明します Init_MatrixAPI 説明 API を初期化します 他 API を呼び出す前に 必ず呼び出してください 呼出し Short Init_MatrixAPI() 引数 なし 戻り値 0 成功 Release_MatrixAPI 説明 API を開放します API を使い終わったら 必ず呼び出してください 呼出し Short Release_MatrixAPI() 引数 なし 戻り値 なし GetVersionAPI 説明 API のバージョン番号を返します 呼出し Long GetVersionAPI() 引数 なし 戻り値 バージョン番号の 上位 2 バイト = メジャーバージョン 下位 2 バイト = マイナーバージョン 18

Dongle_Count 説明 引数で指定されたポートに装着された USB メモリドングル数を返します 返されるのは Init_MatrixAPI 呼出し時点の接続ドングル数です Init_MatrixAPI 呼び出し以降にドングルを抜 き差しすると正しいドングル数は取得できません 呼出し short Dongle_Count( short PortNr ); 引数 PortNr U ( Acii 85 ) 戻り値 指定ポートに装着されたドングル数 0 ドングルが接続されていない 重要 : ドングル操作 API は Init_MatrixAPI 呼び出し時点の接続ドングルを操作対象とします Init_MatrixAPI 呼び出し時点でドングルが接続していたらたら 仮に その後 仮に その後ドングルを抜き取っても新しい状態は反映されません Release_MatrixAPI を呼び出し 再度 Init_MatrixAPI を呼び出すとその時点の状態が操作対象となります ドングル抜き差し検出 API で抜き差しは追跡できます Dongle_MemSize 説明 バイト単位でメモリサイズを返します 呼出し short Dongle_MemSize( Short DngNr, short PortNr ) 引数 DngNr USB メモリドングルの番号 1 PortNr U ( Ascii 85 ) 戻り値 バイト単位のメモリサイズ -1 DngNr にドングルが見つからない -26 ドングルが見つからない 注 ) データフィールドサイズは 4 バイト固定のため データフィールド数は この関数の戻り値から算出できま す 1 1 つのポートに複数のドングルが装着できるため ポート番号に加えて この引数でドングルの番号を指定しなければな りません 19

Dongle_Version 説明 ドングルソフトウェアのバージョン番号を返します 呼出し long Dongle_Version( short DngNr, short PortNr ) 引数 DngNr ドングルの番号 2 PortNr U ( Ascii 85 ) 戻り値 ドングルソフトウェアのバージョン番号 3 または 下記参照 -1 DngNr にドングルが見つからない -26 ドングルが見つからない Dongle_ReadData 説明ドングルの内臓メモリの第第 1 データフィールドから指定フィールド数分のデータを読み込みます 4 呼出し short Dongle_ReadData( long UserCode, long *Data, short Count, short DngNr, short Port Nr ) 引数 UserCode 割り当てられたユーザコード 5 *Data データフィールドから読み込んだデータをセットする配列 6 Count 読み込むデータフィールド数 DngNr ドングルの番号 7 Port Nr U ( Ascii 85 ) 戻り値 読み込まれたデータフィールド数 -1 DngNr にドングルが見つからない -2 ユーザコードエラー -26 ドングルが見つからない 2 1 つのポートに複数のドングルが装着できるため ポート番号に加えて この引数でドングルの番号を指定する必要が あります 3 上位 2 バイトは メジャーバージョンを表し 下位 2 バイトはマイナーバージョンを表します 4 例えばデータフィールド数が 3 ならば 第 1 から第 3 データフィールドのデータを読み込みます 5 ドングル内のユーザコードと一致しなければなりません 6 short Count で指定する数以上のサイズがなければなりません 7 1 つのポートに複数のドングルが装着できるため ポート番号に加えて この引数でドングルの番号を指定する必要が あります 20

Dongle_ReadDataEx 説明 ドングルの内臓メモリの任意のデータフィールドから指定フィールド数分のデータを読み 込みます 8 呼出し short Dongle_ReadDataEx( long UserCode, long *Data, short Fpos, short Count, short DngNr, short Port Nr ) 引数 UserCode 割り当てられたユーザコー 9 *Data 10 データフィールドから読み込んだデータをセットする配列 Fpos Count 読み込みを開始するデータフィールド番号 読み込むデータフィールド数 DngNr ドングルの番号 11 戻り値 PortNr ドングルが装着されているポート番号 LPT では 1~3 USB は U ( Ascii 85 ) 読み込まれたデータフィールド数 -1 DngNr にドングルが見つからない -2 ユーザコードエラー -26 ドングルが見つからない 注 )UserCode が一致していないとデータを読み込めません 8 例えば 5 番目のデータフィールドから 3 つのデータフィールド数を読み込むならば 第 5 から第 7 データフィールドのデータを取得できます 9 ドングル内のユーザコードと一致しなければなりません 10 short Count で指定する数以上のサイズがなければなりません 11 1つのポートに複数のドングルが装着できるため ポート番号に加えて この引数でドングルの番号を指定する必要が あります 7 21

Dongle_WriteData 説明ドングル内臓メモリの第第 1 データフィールドから指定フィールド数分のフィールドにデータを書き込みます 12 呼出し short Dongle_WriteData( long UserCode, long *Data, short Count, short DngNr, short Port Nr ) 引数 UserCode 割り当てられたユーザコード 13 *Data データフィールドに書き込むデータをセットした配列 14 Count 書き込むデータフィールド数 DngNr ドングルの番号 15 PortNr U ( Ascii 85 ) 戻り値 書き込まれたデータフィールド数 -1 DngNr にドングルが見つからない -2 ユーザコードエラー -26 ドングルが見つからない 12 例えばデータフィールド数が 3 ならば 第 1 から第 3 データフィールドにデータを書き込みます 13 ドングル内のユーザコードと一致しなければなりません 14 short Count で指定する数以上のサイズがなければなりません 15 1 つのポートに複数のドングルが装着できるため ポート番号に加えて この引数でドングルの番号を指定する必要が あります 22

Dongle_WriteDataEx 説明 ドングル内臓メモリの任意のデータフィールドから指定フィールド数分のフィールドにデ ータを書き込みます 16 呼出し short Dongle_WriteDataEx( long UserCode, long *Data, short Fpos, short Count, short DngNr, short Port Nr ) 引数 UserCode 割り当てられたユーザコード 17 *Data データフィールドに書き込むデータをセットした配列 18 Fpos 書き込みを開始するデータフィールド番号 Count 書き込むデータフィールド数 DngNr ドングルの番号 19 PortNr U ( Ascii 85 ) 戻り値 書き込まれたデータフィールド数 -1 DngNr にドングルが見つからない -2 ユーザコードエラー -26 ドングルが見つからない 16 例えば 書き込みを開始するデータフィールドが3 データフィールド数が 3 ならば 第 3から第 5データフィールドにデータを書き込みます 17 ドングル内のユーザコードと一致しなければなりません 18 short Count で指定する数以上のサイズがなければなりません 19 1つのポートに複数のドングルが装着できるため ポート番号に加えて この引数でドングルの番号を指定する必要が あります 23

Dongle_ReadSerNr 説明 ドングルのシリアル番号を読み込みます 呼出し long Dongle_ReadSerNr ( long UserCode, short DngNr, short PortNr ) 引数 UserCode 割り当てられたユーザコード 20 DngNr ドングルの番号 21 PortNr U ( Ascii 85 ) 戻り値 指定ドングルのシリアル番号 -1 DngNr にドングルが見つからない -2 ユーザコードエラー -26 ドングルが見つからない 20 ドングル内のユーザコードと一致しなければなりません 21 1 つのポートに複数のドングルが装着できるため ポート番号に加えて この引数でドングルの番号を指定する必要が あります 24

Dongle_WriteKey 説明 128 ビットの TEA 秘密鍵を書き込みます 呼出し short Dongle_WriteKey( long UserCode, unsigned long* KeyData, short DngNr, short PortNr ) 引数 UserCode 割り当てられたユーザコード 22 * KeyData 書き込むデータをセットしたバッファへのポインタ DngNr ドングルの番号 23 PortNr U ( Ascii 85 ) 戻り値 >0 で書き込み成功 0 鍵を保存できなかった -1 DngNr にドングルが見つからない -2 ユーザコードエラー -26 ドングルが見つからない 22 ドングル内のユーザコードと一致しなければなりません 23 1 つのポートに複数のドングルが装着できるため ポート番号に加えて この引数でドングルの番号を指定する必要が あります 25

Dongle_GetKeyFlag 説明 128 ビットの TEA 秘密鍵がドングルに書き込まれているか確認します 呼出し short Dongle_GetKeyFlag( long UserCode, short DngNr, short PortNr ) 引数 UserCode 割り当てられたユーザコード 24 DngNr ドングルの番号 25 PortNr U ( Ascii 85 ) 戻り値 キーが存在するならば1 存在しなければ 0 または下記参照 -1 DngNr にドングルが見つからない -2 ユーザコードエラー -26 ドングルが見つからない 注 )128 ビット TEA キーはドングルから読み込むことはできませんが この関数で存在するかどうかを確認する ことはできます すべてのバイトが 0 の TEA キーは 0 に設定された有効なキーです 24 ドングル内のユーザコードと一致しなければなりません 25 1 つのポートに複数のドングルが装着できるため ポート番号に加えて この引数でドングルの番号を指定する必要が あります 26

Dongle_EncryptData 説明 8 バイトのデータブロックをドングルに暗号化させます USB メモリはハードウェアで暗号 / 復号化機能を有していません API で暗号化します 呼出し short Dongle_EncryptData( long UserCode, unsigned long* DataBlock, short DngNr, short PortNr ) 引数 UserCode 割り当てられたユーザコード 26 * DataBlock 暗号化する 8 バイトのデータブロックへののポインタ DngNr ドングルの番号 27 PortNr U ( Ascii 85 ) 戻り値 >0 で成功 または下記参照 -1 DngNr にドングルが見つからない -2 ユーザコードエラー -26 ドングルが見つからない 26 ドングル内のユーザコードと一致しなければなりません 27 1 つのポートに複数のドングルが装着できるため ポート番号に加えて この引数でドングルの番号を指定する必要が あります 27

Dongle_DecryptData 説明 8 バイトのデータブロックを復号化します USB メモリはハードウェアで暗号 / 復号化 機能を有していません API で復号化します 呼出し short Dongle_DecryptData( long UserCode, unsigned long* DataBlock, short DngNr, short PortNr ) 引数 UserCode 割り当てられたユーザコード 28 *DataBlock 復号化する 8 バイトのデータブロックへののポインタ DngNr ドングルの番号 29 PortNr U ( Ascii 85 ) 戻り値 >0 で成功 または下記参照 -1 DngNr にドングルが見つからない -2 ユーザコードエラー -26 ドングルが見つからない 28 ドングル内のユーザコードと一致しなければなりません 29 1 つのポートに複数のドングルが装着できるため ポート番号に加えて この引数でドングルの番号を指定する 必要があります

USB メモリライセンス認証 ドングル抜き差し検出 API ドングル操作は別にドングルの抜き差しを検出する API を提供します _mxint16 Init_UsbMemDetect(void (*OnConnect)(void*),void (*OnDisconnect)(void*),void* parg) _mxint16 Release_UsbMemDetect(); Init_UsbMemDetect メソッドは 第一引数にドングルが接続されたときに呼び出される ( コールバックされる ) 関数 第二引数に抜き取られたときに呼び出される関数 第三引数にコールバックされる関数に引数として渡されるデータを指定して呼び出します Init によりドングル抜き差し検出のためのスレッドが開始されます OnConnect, OnDisconnect コールバック関数でドングルが抜き差しされたときの処理 を行います Release_UsbMemDetect は Init_UsbMemDetect が開始したスレッドを終了して 抜き差し 検出を停止します アプリケーションプログラムは Init_UsbMemDetect を呼び出しても 呼び出し時点でドングルが接続されているかどうかは分かりません 呼び出し以降の抜き差しを検出するのみです 呼び出し時点にドングルが接続しているかどうかは ドングル操作 API の Dongle_Count で確認してください 29

USB メモリライセンス認証 Ⅷ マネージ API.NET プログラムはマネージドプログラムである Matrix32memClass.DLL を参照して API ク ラスを利用できます ネームスペース : matrix32mem Matrix32mem ネームスペースには 2 つのクラスが含まれます クラス : API, Detect API クラスは USB メモリドングルを操作するメソッドを公開します Detect クラスはドン グルの抜き差しを検出するために利用します API クラスネイティブ API に対応するメソッドを公開します ポート番号 ( U 又は 85 ) の指定は不要です short Init(); short Release(); short Count(); long VersionAPI(); short MemSize(short dngnr); long Model(short dngnr); long Version(short dngnr); long ReadSerNr(int UserCode, int dngnr); short ReadData(int UserCode, array<int>^ data, short count, short dngnr); short ReadDataEx(int UserCode, array<int>^ data, short pos, short count, short dngnr); short WriteData(int UserCode, array<int>^ data, short count, short dngnr); short WriteDataEx(int UserCode, array<int>^ data, short pos, short count, short dngnr); short WriteKey(int UserCode, array<unsigned int>^ key, short dngnr); short GetKeyFlag(int UserCode, short dngnr); short EncryptData(int UserCode, array<unsigned int>^ datablock, short dngnr); short DecryptData(int UserCode, array<unsigned int>^ datablock, short dngnr); 30

USB メモリライセンス認証 重要 : API クラスは Init 呼び出し時点の接続ドングルを操作対象とします Init 呼び出し時点でドングルが接続していたら 仮に その後ドングルを抜き取っても新しい状態は反映されません Release を呼び出し 再度 Init を呼び出すとその時点の状態が操作対象となります ドングル抜き差し検出 API で抜き差しは追跡できます Detect クラスこのクラスを利用することで ドングルの抜き差しイベントをアプリケーションプログラムで検出できるようになります delegate void UsbMemDetectDelegate(IntPtr arg); short Init(UsbMemDetectDelegate^ onconnect, UsbMemDetectDelegate^ ondisconnect); short Release(); Init メソッドは 第一引数にドングルが接続されたときに呼び出される ( コールバックさ れる ) 関数を 第二引数に抜き取られたときに呼び出される関数を指定して呼び出します Init によりドングル抜き差し検出のためのスレッドが開始されます OnConnect, OnDisconnect コールバック関数でドングルが抜き差しされたときの処理 を行います Release メソッドは Init が開始したスレッドを終了します このクラスはフォームクラスで使うようにしてください アプリケーションプログラムは Init を呼び出しても 呼び出し時点でドングルが接続され ているかどうかは分かりません 呼び出し以降の抜き差しを検出するのみです 呼び出し 時点にドングルが接続しているかどうかは API クラスの Count で確認してください 31