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
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 da una chiave in formato JSON
1new 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
1static 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
1static 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
2static ECKey BlsKey.recover(Buffer data,
Buffer sig) async;
Parametri di chiamata:
risultato di ritorno:
- 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, 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
2static 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
1static 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
1readonly String BlsKey.curve;
name
Stringa, 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
String, restituisce e imposta l'algoritmo di firma dell'oggetto corrente
1String BlsKey.alg;
publicKey
PKey, restituisce la chiave pubblica della chiave corrente
1readonly 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
1Buffer 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
1Boolean BlsKey.isPrivate();
risultato di ritorno:
- Boolean, se True significa chiave privata
clone
copia la chiave corrente
1PKey BlsKey.clone();
risultato di ritorno:
- PKey, l'oggetto copia della chiave corrente
pem
Restituisce la codifica del formato PEM della chiave corrente
1String BlsKey.pem();
risultato di ritorno:
- String, la codifica del formato PEM della chiave corrente
der
Restituisce la codifica del formato DER della chiave corrente
1Buffer BlsKey.der();
risultato di ritorno:
- Buffer, la codifica del formato DER della chiave corrente
json
Restituisce la codifica in formato jwt della chiave corrente
1Object 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
1Boolean 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
1Buffer 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
1Buffer 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
2Buffer 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
3Boolean 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
1String 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
1Value BlsKey.toJSON(String key = "");
Parametri di chiamata:
- key: stringa, non utilizzata
risultato di ritorno:
- Value, che restituisce un valore serializzabile in JSON