ObjetoBlsKey
Objeto de algoritmo de cifrado de curva elíptica
El objeto BlsKey es un objeto utilizado en fibjs para representar una clave BLS. Se puede utilizar para crear, importar, exportar y manipular claves BLS. La clave BLS es un método de cifrado de clave pública que se usa comúnmente para autenticación y firma de datos, y tiene las características de proporcionar una alta velocidad de ejecución al mismo tiempo que garantiza la seguridad.
El objeto BlsKey proporciona varios métodos constructores para cargar claves desde diferentes formatos de clave. También proporciona algunas propiedades y métodos públicos como toString(), clone(), name, publicKey(), etc., así como algunos métodos estáticos, como from(), etc. Puede utilizar estos métodos para manipular objetos BlsKey.
Además, el objeto BlsKey tiene atributos de miembro como isPrivate() y toJSON(key = ""), que se pueden usar para consultar si la clave es una clave privada y exportar la representación en formato JSON del objeto.
El objeto BlsKey proporciona un conjunto de API flexibles y potentes para administrar fácilmente claves BLS e implementar requisitos de seguridad como autenticación y firma de datos.
A continuación usamos un ejemplo simple para demostrar cómo usar el objeto BlsKey para firmar y 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ón de herencia
Constructor
BlsKey
Construya BlsKey a partir de la clave en formato JSON
1new BlsKey(Object jsonKey);
Parámetros de llamada:
- jsonKey: Objeto, clave en formato JSON
El formato de jsonKey admite los dos tipos siguientes de claves privadas:
1
2
3
4
5
6{
"kty": "EC",
"crv": "BLS12381_G1",
"x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i",
"d": "TXNvJBBG3h23H5hFJcnRZmYd_j1TqpwtJOllYGU3yyw"
}
Clave pública BLS:
1
2
3
4
5{
"kty": "EC",
"crv": "BLS12381_G1",
"x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i"
}
función estática
aggregateSignature
Fusionar un conjunto de firmas en una sola firma
1static Buffer BlsKey.aggregateSignature(Array sigs);
Parámetros de llamada:
- sigs: Matriz, un conjunto de firmas que se fusionarán
Resultados de devolución:
- Buffer, devuelve la firma única fusionada
aggregatePublicKey
Fusionar un conjunto de claves públicas en una única clave pública
1static BlsKey BlsKey.aggregatePublicKey(Array keys);
Parámetros de llamada:
- keys: Matriz, un conjunto de claves públicas que se fusionarán
Resultados de devolución:
- BlsKey, devuelve la clave pública única fusionada
recover
Recuperar clave pública a partir de firma recuperable, solo admite secp256k1
1
2static ECKey BlsKey.recover(Buffer data,
Buffer sig) async;
Parámetros de llamada:
Resultados de devolución:
- ECKey, devuelve un objeto que contiene la clave pública
from
Cargar una clave en formato DER
1
2static PKey BlsKey.from(Buffer DerKey,
String password = "");
Parámetros de llamada:
- DerKey:Buffer, clave en formato DER
- password: Cadena, contraseña de descifrado
Resultados de devolución:
- PKey, devuelve un objeto que contiene la clave
Cargar una clave en formato PEM
1
2static PKey BlsKey.from(String pemKey,
String password = "");
Parámetros de llamada:
- pemKey: Cadena, clave en formato PEM
- password: Cadena, contraseña de descifrado
Resultados de devolución:
- PKey, devuelve un objeto que contiene la clave
Cargar una clave en formato JSON
1static PKey BlsKey.from(Object jsonKey);
Parámetros de llamada:
- jsonKey: Objeto, clave en formato JSON
Resultados de devolución:
- PKey, devuelve un objeto que contiene la clave
El formato de jsonKey admite los siguientes cuatro tipos de claves privadas 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=="
}
Clave pública RSA:
1
2
3
4
5{
"kty": "RSA",
"n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=",
"e": "AQAB"
}
Clave privada 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"
}
Clave pública CE:
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
propiedades de miembros
bbs_suite
Cadena, conjunto de cifrado firmado BBS, el valor predeterminado es Bls12381Sha256, se puede modificar a Bls12381Shake256, solo admite la curva BLS12-381-G2
1String BlsKey.bbs_suite;
curve
Cadena, devuelve el nombre de la curva elíptica del algoritmo actual
1readonly String BlsKey.curve;
name
Cadena, devuelve el nombre del algoritmo actual
1readonly String BlsKey.name;
keySize
Entero, devuelve la longitud de la contraseña del algoritmo actual en bits
1readonly Integer BlsKey.keySize;
alg
Cadena, devuelve y establece el algoritmo de firma del objeto actual.
1readonly String BlsKey.alg;
publicKey
PKey, devuelve la clave pública de la clave actual
1readonly PKey BlsKey.publicKey;
Resultados de devolución:
- la clave pública de la clave actual
función miembro
bbsSign
Firme un conjunto de mensajes utilizando la clave privada actual, que solo admite la curva BLS12-381-G2
1
2Buffer BlsKey.bbsSign(Array messages,
Object opts = {}) async;
Parámetros de llamada:
- messages: Matriz, especifica la matriz de mensajes que se firmará
- opts: Objeto, especificar opciones de firma
Resultados de devolución:
- Buffer, devuelve el mensaje firmado
opts admite los siguientes parámetros:
1
2
3{
header: Buffer | string // specified header for signature, default is empty
}
bbsVerify
Verifique la firma usando la clave pública actual, solo admite la curva BLS12-381-G2
1
2
3Boolean BlsKey.bbsVerify(Array messages,
Buffer sig,
Object opts = {}) async;
Parámetros de llamada:
- messages: Matriz, especifica la matriz de mensajes completa
- sig:Buffer, especifique la firma a verificar
- opts: Objeto, especificar opciones de verificación
Resultados de devolución:
- Boolean, devuelve el resultado verificado
opts admite los siguientes parámetros:
1
2
3{
header: Buffer | string // specified header for signature, default is empty
}
proofGen
Genere un certificado utilizando la clave pública actual y la firma, solo admite la curva BLS12-381-G2
1
2
3
4Buffer BlsKey.proofGen(Buffer sig,
Array messages,
Array idx,
Object opts = {}) async;
Parámetros de llamada:
- sig:Buffer, especifica la firma utilizada al generar el certificado
- messages: Matriz, especifica la matriz de mensajes completa
- idx: Matriz, especifica el índice de mensajes utilizado al generar pruebas, el índice se basa en 1
- opts: Objeto, especificar opciones de prueba
Resultados de devolución:
- Buffer, devuelve la prueba generada
opts admite los siguientes parámetros:
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
Utilice la clave pública actual para verificar el certificado, que solo admite la curva BLS12-381-G2
1
2
3
4Boolean BlsKey.proofVerify(Array messages,
Array idx,
Buffer proof,
Object opts = {}) async;
Parámetros de llamada:
- messages: Matriz, especifica una matriz de mensajes filtrados según el índice.
- idx: Matriz, especifica el índice del mensaje utilizado en la prueba, el índice se basa en 1
- proof:Buffer, especifique la prueba generada
- opts: Objeto, especificar opciones de prueba
Resultados de devolución:
- Boolean, devuelve el resultado verificado
opts admite los siguientes parámetros:
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
Calcule la clave compartida de la curva elíptica Diffie-Hellman (ECDH) utilizando el algoritmo actual
1Buffer BlsKey.computeSecret(ECKey publicKey) async;
Parámetros de llamada:
- publicKey:ECKey, especifique la clave pública de la otra parte
Resultados de devolución:
- Buffer, devuelve la clave secreta compartida calculada
isPrivate
Consultar si la clave actual es una clave privada
1Boolean BlsKey.isPrivate();
Resultados de devolución:
- Boolean, es Verdadero y representa la clave privada
clone
copiar la clave actual
1PKey BlsKey.clone();
Resultados de devolución:
- PKey, el objeto de copia de la clave actual
pem
Devuelve la codificación en formato PEM de la clave actual.
1String BlsKey.pem();
Resultados de devolución:
- String, Codificación en formato PEM de la clave actual.
der
Devuelve la codificación en formato DER de la clave actual.
1Buffer BlsKey.der();
Resultados de devolución:
- Buffer, la codificación en formato DER de la clave actual
json
Devuelve la codificación en formato jwt de la clave actual.
1Object BlsKey.json(Object opts = {});
Parámetros de llamada:
- opts: Objeto, especificar opciones de exportación
Resultados de devolución:
- Object, la codificación en formato jwt de la clave actual
opts admite los siguientes parámetros:
1
2
3{
compress: false // specify whether to output public key in compressed form
}
Las curvas que soportan la compresión son: secp192r1, secp192k1, secp256r1, secp256k1, BrainpoolP256r1, secp384r1, BrainpoolP384r1, BrainpoolP512r1, secp521r1, sm2.
equals
Compare dos claves públicas/privadas para ver si son iguales
1Boolean BlsKey.equals(object key);
Parámetros de llamada:
- key:object, especifique la clave pública/privada de la otra parte
Resultados de devolución:
- Boolean, si son iguales, devuelve verdadero
encrypt
Cifrar datos utilizando la clave pública de cifrado del algoritmo actual
1Buffer BlsKey.encrypt(Buffer data) async;
Parámetros de llamada:
- data:Buffer, especifique los datos que se cifrarán
Resultados de devolución:
- Buffer, devuelve los datos cifrados
decrypt
Descifrar datos utilizando la clave privada de contraseña del algoritmo actual
1Buffer BlsKey.decrypt(Buffer data) async;
Parámetros de llamada:
- data:Buffer, especifique los datos a descifrar
Resultados de devolución:
- Buffer, devuelve los datos descifrados
sign
Firmar datos utilizando la clave privada criptográfica del algoritmo actual
1
2Buffer BlsKey.sign(Buffer data,
Object opts = {}) async;
Parámetros de llamada:
- data:Buffer, Especifique los datos que se van a firmar. Cuando el algoritmo es RSA, el parámetro de entrada debe ejecutarse con el algoritmo especificado por alg.hash
- opts: Objeto, especificar opciones de firma
Resultados de devolución:
- Buffer, devolver los datos firmados
opts admite los siguientes parámetros:
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
Verificar datos utilizando la clave pública criptográfica del algoritmo actual
1
2
3Boolean BlsKey.verify(Buffer data,
Buffer sign,
Object opts = {}) async;
Parámetros de llamada:
- data:Buffer, especifique los datos a verificar
- sign:Buffer, especifique la firma a verificar
- opts: Objeto, especificar opciones de verificación
Resultados de devolución:
- Boolean, devuelve el resultado verificado
opts admite los siguientes parámetros:
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
Devuelve la representación de cadena del objeto. Generalmente, se devuelve "[Objeto nativo]". El objeto se puede volver a implementar de acuerdo con sus propias características.
1String BlsKey.toString();
Resultados de devolución:
- String, devuelve la representación de cadena del objeto
toJSON
Devuelve una representación en formato JSON del objeto, que generalmente devuelve una colección de propiedades legibles definidas por el objeto.
1Value BlsKey.toJSON(String key = "");
Parámetros de llamada:
- key: Cadena, no utilizada
Resultados de devolución:
- Value, devuelve un valor que contiene JSON serializable