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
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 una clave en formato JSON
1new 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
1static 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
1static 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
2static ECKey BlsKey.recover(Buffer data,
Buffer sig) async;
Parámetros de llamada:
resultado devuelto:
- 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, 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
2static 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
1static 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
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
String, devuelve y establece el algoritmo de firma del objeto actual
1String BlsKey.alg;
publicKey
PKey, devuelve la clave pública de la clave actual
1readonly 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
1Buffer 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
1Boolean BlsKey.isPrivate();
resultado devuelto:
- Boolean, si es Verdadero significa clave privada
clone
copiar la clave actual
1PKey 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
1String 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
1Buffer 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
1Object 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
1Boolean 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
1Buffer 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
1Buffer 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
2Buffer 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
3Boolean 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
1String 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
1Value BlsKey.toJSON(String key = "");
Parámetros de llamada:
- key: Cadena, no utilizada
resultado devuelto:
- Value, que devuelve un valor serializable JSON