ObjectBlsKey
Objecte d'algoritme de xifratge de corba el·líptica
L'objecte BlsKey és un objecte utilitzat en fibjs per representar una clau BLS. Es pot utilitzar per crear, importar, exportar i manipular claus BLS. La clau BLS és un mètode de xifratge de clau pública que s'utilitza habitualment per a l'autenticació i la signatura de dades, i té les característiques de proporcionar una alta velocitat d'execució alhora que garanteix la seguretat.
L'objecte BlsKey proporciona diversos mètodes constructors per carregar claus de diferents formats de clau. També proporciona algunes propietats i mètodes públics com toString(), clone(), name, publicKey(), etc., així com alguns mètodes estàtics, com ara from(), etc. Podeu utilitzar aquests mètodes per manipular objectes BlsKey.
A més, l'objecte BlsKey té atributs de membre com ara isPrivate() i toJSON(key = ""), que es poden utilitzar per consultar si la clau és una clau privada i exportar la representació en format JSON de l'objecte.
L'objecte BlsKey proporciona un conjunt d'API flexibles i potents per gestionar fàcilment les claus BLS i implementar requisits de seguretat com ara l'autenticació i la signatura de dades.
A continuació fem servir un exemple senzill per demostrar com utilitzar l'objecte BlsKey per signar i verificar:
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);
relació hereditària
Constructor
BlsKey
Construeix BlsKey a partir de la clau en format JSON
1new BlsKey(Object jsonKey);
Paràmetres de trucada:
- jsonKey: Objecte, clau en format JSON
El format de jsonKey admet els dos tipus de claus privades següents:
1
2
3
4
5
6{
"kty": "EC",
"crv": "BLS12381_G1",
"x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i",
"d": "TXNvJBBG3h23H5hFJcnRZmYd_j1TqpwtJOllYGU3yyw"
}
Clau pública Bls:
1
2
3
4
5{
"kty": "EC",
"crv": "BLS12381_G1",
"x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i"
}
funció estàtica
aggregateSignature
Combina un conjunt de signatures en una única signatura
1static Buffer BlsKey.aggregateSignature(Array sigs);
Paràmetres de trucada:
- sigs: Matriu, un conjunt de signatures que s'han de combinar
Resultats de retorn:
- Buffer, retorna la signatura única combinada
aggregatePublicKey
Combina un conjunt de claus públiques en una única clau pública
1static BlsKey BlsKey.aggregatePublicKey(Array keys);
Paràmetres de trucada:
- keys: Matriu, un conjunt de claus públiques que s'han de combinar
Resultats de retorn:
- BlsKey, retorna la clau pública única combinada
recover
Recupereu la clau pública de la signatura recuperable, només admet secp256k1
1
2static ECKey BlsKey.recover(Buffer data,
Buffer sig) async;
Paràmetres de trucada:
Resultats de retorn:
- ECKey, retorna un objecte que conté la clau pública
from
Carregueu una clau en format DER
1
2static PKey BlsKey.from(Buffer DerKey,
String password = "");
Paràmetres de trucada:
- DerKey:Buffer, clau en format DER
- password: Cadena, contrasenya de desxifrat
Resultats de retorn:
- PKey, retorna un objecte que conté la clau
Carregueu una clau en format PEM
1
2static PKey BlsKey.from(String pemKey,
String password = "");
Paràmetres de trucada:
- pemKey: Cadena, clau en format PEM
- password: Cadena, contrasenya de desxifrat
Resultats de retorn:
- PKey, retorna un objecte que conté la clau
Carregueu una clau en format JSON
1static PKey BlsKey.from(Object jsonKey);
Paràmetres de trucada:
- jsonKey: Objecte, clau en format JSON
Resultats de retorn:
- PKey, retorna un objecte que conté la clau
El format de jsonKey admet els quatre tipus de claus privades RSA següents:
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=="
}
Clau pública RSA:
1
2
3
4
5{
"kty": "RSA",
"n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=",
"e": "AQAB"
}
Clau privada EC:
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"
}
Clau pública EC:
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
propietats dels membres
bbs_suite
Cadena, conjunt de xifratge signat BBS, per defecte és Bls12381Sha256, es pot modificar a Bls12381Shake256, només admet la corba BLS12-381-G2
1String BlsKey.bbs_suite;
curve
Cadena, retorna el nom de la corba el·líptica de l'algorisme actual
1readonly String BlsKey.curve;
name
String, retorna el nom de l'algorisme actual
1readonly String BlsKey.name;
keySize
Enter, retorna la longitud actual de la contrasenya de l'algorisme en bits
1readonly Integer BlsKey.keySize;
alg
String, retorna i estableix l'algoritme de signatura de l'objecte actual
1readonly String BlsKey.alg;
publicKey
PKey, retorna la clau pública de la clau actual
1readonly PKey BlsKey.publicKey;
Resultats de retorn:
- la clau pública de la clau actual
funció de membre
bbsSign
Signa un conjunt de missatges amb la clau privada actual, només compatible amb la corba BLS12-381-G2
1
2Buffer BlsKey.bbsSign(Array messages,
Object opts = {}) async;
Paràmetres de trucada:
- messages: Matriu, especifica la matriu de missatges que s'ha de signar
- opts: Objecte, especifica les opcions de signatura
Resultats de retorn:
- Buffer, retorna el missatge signat
opts admet els paràmetres següents:
1
2
3{
header: Buffer | string // specified header for signature, default is empty
}
bbsVerify
Verifiqueu la signatura mitjançant la clau pública actual, només admet la corba BLS12-381-G2
1
2
3Boolean BlsKey.bbsVerify(Array messages,
Buffer sig,
Object opts = {}) async;
Paràmetres de trucada:
- messages: Matriu, especifica la matriu de missatges completa
- sig:Buffer, especifiqueu la signatura a verificar
- opts: Objecte, especifiqueu opcions de verificació
Resultats de retorn:
- Boolean, retorna el resultat verificat
opts admet els paràmetres següents:
1
2
3{
header: Buffer | string // specified header for signature, default is empty
}
proofGen
Genereu un certificat utilitzant la clau pública i la signatura actuals, només admet la corba BLS12-381-G2
1
2
3
4Buffer BlsKey.proofGen(Buffer sig,
Array messages,
Array idx,
Object opts = {}) async;
Paràmetres de trucada:
- sig:Buffer, especifica la signatura utilitzada en generar el certificat
- messages: Matriu, especifica la matriu de missatges completa
- idx: Matriu, especifica l'índex de missatges utilitzat en generar proves, l'índex es basa en 1
- opts: Objecte, especifiqueu opcions de prova
Resultats de retorn:
- Buffer, retorna la prova generada
opts admet els paràmetres següents:
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
Utilitzeu la clau pública actual per verificar el certificat, només admet la corba BLS12-381-G2
1
2
3
4Boolean BlsKey.proofVerify(Array messages,
Array idx,
Buffer proof,
Object opts = {}) async;
Paràmetres de trucada:
- messages: Matriu, especifica una matriu de missatges filtrats segons l'índex
- idx: Matriu, especifica l'índex de missatges utilitzat a la prova, l'índex es basa en 1
- proof:Buffer, especifiqueu la prova generada
- opts: Objecte, especifiqueu opcions de prova
Resultats de retorn:
- Boolean, retorna el resultat verificat
opts admet els paràmetres següents:
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
Calcula la clau compartida de la corba el·líptica Diffie-Hellman (ECDH) utilitzant l'algoritme actual
1Buffer BlsKey.computeSecret(ECKey publicKey) async;
Paràmetres de trucada:
- publicKey:ECKey, especifiqueu la clau pública de l'altra part
Resultats de retorn:
- Buffer, retorna la clau secreta compartida calculada
isPrivate
Consulta si la clau actual és una clau privada
1Boolean BlsKey.isPrivate();
Resultats de retorn:
- Boolean, és True i representa la clau privada
clone
copiar la clau actual
1PKey BlsKey.clone();
Resultats de retorn:
- PKey, l'objecte de còpia de la clau actual
pem
Retorna la codificació en format PEM de la clau actual
1String BlsKey.pem();
Resultats de retorn:
- String, codificació en format PEM de la clau actual
der
Retorna la codificació en format DER de la clau actual
1Buffer BlsKey.der();
Resultats de retorn:
- Buffer, la codificació en format DER de la clau actual
json
Retorna la codificació en format jwt de la clau actual
1Object BlsKey.json(Object opts = {});
Paràmetres de trucada:
- opts: Objecte, especifiqueu les opcions d'exportació
Resultats de retorn:
- Object, la codificació en format jwt de la clau actual
opts admet els paràmetres següents:
1
2
3{
compress: false // specify whether to output public key in compressed form
}
Les corbes que admeten la compressió són: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2
equals
Compareu dues claus públiques/privades per veure si són iguals
1Boolean BlsKey.equals(object key);
Paràmetres de trucada:
- key:object, especifiqueu la clau pública/privada de l'altra part
Resultats de retorn:
- Boolean, si són iguals, retorna true
encrypt
Xifra les dades amb la clau pública de xifrat de l'algoritme actual
1Buffer BlsKey.encrypt(Buffer data) async;
Paràmetres de trucada:
- data:Buffer, especifiqueu les dades que voleu xifrar
Resultats de retorn:
- Buffer, retorna les dades xifrades
decrypt
Desxifra les dades amb la clau privada de la contrasenya actual de l'algoritme
1Buffer BlsKey.decrypt(Buffer data) async;
Paràmetres de trucada:
- data:Buffer, especifiqueu les dades a desxifrar
Resultats de retorn:
- Buffer, retorna les dades desxifrades
sign
Signeu les dades amb la clau privada criptogràfica actual de l'algoritme
1
2Buffer BlsKey.sign(Buffer data,
Object opts = {}) async;
Paràmetres de trucada:
- data:Buffer, especifiqueu les dades a signar. Quan l'algorisme és RSA, el paràmetre d'entrada s'ha d'executar amb l'algorisme especificat per alg.hash
- opts: Objecte, especifica les opcions de signatura
Resultats de retorn:
- Buffer, retorneu les dades signades
opts admet els paràmetres següents:
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
Verifiqueu les dades mitjançant la clau pública criptogràfica de l'algoritme actual
1
2
3Boolean BlsKey.verify(Buffer data,
Buffer sign,
Object opts = {}) async;
Paràmetres de trucada:
- data:Buffer, especifiqueu les dades a verificar
- sign:Buffer, especifiqueu la signatura a verificar
- opts: Objecte, especifiqueu opcions de verificació
Resultats de retorn:
- Boolean, retorna el resultat verificat
opts admet els paràmetres següents:
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
Retorna la representació de cadena de l'objecte. En general, es retorna "[Objecte natiu]". L'objecte es pot tornar a implementar segons les seves pròpies característiques.
1String BlsKey.toString();
Resultats de retorn:
- String, retorna la representació de cadena de l'objecte
toJSON
Retorna una representació en format JSON de l'objecte, generalment retornant una col·lecció de propietats llegibles definides per l'objecte.
1Value BlsKey.toJSON(String key = "");
Paràmetres de trucada:
- key: Corda, no utilitzada
Resultats de retorn:
- Value, retorna un valor que conté JSON serializable