Objeto incorporado

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 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);

relación de herencia

Constructor

BlsKey

Construya BlsKey a partir de la clave en formato JSON

1
new 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

1
static 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

1
static 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 2
static ECKey BlsKey.recover(Buffer data, Buffer sig) async;

Parámetros de llamada:

  • data:Buffer, los datos originales de la firma
  • sig:Buffer, firma recuperable

Resultados de devolución:

  • ECKey, devuelve un objeto que contiene la clave pública

from

Cargar una clave en formato DER

1 2
static 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 2
static 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

1
static 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

1
String BlsKey.bbs_suite;

curve

Cadena, devuelve el nombre de la curva elíptica del algoritmo actual

1
readonly String BlsKey.curve;

name

Cadena, devuelve el nombre del algoritmo actual

1
readonly String BlsKey.name;

keySize

Entero, devuelve la longitud de la contraseña del algoritmo actual en bits

1
readonly Integer BlsKey.keySize;

alg

Cadena, devuelve y establece el algoritmo de firma del objeto actual.

1
readonly String BlsKey.alg;

publicKey

PKey, devuelve la clave pública de la clave actual

1
readonly 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 2
Buffer 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 3
Boolean 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 4
Buffer 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 4
Boolean 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

1
Buffer 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

1
Boolean BlsKey.isPrivate();

Resultados de devolución:

  • Boolean, es Verdadero y representa la clave privada

clone

copiar la clave actual

1
PKey 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.

1
String 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.

1
Buffer 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.

1
Object 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

1
Boolean 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

1
Buffer 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

1
Buffer 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 2
Buffer 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 3
Boolean 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.

1
String 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.

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

Parámetros de llamada:

  • key: Cadena, no utilizada

Resultados de devolución:

  • Value, devuelve un valor que contiene JSON serializable