OggettoBlsKey
Oggetto algoritmo di crittografia della curva ellittica
L'oggetto BlsKey è un oggetto utilizzato in fibjs per rappresentare una chiave BLS. Può essere utilizzato per creare, importare, esportare e manipolare chiavi BLS. La chiave BLS è un metodo di crittografia a chiave pubblica comunemente utilizzato per l'autenticazione e la firma dei dati e ha le caratteristiche di fornire un'elevata velocità di esecuzione garantendo al tempo stesso la sicurezza.
L'oggetto BlsKey fornisce vari metodi di costruzione per caricare chiavi da diversi formati di chiave. Fornisce inoltre alcune proprietà e metodi pubblici come toString(), clone(), name, publicKey(), ecc., nonché alcuni metodi statici, come from(), ecc. È possibile utilizzare questi metodi per manipolare gli oggetti BlsKey.
Inoltre, l'oggetto BlsKey dispone di attributi membro come isPrivate() e toJSON(key = ""), che possono essere utilizzati per verificare se la chiave è una chiave privata ed esportare la rappresentazione in formato JSON dell'oggetto.
L'oggetto BlsKey fornisce una serie di API flessibili e potenti per gestire facilmente le chiavi BLS e implementare requisiti di sicurezza come l'autenticazione 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
19var 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 dalla chiave in formato JSON
1new BlsKey(Object jsonKey);
Parametri di chiamata:
- jsonKey: Oggetto, chiave in formato JSON
Il formato di jsonKey supporta i seguenti due tipi di chiavi private:
1
2
3
4
5
6{
"kty": "EC",
"crv": "BLS12381_G1",
"x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i",
"d": "TXNvJBBG3h23H5hFJcnRZmYd_j1TqpwtJOllYGU3yyw"
}
Chiave pubblica Bls:
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
1static Buffer BlsKey.aggregateSignature(Array sigs);
Parametri di chiamata:
- sigs: Array, un insieme di firme da unire
Risultati restituiti:
- Buffer, restituisce la firma singola unita
aggregatePublicKey
Unisci un set di chiavi pubbliche in un'unica chiave pubblica
1static BlsKey BlsKey.aggregatePublicKey(Array keys);
Parametri di chiamata:
- keys: Array, un set di chiavi pubbliche da unire
Risultati restituiti:
- BlsKey, restituisce la singola chiave pubblica unita
recover
Recupera la chiave pubblica dalla firma recuperabile, supporta solo secp256k1
1
2static ECKey BlsKey.recover(Buffer data,
Buffer sig) async;
Parametri di chiamata:
Risultati restituiti:
- ECKey, restituisce un oggetto contenente la chiave pubblica
from
Carica una chiave in formato DER
1
2static PKey BlsKey.from(Buffer DerKey,
String password = "");
Parametri di chiamata:
- DerKey:Buffer, digitare il formato DER
- password: Stringa, password di decrittazione
Risultati restituiti:
- PKey, restituisce un oggetto contenente la chiave
Carica una chiave in formato PEM
1
2static PKey BlsKey.from(String pemKey,
String password = "");
Parametri di chiamata:
- pemKey: stringa, chiave in formato PEM
- password: Stringa, password di decrittazione
Risultati restituiti:
- PKey, restituisce un oggetto contenente la chiave
Carica una chiave in formato JSON
1static PKey BlsKey.from(Object jsonKey);
Parametri di chiamata:
- jsonKey: Oggetto, chiave in formato JSON
Risultati restituiti:
- PKey, restituisce un oggetto contenente la chiave
Il formato di jsonKey supporta i seguenti quattro tipi di chiavi private 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"
}
proprietà dei membri
bbs_suite
Stringa, suite di crittografia firmata BBS, l'impostazione predefinita è Bls12381Sha256, può essere modificata in Bls12381Shake256, supporta solo la curva BLS12-381-G2
1String BlsKey.bbs_suite;
curve
String, restituisce il nome della curva ellittica dell'algoritmo corrente
1readonly String BlsKey.curve;
name
String, restituisce il nome dell'algoritmo corrente
1readonly String BlsKey.name;
keySize
Intero, restituisce la lunghezza della password dell'algoritmo corrente in bit
1readonly Integer BlsKey.keySize;
alg
Stringa, restituisce e imposta l'algoritmo di firma dell'oggetto corrente
1readonly String BlsKey.alg;
publicKey
PKey, restituisce la chiave pubblica della chiave corrente
1readonly PKey BlsKey.publicKey;
Risultati restituiti:
- la chiave pubblica della chiave corrente
funzione membro
bbsSign
Firma una serie di messaggi utilizzando la chiave privata corrente, supportando solo la curva BLS12-381-G2
1
2Buffer BlsKey.bbsSign(Array messages,
Object opts = {}) async;
Parametri di chiamata:
- messages: Array, specifica l'array di messaggi da firmare
- opts: Oggetto, specifica le opzioni di firma
Risultati restituiti:
- Buffer, restituisce il messaggio firmato
opts supporta i seguenti parametri:
1
2
3{
header: Buffer | string // specified header for signature, default is empty
}
bbsVerify
Verifica la firma utilizzando la chiave pubblica corrente, supporta solo la curva BLS12-381-G2
1
2
3Boolean BlsKey.bbsVerify(Array messages,
Buffer sig,
Object opts = {}) async;
Parametri di chiamata:
- messages: Array, specifica l'array completo del messaggio
- sig:Buffer, specificare la firma da verificare
- opts: Oggetto, specifica le opzioni di verifica
Risultati restituiti:
- Boolean, restituisce il risultato verificato
opts supporta i seguenti parametri:
1
2
3{
header: Buffer | string // specified header for signature, default is empty
}
proofGen
Genera un certificato utilizzando la chiave pubblica e la firma correnti, supporta solo la curva BLS12-381-G2
1
2
3
4Buffer BlsKey.proofGen(Buffer sig,
Array messages,
Array idx,
Object opts = {}) async;
Parametri di chiamata:
- sig:Buffer, specifica la firma utilizzata durante la generazione del certificato
- messages: Array, specifica l'array completo del messaggio
- idx: Array, specifica l'indice del messaggio utilizzato durante la generazione delle prove, l'indice è basato su 1
- opts: Oggetto, specifica le opzioni di prova
Risultati restituiti:
- Buffer, restituisce la prova generata
opts supporta i seguenti parametri:
1
2
3
4{
header: Buffer | string, // specified header for signature, default is empty
proof_header: Buffer | string // specified header for proof, default is empty
}
proofVerify
Utilizza la chiave pubblica corrente per verificare il certificato, supportando solo la curva BLS12-381-G2
1
2
3
4Boolean BlsKey.proofVerify(Array messages,
Array idx,
Buffer proof,
Object opts = {}) async;
Parametri di chiamata:
- messages: Array, specifica un array di messaggi filtrati in base all'indice
- idx: Array, specifica l'indice del messaggio utilizzato nella prova, l'indice è basato su 1
- proof:Buffer, specificare la prova generata
- opts: Oggetto, specifica le opzioni di prova
Risultati restituiti:
- Boolean, restituisce il risultato verificato
opts supporta i seguenti parametri:
1
2
3
4{
header: Buffer | string, // specified header for signature, default is empty
proof_header: Buffer | string // specified header for proof, default is empty
}
computeSecret
Calcola la chiave condivisa Elliptic Curve Diffie-Hellman (ECDH) utilizzando l'algoritmo corrente
1Buffer BlsKey.computeSecret(ECKey publicKey) async;
Parametri di chiamata:
- publicKey:ECKey, specificare la chiave pubblica dell'altra parte
Risultati restituiti:
- Buffer, restituisce la chiave segreta condivisa calcolata
isPrivate
Interroga se la chiave corrente è una chiave privata
1Boolean BlsKey.isPrivate();
Risultati restituiti:
- Boolean, è True e rappresenta la chiave privata
clone
copia la chiave corrente
1PKey BlsKey.clone();
Risultati restituiti:
- PKey, l'oggetto copia della chiave corrente
pem
Restituisce la codifica del formato PEM della chiave corrente
1String BlsKey.pem();
Risultati restituiti:
- String, Codifica del formato PEM della chiave corrente
der
Restituisce la codifica del formato DER della chiave corrente
1Buffer BlsKey.der();
Risultati restituiti:
- Buffer, la codifica del formato DER della chiave corrente
json
Restituisce la codifica del formato jwt della chiave corrente
1Object BlsKey.json(Object opts = {});
Parametri di chiamata:
- opts: Oggetto, specifica le opzioni di esportazione
Risultati restituiti:
- Object, la codifica del formato jwt della chiave corrente
opts supporta i seguenti parametri:
1
2
3{
compress: false // specify whether to output public key in compressed form
}
Le curve che supportano la compressione sono: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2
equals
Confronta due chiavi pubblica/privata per vedere se sono la stessa cosa
1Boolean BlsKey.equals(object key);
Parametri di chiamata:
- key:object, specificare la chiave pubblica/privata dell'altra parte
Risultati restituiti:
- Boolean, se sono uguali, restituisce true
encrypt
Crittografare i dati utilizzando la chiave pubblica di crittografia dell'algoritmo corrente
1Buffer BlsKey.encrypt(Buffer data) async;
Parametri di chiamata:
- data:Buffer, specificare i dati da crittografare
Risultati restituiti:
- Buffer, restituisce i dati crittografati
decrypt
Decrittografare i dati utilizzando la chiave privata della password dell'algoritmo corrente
1Buffer BlsKey.decrypt(Buffer data) async;
Parametri di chiamata:
- data:Buffer, specificare i dati da decrittografare
Risultati restituiti:
- Buffer, restituisce i dati decrittografati
sign
Firmare i dati utilizzando la chiave privata crittografica dell'algoritmo corrente
1
2Buffer BlsKey.sign(Buffer data,
Object opts = {}) async;
Parametri di chiamata:
- data:Buffer, specificare i dati da firmare. Quando l'algoritmo è RSA, il parametro di input deve essere eseguito con l'algoritmo specificato da alg.hash
- opts: Oggetto, specifica le opzioni di firma
Risultati restituiti:
- Buffer, restituisce i dati firmati
opts supporta i seguenti parametri:
1
2
3
4
5{
alg: 0, // specify the hash algorithm for signing, only valid for RSA, default is 0. Supported algorithms: 0=NONE,1=MD5,2=SHA1,3=SHA224,4=SHA256,5=SHA384,6=SHA512,7=RIPEMD160
format: "der", // specify the signature format, default is der, supported formats: der, raw
recoverable: false // specify whether to return a recoverable signature, only valid for secp256k1
}
verify
Verificare i dati utilizzando la chiave pubblica crittografica dell'algoritmo corrente
1
2
3Boolean BlsKey.verify(Buffer data,
Buffer sign,
Object opts = {}) async;
Parametri di chiamata:
- data:Buffer, specificare i dati da verificare
- sign:Buffer, specificare la firma da verificare
- opts: Oggetto, specifica le opzioni di verifica
Risultati restituiti:
- Boolean, restituisce il risultato verificato
opts supporta i seguenti parametri:
1
2
3
4{
alg: 0, // specify the hash algorithm for signing, only valid for RSA, default is 0. Supported algorithms: 0=NONE,1=MD5,2=SHA1,3=SHA224,4=SHA256,5=SHA384,6=SHA512,7=RIPEMD160
format: "der" // specify the signature format, default is der, supported formats: der, raw
}
toString
Restituisce la rappresentazione in formato stringa dell'oggetto. Generalmente viene restituito "[Oggetto nativo]". L'oggetto può essere reimplementato in base alle proprie caratteristiche.
1String BlsKey.toString();
Risultati restituiti:
- String, restituisce la rappresentazione di stringa dell'oggetto
toJSON
Restituisce una rappresentazione in formato JSON dell'oggetto, generalmente restituendo una raccolta di proprietà leggibili definite dall'oggetto.
1Value BlsKey.toJSON(String key = "");
Parametri di chiamata:
- key: Stringa, non utilizzata
Risultati restituiti:
- Value, restituisce un valore contenente JSON serializzabile