18. Utils
utilsオブジェクトは、ユーティリティ機能を提供する組み込みオブジェクトです。
機能概要:
- UTF-8エンコード/デコードをサポートします。
- X.509証明書を解析する機能を提供します。
utils Global Object
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
utils.stringToUtf8bin() | 文字列データをUTF-8でエンコードします。 | 01.03.00+ | |
utils.utf8binToString() | バイナリデータをUTF-8でデコードします。 | 01.03.00+ | |
utils.getX509CertInfo() | X.509証明書情報を取得します。 | 02.02.00+ |
Details
utils.stringToUtf8bin(data)
文字列データをUTF-8でエンコードします。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
data | string | mandatory | 文字列データ | |
return | ArrayBuffer | - | エンコードされたバイナリデータ | 異常が発生した時は、例外となります。 |
utils.utf8binToString(data[,offset[,length]])
バイナリデータをUTF-8でデコードします。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
data | ArrayBuffer, Array[ArrayBuffer] | mandatory | バイナリデータ'ArrayBuffer' 又は'ArrayBuffer'の配列 を指定可能です。'ArrayBuffer'の配列 が指定された場合は、配列順にバイナリデータを連結してから、デコード処理を開始します。 | |
offset | number | optional | デコード開始位置オフセット 'data'に 'ArrayBuffer'の配列 を指定した場合は、バイナリデータを連結した後の全'data'に対するオフセットとなります。デフォルト値は0となります。 | 'length'を指定する場合は省略できません。 |
length | number | optional | デコード長[byte] デフォルト値は全'data'サイズからデコード開始位置オフセットを差し引いたサイズとなります。デフォルト値以下のサイズを指定する必要があります。 | 'offset'を指定した場合でも省略可能です。 |
return | {DecodedData}, undefined | - | {DecodedData} : デコードされたデータ デコードに失敗した場合、undefinedが返却されます。 | 異常が発生した時は、例外となります。 |
{DecodedData}
Name | Type | Summary | Note |
---|---|---|---|
.str | string | デコードされた文字列データ | |
.bin | ArrayBuffer | デコード対象のバイナリデータ末尾に1から3バイトまでの端数データが存在した場合に、端数データ部分をバイナリデータ出力します。 端数データが存在しない場合はundefinedとなります。 |
utils.getX509CertInfo(cert)
X.509証明書情報を取得します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
cert | string | mandatory | X.509証明書 PEM形式の文字列を指定します。改行コードには \n を使用します。 | |
return | {CertInfo}, null | - | {CertInfo} : X.509証明書情報 解析エラーの場合、nullが返却されます。 |
{CertInfo}
Name | Type | Summary | Note |
---|---|---|---|
.certVersion | number | バージョン | |
.serialNumber | string | シリアル番号 | |
.issuerName | string | 発行者 | |
.subjectName | string | 主体者 | |
.issuedOn | number | 発行日 (unixtime[ms]) | |
.expiresOn | number | 有効期限日 (unixtime[ms]) | |
.signedUsing | string | 署名アルゴリズム | |
.keySize | number | 公開鍵サイズ | |
.basicConstraints | string | 基本制約 | |
.subjectAltName | string | 主体者代替名 | |
.certType | string | 認証種別 | |
.keyUsage | string | 鍵使用法 | |
.extKeyUsage | string | 拡張鍵使用法 | |
.certificatePolicies | string | 証明書ポリシー |
オブジェクトの使用例
Sample 1
UTF-8でエンコードしたデータを、オフセットを使用して分割デコードするサンプルです。
この例は、.utf8binToString()のオフセットとレングスを活用しています。
マルチバイト文字の切れ目を考慮せずに、分割可能であることを示しています。
var testStr_1 = 'Thank you Teşekkür ありがとう';
print(testStr_1);
var testEnc_1 = utils.stringToUtf8bin(testStr_1);
print(ab2Hex_00(testEnc_1));
var chunk = 7;
for(var n = 0; n < 20; n++) {
var testDec_1 = utils.utf8binToString(testEnc_1, 0, chunk + n);
print(('00' + n).substr(-2) + '_1:' + testDec_1['str']);
//if(testDec_1['bin']) print(ab2Hex_00(testDec_1['bin']));
var rest = testDec_1['bin'];
var len = 0;
if(rest) len = rest.byteLength;
var testDec_2 = utils.utf8binToString(testEnc_1, chunk + n - len);
print(('00' + n).substr(-2) + '_2:' + testDec_2['str']);
//if(testDec_2['bin']) print(ab2Hex_00(testDec_2['bin']));
}
function ab2Hex_00(ab) {
ret_str = '';
var a = new Uint8Array(ab);
for(var i = 0; i < a.length; i++) {
ret_str += ('00' + a[i].toString(16).toUpperCase()).substr(-2);
}
return ret_str;
}
Sample 2
UTF-8でエンコードしたデータを2つに分割し、個々にデコードするサンプルです。
この例は、デコード対象がストリームデータの場合に活用できます。
マルチバイト文字の切れ目を考慮せずに、分割可能であることを示しています。
var testStr_1 = 'Thank you Teşekkür ありがとう';
print(testStr_1);
var testEnc_1 = utils.stringToUtf8bin(testStr_1);
print(ab2Hex_00(testEnc_1));
var chunk = 7;
for(var n = 0; n < 20; n++) {
var chunk_1 = testEnc_1.slice(0, chunk + n);
var chunk_2 = testEnc_1.slice(chunk + n);
var testDec_1 = utils.utf8binToString(chunk_1);
print(('00' + n).substr(-2) + '_1:' + testDec_1['str']);
//if(testDec_1['bin']) print(ab2Hex_00(testDec_1['bin']));
var rest = testDec_1['bin'];
var testDec_2 = utils.utf8binToString([rest, chunk_2]);
print(('00' + n).substr(-2) + '_2:' + testDec_2['str']);
//if(testDec_2['bin']) print(ab2Hex_00(testDec_2['bin']));
}
function ab2Hex_00(ab) {
ret_str = '';
var a = new Uint8Array(ab);
for(var i = 0; i < a.length; i++) {
ret_str += ('00' + a[i].toString(16).toUpperCase()).substr(-2);
}
return ret_str;
}
Sample 3
X.509証明書情報を取得するサンプルです。
var ca = '-----BEGIN CERTIFICATE-----\n' +
'SIGD0jCCArqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB6MQswCQYDVQQGEwJKUDEO\n' +
'MAwGA1UECAwFSXdhdGUxFTATBgNVBAoMDE1vYmljb21tIEx0ZDEcMBoGA1UEAwwT\n' +
//........
'HvMvDtFO71gaEtIkpejHGLgGhQK1dQ==\n' +
'-----END CERTIFICATE-----\n';
var info = utils.getX509CertInfo(ca);
if(info) {
for(var key in info) {
if(key == 'issuedOn' || key == 'expiresOn') {
var date = new Date(info[key]);
print(key + ':', date.toString());
} else {
print(key + ':', info[key]);
}
}
} else print("Cert parse error");
Updated: 2024-01-19