PromiseまたはCryptoProブラウザープラグイン統合のジェネレーターイテレーター

CryptoProブラウザープラグインを自転車に統合した経験を共有したいと思います。 猫へようこそ。 重い音節を前もって謝ります

私の自転車のモジュールの1つがデジタル署名機能になるように運命付けられていたことがたまたまありました。 サプライヤーのマニュアルを一目見ただけで、私はこのために1日置き、4時間以内にすべてを行うことを期待しています。 その結果、すべてが1週間のコーディングになりました:(。

フロントエンドを詳しく調べていないので、必要に応じてJavaScriptを使用しているため、プラグインを操作するための非同期コードを重要視しませんでした。

SDKからの非同期コード
function SignCreate(certSubjectName, dataToSign) { return new Promise(function(resolve, reject){ cadesplugin.async_spawn(function *(args) { try { var oStore = yield cadesplugin.CreateObjectAsync("CAPICOM.Store"); yield oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED); var CertificatesObj = yield oStore.Certificates; var oCertificates = yield CertificatesObj.Find( CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName); var Count = yield oCertificates.Count; if (Count == 0) { throw("Certificate not found: " + args[0]); } var oCertificate = yield oCertificates.Item(1); var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner"); yield oSigner.propset_Certificate(oCertificate); var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData"); yield oSignedData.propset_Content(dataToSign); var sSignedMessage = yield oSignedData.SignCades(oSigner, CADESCOM_CADES_BES); yield oStore.Close(); args[2](sSignedMessage); } catch (e) { args[3]("Failed to create signature. Error: " + GetErrorMessage(err)); } }, certSubjectName, dataToSign, resolve, reject); }); }
      
      







私は確かに16進コードのアセンブラーを読むシステムコーダーではありませんが、人生で初めて3日間このコードの意味を理解できなかったことを告白します。 約束とジェネレーターでドックを上げ、深く掘り下げて、cadesplugin.async_spawnが反復処理を行うジェネレーターを受け取ることを理解する必要がありました(フロントエンドの開発者が私を修正しますが、私はまだ理解していません)。

さらに、これはすぐに明らかになるわけではありませんが、javascriptプラグインでの作業は4つの方法で実装する必要があります。



プラグインが同期であることを理解する方法:cades_plaugin.hasOwnProperty( "CreateObject");

約束のあるブラウザであることを理解する方法:!! window.promise;

さらに、いつものように、IEは別の接続を必要とします。これは、ポリフィリックプロミス(プロミスとジェネレーターと同時にポリフィリック:)を理解しているためです)。

概念的なフレームワークが理解されると、さらにコーディングすることは技術的な問題でした。

ps署名が作成されるという唯一の不快な状況はFireFoxで検証されますが、作成されますがCromeでは検証されません。 問題は明確ではないので、CryptProフォーラムに投稿しました。

更新:pps CryptoProが私を救ってくれました。非同期コードで台無しになりました。 サポートサービスありがとうございます。



それは基本的にそれです。 誰かが時間と健康を救うことを願っています、tk。 CryptoProフォーラムから判断すると、同じ問題のために多くの人が苦しんでいます。



All Articles