Oggetto oggetto incorporato

Oggetto BlsKey

Oggetto di crittografia a curva ellittica

L'oggetto BlsKey è l'oggetto utilizzato per rappresentare la chiave BLS in fibjs. Può essere utilizzato per creare, importare, esportare e manipolare chiavi BLS. La chiave BLS è un metodo di crittografia a chiave pubblica, solitamente utilizzato per la verifica dell'identità e la firma dei dati, che ha le caratteristiche di fornire un'elevata velocità di esecuzione garantendo allo stesso tempo la sicurezza.

L'oggetto BlsKey fornisce più metodi di costruzione per caricare chiavi da diversi formati di chiave. Fornisce anche alcune proprietà e metodi pubblici come toString(), clone(), name, publicKey(), ecc., così come alcuni metodi statici, come from(), ecc. È possibile utilizzare questi metodi per manipolare l'oggetto BlsKey.

Inoltre, l'oggetto BlsKey dispone di attributi membro come isPrivate() e toJSON(key = ""), che possono essere utilizzati per richiedere se la chiave è una chiave privata ed esportare la rappresentazione in formato JSON dell'oggetto.

L'oggetto BlsKey fornisce un set di API flessibili e potenti, che possono facilmente gestire le chiavi BLS e realizzare requisiti di sicurezza come la verifica dell'identità e la firma dei dati.

Di seguito utilizziamo un semplice esempio per dimostrare come utilizzare l'oggetto BlsKey per la firma e la verifica:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
var crypto = require('crypto'); // create a private key var privateKey = new crypto.BlsKey({ 'kty': 'EC', 'crv': 'BLS12-381-G1', 'x': 'TPk62yDxSISkoSBRPYkpO%tJmm0tZd4tJeLuCKVFv4UmBPfOQ2aDWrCifANam2wj', 'd': 'zE-pf24p-l0IT_lMcrX0gStTcsx_k1f7DnJmrN8V7ZU', }); // sign a message var message = '这是一条需要签名的消息'; var signature = privateKey.sign(message); // verify the signature var publicKey = privateKey.publicKey; var verify = publicKey.verify(message, signature); console.log('verification result:', verify);

rapporto ereditario

Costruttore

BlsKey

Costruisci BlsKey da una chiave in formato JSON

1
new BlsKey(Object jsonKey);

Parametri di chiamata:

  • jsonKey: Oggetto, digita in formato JSON

Il formato di jsonKey supporta i seguenti due tipi di chiave privata:

1 2 3 4 5 6
{ "kty": "EC", "crv": "BLS12381_G1", "x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i", "d": "TXNvJBBG3h23H5hFJcnRZmYd_j1TqpwtJOllYGU3yyw" }

Bls chiave pubblica:

1 2 3 4 5
{ "kty": "EC", "crv": "BLS12381_G1", "x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i" }

funzione statica

aggregateSignature

Unisci una serie di firme in un'unica firma

1
static Buffer BlsKey.aggregateSignature(Array sigs);

Parametri di chiamata:

  • sigs: Array, un insieme di firme da unire

risultato di ritorno:

  • Buffer, restituisce la firma singola unita

aggregatePublicKey

Unire un set di chiavi pubbliche in un'unica chiave pubblica

1
static BlsKey BlsKey.aggregatePublicKey(Array sigs);

Parametri di chiamata:

  • sigs: Array, un insieme di chiavi pubbliche da unire

risultato di ritorno:

  • BlsKey, restituisce la singola chiave pubblica combinata

recover

recuperare la chiave pubblica dalla firma recuperabile, supportato solo secp256k1

1 2
static ECKey BlsKey.recover(Buffer data, Buffer sig) async;

Parametri di chiamata:

  • data:Buffer, i dati originali della firma
  • sig:Buffer, la firma recuperabile

risultato di ritorno:

  • ECKey, restituisce un oggetto contenente la chiave pubblica

from

Carica una chiave in formato DER

1 2
static PKey BlsKey.from(Buffer DerKey, String password = "");

Parametri di chiamata:

  • DerKey:Buffer, la chiave in formato DER
  • password: stringa, password decrittografata

risultato di ritorno:

  • PKey, restituisce un oggetto contenente la chiave

Carica una chiave in formato PEM

1 2
static PKey BlsKey.from(String pemKey, String password = "");

Parametri di chiamata:

  • pemKey: Stringa, digita in formato PEM
  • password: stringa, password decrittografata

risultato di ritorno:

  • PKey, restituisce un oggetto contenente la chiave

Carica una chiave in formato JSON

1
static PKey BlsKey.from(Object jsonKey);

Parametri di chiamata:

  • jsonKey: Oggetto, digita in formato JSON

risultato di ritorno:

  • PKey, restituisce un oggetto contenente la chiave

Il formato di jsonKey supporta i seguenti quattro tipi di chiave privata RSA:

1 2 3 4 5 6 7 8 9 10 11
{ "kty": "RSA", "n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=", "e": "AQAB", "d": "agN2O9NxMHL1MTMi75WfL9Pxvl-KWXKqZSF6mjzAsF9iKI8euyHIXYFepzU8kual1RsjDhCnzvWqFvZplW8lXqrHf_P-rS_9Y4gBUw6pjnI_DnFIRwWHRvrUHHSCfWOdTCIKdOTkgLZuGFuhEY3RMIW0WSYejjLtftwy0RVxAzk=", "p": "6a4G1qmfwWmn1biigN7IVFlkbLf9oVe6g7rOmHxI-hn1GRxKDSVuAUrmR1IhuAnca9M0y7SD-7TUs6wjOxWxaw==", "q": "5ofkxFKdPBD0CQHMb9q13AMHUVe0rJ-hSjqqIBrmqApUOneyAcMV76M0QyIQnI2p3POa4Qu_7XChDwRVl7LlDQ==", "dp": "2mXGiGwCHl8j-FBWuID-1C6z-BRB3MBEVoeKPOOzxOPruatB3mWEGXsqG7A8SWgV9URxTI2K6P3J6Z7RUpBkvw==", "dq": "oagn5vfb5NQqnOpS9xkSsD67cfIj821ZSFlNFYhnuOzNVda7z_qCtnHm4zDPH0lEFXoKYMfBhfqWJpaugttjPQ==", "qi": "dqEQgxNmOVFrF4s776hTqeC6oEDila8EvpVb2F2ZvwAOLjCQ66OiAZK1BiYGHqUy0NeqNmtlsLSuBEZQZvqZwg==" }

Chiave pubblica RSA:

1 2 3 4 5
{ "kty": "RSA", "n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=", "e": "AQAB" }

Chiave privata CE:

1 2 3 4 5 6 7
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU", "d": "AfkIbUHXfW41njdpoKuqqKludcoLJS8D_oMEwkj-GVaXFNKccIoF5iKGu2c69kNDjo83R_7wyGlfRczsklkik1ST" }

Chiave pubblica CE:

1 2 3 4 5 6
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU" }

attributo membro

curve

Stringa, restituisce il nome della curva ellittica dell'algoritmo corrente

1
readonly String BlsKey.curve;

name

Stringa, restituisce il nome dell'algoritmo corrente

1
readonly String BlsKey.name;

keySize

Intero, restituisce la lunghezza della password dell'algoritmo corrente in bit

1
readonly Integer BlsKey.keySize;

alg

String, restituisce e imposta l'algoritmo di firma dell'oggetto corrente

1
String BlsKey.alg;

publicKey

PKey, restituisce la chiave pubblica della chiave corrente

1
readonly PKey BlsKey.publicKey;

risultato di ritorno:

  • la chiave pubblica della chiave corrente

funzione membro

computeSecret

Calcola un segreto condiviso Elliptic Curve Diffie-Hellman (ECDH) utilizzando l'algoritmo corrente

1
Buffer BlsKey.computeSecret(ECKey publicKey) async;

Parametri di chiamata:

  • publicKey:ECKey, specificando la chiave pubblica della controparte

risultato di ritorno:

  • Buffer, restituisce il segreto condiviso calcolato

isPrivate

Interroga se la chiave corrente è una chiave privata

1
Boolean BlsKey.isPrivate();

risultato di ritorno:

  • Boolean, se True significa chiave privata

clone

copia la chiave corrente

1
PKey BlsKey.clone();

risultato di ritorno:

  • PKey, l'oggetto copia della chiave corrente

pem

Restituisce la codifica del formato PEM della chiave corrente

1
String BlsKey.pem();

risultato di ritorno:

  • String, la codifica del formato PEM della chiave corrente

der

Restituisce la codifica del formato DER della chiave corrente

1
Buffer BlsKey.der();

risultato di ritorno:

  • Buffer, la codifica del formato DER della chiave corrente

json

Restituisce la codifica in formato jwt della chiave corrente

1
Object BlsKey.json(Object opts = {});

Parametri di chiamata:

  • opts: Oggetto, specifica le opzioni di esportazione

risultato di ritorno:

  • Object, la codifica del formato jwt della chiave corrente

opts supporta i seguenti parametri:

1 2 3
{ compress: false, 指定签名以压缩方式输出公钥 }

Le curve che supportano la compressione sono: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2


equals

Confronta se due chiavi pubbliche/private sono uguali

1
Boolean BlsKey.equals(PKey key);

Parametri di chiamata:

  • key:PKey, specificare la chiave pubblica/privata dell'altra parte

risultato di ritorno:

  • Boolean, restituisce true se uguale

encrypt

Crittografare i dati utilizzando la chiave pubblica crittografica dell'algoritmo corrente

1
Buffer BlsKey.encrypt(Buffer data) async;

Parametri di chiamata:

  • data:Buffer, specifica i dati da crittografare

risultato di ritorno:

  • Buffer, restituisce i dati crittografati

decrypt

Decrittografare i dati utilizzando la chiave privata crittografica dell'algoritmo corrente

1
Buffer BlsKey.decrypt(Buffer data) async;

Parametri di chiamata:

  • data:Buffer, specifica i dati da decrittografare

risultato di ritorno:

  • Buffer, restituisce i dati decrittografati

sign

Firma i dati utilizzando la chiave privata crittografica dell'algoritmo corrente

1 2
Buffer BlsKey.sign(Buffer data, Object opts = {}) async;

Parametri di chiamata:

  • data:Buffer, specifica i dati da firmare
  • opts: Oggetto, specifica le opzioni di firma

risultato di ritorno:

  • Buffer, restituisce i dati firmati

opts supporta i seguenti parametri:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
{ alg: 0, 指定签名的 hash 算法, 仅在 RSA 时有效, 缺省为 0. 支持算法: 0 = NONE, 1 = MD5, 2 = SHA1, 3 = SHA224, 4 = SHA256, 5 = SHA384, 6 = SHA512, 7 = RIPEMD160 to: pk, 指定验证方公钥, 仅在 ecsdsa 或 sm2 时有效 format: "der", 指定签名格式, 可选为 der 和 raw, 缺省为 der recoverable: false 指定返回可恢复签名, 仅在 secp256k1 有效 }

verify

Verificare i dati utilizzando la chiave pubblica crittografica dell'algoritmo corrente

1 2 3
Boolean BlsKey.verify(Buffer data, Buffer sign, Object opts = {}) async;

Parametri di chiamata:

  • data:Buffer, specificando i dati da convalidare
  • sign:Buffer, specificando la firma da verificare
  • opts: Oggetto, specifica le opzioni di autenticazione

risultato di ritorno:

  • Boolean, restituisce il risultato verificato

opts supporta i seguenti parametri:

1 2 3 4 5 6 7 8 9 10 11 12 13 14
{ alg: 0, 指定签名的 hash 算法, 仅在 RSA 时有效, 缺省为 0. 支持算法: 0 = NONE, 1 = MD5, 2 = SHA1, 3 = SHA224, 4 = SHA256, 5 = SHA384, 6 = SHA512, 7 = RIPEMD160 to: pk, 指定验证方公钥, 仅在 ecsdsa 或 sm2 时有效 format: "der", 指定签名格式, 可选为 der 和 raw, 缺省为 der }

toString

Restituisce la rappresentazione in stringa dell'oggetto, generalmente restituisce "[Native Object]", l'oggetto può essere reimplementato secondo le proprie caratteristiche

1
String BlsKey.toString();

risultato di ritorno:

  • String, restituisce una rappresentazione in forma di stringa dell'oggetto

toJSON

Restituisce la rappresentazione in formato JSON dell'oggetto, in genere restituisce una raccolta di proprietà leggibili definite dall'oggetto

1
Value BlsKey.toJSON(String key = "");

Parametri di chiamata:

  • key: stringa, non utilizzata

risultato di ritorno:

  • Value, che restituisce un valore serializzabile in JSON