Objeto objeto incorporado

Objeto BlsKey

Objeto de criptografía de curva elíptica

El objeto BlsKey es el objeto utilizado para representar la clave BLS en fibjs. Se puede usar para construir, importar, exportar y manipular claves BLS. La clave BLS es un método de cifrado de clave pública, generalmente utilizado para la verificación de identidad y la firma de datos, que tiene las características de proporcionar una alta velocidad de ejecución al tiempo que garantiza la seguridad.

El objeto BlsKey proporciona varios métodos de construcción para cargar claves de 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 el objeto 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, que pueden administrar fácilmente las claves BLS y cumplir con los requisitos de seguridad, como la verificación de identidad y la firma de datos.

A continuación, usamos un ejemplo simple para demostrar cómo usar el objeto BlsKey para firma y verificación:

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 una 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 siguientes dos tipos de clave privada:

1 2 3 4 5 6
{ "kty": "EC", "crv": "BLS12381_G1", "x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i", "d": "TXNvJBBG3h23H5hFJcnRZmYd_j1TqpwtJOllYGU3yyw" }

Bls clave pública:

1 2 3 4 5
{ "kty": "EC", "crv": "BLS12381_G1", "x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i" }

función estática

aggregateSignature

Combinar 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 para fusionar

resultado devuelto:

  • Buffer, devuelve la firma única fusionada

aggregatePublicKey

Combinar un conjunto de claves públicas en una sola clave pública

1
static BlsKey BlsKey.aggregatePublicKey(Array sigs);

Parámetros de llamada:

  • sigs: Array, un conjunto de claves públicas para fusionar

resultado devuelto:

  • BlsKey, devuelve la clave pública única combinada

recover

recuperar la clave pública de la firma recuperable, solo se 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, la firma recuperable

resultado devuelto:

  • 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, la clave en formato DER
  • password: Cadena, contraseña descifrada

resultado devuelto:

  • 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 descifrada

resultado devuelto:

  • PKey, devuelve un objeto que contiene la clave

Cargue una clave en formato JSON

1
static PKey BlsKey.from(Object jsonKey);

Parámetros de llamada:

  • jsonKey: Objeto, clave en formato JSON

resultado devuelto:

  • PKey, devuelve un objeto que contiene la clave

El formato de jsonKey admite los siguientes cuatro tipos de clave privada 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" }

atributo de miembro

curve

String, 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

String, devuelve y establece el algoritmo de firma del objeto actual

1
String BlsKey.alg;

publicKey

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

1
readonly PKey BlsKey.publicKey;

resultado devuelto:

  • la clave pública de la clave actual

función miembro

computeSecret

Calcula un secreto compartido de curva elíptica Diffie-Hellman (ECDH) usando el algoritmo actual

1
Buffer BlsKey.computeSecret(ECKey publicKey) async;

Parámetros de llamada:

  • publicKey:ECKey, especificando la clave pública de la contraparte

resultado devuelto:

  • Buffer, devuelve el secreto compartido calculado

isPrivate

Consultar si la clave actual es una clave privada

1
Boolean BlsKey.isPrivate();

resultado devuelto:

  • Boolean, si es Verdadero significa clave privada

clone

copiar la clave actual

1
PKey BlsKey.clone();

resultado devuelto:

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

resultado devuelto:

  • String, la codificación de formato PEM de la clave actual

der

Devuelve la codificación en formato DER de la clave actual

1
Buffer BlsKey.der();

resultado devuelto:

  • Buffer, la codificación en formato DER de la clave actual

json

Devuelve la codificación de formato jwt de la clave actual

1
Object BlsKey.json(Object opts = {});

Parámetros de llamada:

  • opts: Objeto, especifica las opciones de exportación

resultado devuelto:

  • Object, la codificación en formato jwt de la clave actual

opts admite los siguientes parámetros:

1 2 3
{ compress: false, 指定签名以压缩方式输出公钥 }

Las curvas que soportan compresión son: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2


equals

Comparar si dos claves públicas/privadas son iguales

1
Boolean BlsKey.equals(PKey key);

Parámetros de llamada:

  • key:PKey, especifique la clave pública/privada de la otra parte

resultado devuelto:

  • Boolean, devuelve verdadero si es lo mismo

encrypt

Cifrar datos utilizando la clave pública criptográfica del algoritmo actual

1
Buffer BlsKey.encrypt(Buffer data) async;

Parámetros de llamada:

  • data:Buffer, especifica los datos a cifrar

resultado devuelto:

  • Buffer, devuelve los datos cifrados

decrypt

Descifrar los datos utilizando la clave privada criptográfica del algoritmo actual

1
Buffer BlsKey.decrypt(Buffer data) async;

Parámetros de llamada:

  • data:Buffer, especifica los datos a descifrar

resultado devuelto:

  • 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, especifica los datos a firmar
  • opts: Objeto, especifica opciones de firma

resultado devuelto:

  • Buffer, devuelve los datos firmados

opts admite los siguientes parámetros:

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

Verifique los 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, especificando los datos a validar
  • sign:Buffer, especificando la firma a verificar
  • opts: Objeto, especifica las opciones de autenticación

resultado devuelto:

  • Boolean, devuelve el resultado verificado

opts admite los siguientes parámetros:

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

Devuelve la representación de cadena del objeto, generalmente devuelve "[Objeto nativo]", el objeto se puede volver a implementar de acuerdo con sus propias características

1
String BlsKey.toString();

resultado devuelto:

  • String, devuelve una representación de cadena del objeto

toJSON

Devuelve la representación en formato JSON del objeto, 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

resultado devuelto:

  • Value, que devuelve un valor serializable JSON