ObjetBlsKey
Objet algorithme de chiffrement de courbe elliptique
L'objet BlsKey est un objet utilisé dans fibjs pour représenter une clé BLS. Il peut être utilisé pour créer, importer, exporter et manipuler des clés BLS. La clé BLS est une méthode de cryptage à clé publique couramment utilisée pour l'authentification et la signature de données, et présente les caractéristiques d'offrir une vitesse d'exécution élevée tout en garantissant la sécurité.
L'objet BlsKey fournit diverses méthodes de constructeur pour charger des clés à partir de différents formats de clés. Il fournit également certaines propriétés et méthodes publiques comme toString(), clone(), name, publicKey(), etc., ainsi que certaines méthodes statiques, telles que from(), etc. Vous pouvez utiliser ces méthodes pour manipuler des objets BlsKey.
De plus, l'objet BlsKey possède des attributs de membre tels que isPrivate() et toJSON(key = ""), qui peuvent être utilisés pour demander si la clé est une clé privée et exporter la représentation au format JSON de l'objet.
L'objet BlsKey fournit un ensemble d'API flexibles et puissantes pour gérer facilement les clés BLS et mettre en œuvre des exigences de sécurité telles que l'authentification et la signature des données.
Ci-dessous, nous utilisons un exemple simple pour montrer comment utiliser l'objet BlsKey pour la signature et la vérification :
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);
relation d'héritage
Constructeur
BlsKey
Construire BlsKey à partir d'une clé au format JSON
1new BlsKey(Object jsonKey);
Paramètres d'appel :
- jsonKey: Objet, clé au format JSON
Le format de jsonKey prend en charge les deux types de clés privées suivants :
1
2
3
4
5
6{
"kty": "EC",
"crv": "BLS12381_G1",
"x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i",
"d": "TXNvJBBG3h23H5hFJcnRZmYd_j1TqpwtJOllYGU3yyw"
}
Clé publique Bls :
1
2
3
4
5{
"kty": "EC",
"crv": "BLS12381_G1",
"x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i"
}
fonction statique
aggregateSignature
Fusionner un ensemble de signatures en une seule signature
1static Buffer BlsKey.aggregateSignature(Array sigs);
Paramètres d'appel :
- sigs: Array, un ensemble de signatures à fusionner
Résultats de retour :
- Buffer, renvoie la signature unique fusionnée
aggregatePublicKey
Fusionner un ensemble de clés publiques en une seule clé publique
1static BlsKey BlsKey.aggregatePublicKey(Array keys);
Paramètres d'appel :
- keys: Array, un ensemble de clés publiques à fusionner
Résultats de retour :
- BlsKey, renvoie la clé publique unique fusionnée
recover
Récupérer la clé publique à partir de la signature récupérable, prend uniquement en charge secp256k1
1
2static ECKey BlsKey.recover(Buffer data,
Buffer sig) async;
Paramètres d'appel :
Résultats de retour :
- ECKey, renvoie un objet contenant la clé publique
from
Charger une clé au format DER
1
2static PKey BlsKey.from(Buffer DerKey,
String password = "");
Paramètres d'appel :
- DerKey:Buffer, clé au format DER
- password: Chaîne, mot de passe de décryptage
Résultats de retour :
- PKey, renvoie un objet contenant la clé
Charger une clé au format PEM
1
2static PKey BlsKey.from(String pemKey,
String password = "");
Paramètres d'appel :
- pemKey: Chaîne, clé au format PEM
- password: Chaîne, mot de passe de décryptage
Résultats de retour :
- PKey, renvoie un objet contenant la clé
Charger une clé au format JSON
1static PKey BlsKey.from(Object jsonKey);
Paramètres d'appel :
- jsonKey: Objet, clé au format JSON
Résultats de retour :
- PKey, renvoie un objet contenant la clé
Le format de jsonKey prend en charge les quatre types de clés privées RSA suivants :
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=="
}
Clé publique RSA :
1
2
3
4
5{
"kty": "RSA",
"n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=",
"e": "AQAB"
}
Clé privée 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"
}
Clé publique CE :
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
propriétés des membres
bbs_suite
Chaîne, suite de chiffrement signée BBS, la valeur par défaut est Bls12381Sha256, peut être modifiée en Bls12381Shake256, prend uniquement en charge la courbe BLS12-381-G2
1String BlsKey.bbs_suite;
curve
String, renvoie le nom de la courbe elliptique de l'algorithme actuel
1readonly String BlsKey.curve;
name
String, renvoie le nom de l'algorithme actuel
1readonly String BlsKey.name;
keySize
Entier, renvoie la longueur actuelle du mot de passe de l'algorithme en bits
1readonly Integer BlsKey.keySize;
alg
String, renvoie et définit l'algorithme de signature d'objet actuel
1readonly String BlsKey.alg;
publicKey
PKey, renvoie la clé publique de la clé actuelle
1readonly PKey BlsKey.publicKey;
Résultats de retour :
- la clé publique de la clé actuelle
fonction membre
bbsSign
Signez un ensemble de messages en utilisant la clé privée actuelle, prenant uniquement en charge la courbe BLS12-381-G2
1
2Buffer BlsKey.bbsSign(Array messages,
Object opts = {}) async;
Paramètres d'appel :
- messages: Array, spécifie le tableau de messages à signer
- opts: Objet, spécifiez les options de signature
Résultats de retour :
- Buffer, renvoie le message signé
opts prend en charge les paramètres suivants :
1
2
3{
header: Buffer | string // specified header for signature, default is empty
}
bbsVerify
Vérifiez la signature à l'aide de la clé publique actuelle, prend uniquement en charge la courbe BLS12-381-G2
1
2
3Boolean BlsKey.bbsVerify(Array messages,
Buffer sig,
Object opts = {}) async;
Paramètres d'appel :
- messages: Array, spécifie le tableau complet des messages
- sig:Buffer, précisez la signature à vérifier
- opts: Objet, spécifiez les options de vérification
Résultats de retour :
- Boolean, renvoie le résultat vérifié
opts prend en charge les paramètres suivants :
1
2
3{
header: Buffer | string // specified header for signature, default is empty
}
proofGen
Générez un certificat en utilisant la clé publique et la signature actuelles, prend uniquement en charge la courbe BLS12-381-G2
1
2
3
4Buffer BlsKey.proofGen(Buffer sig,
Array messages,
Array idx,
Object opts = {}) async;
Paramètres d'appel :
- sig:Buffer, précise la signature utilisée lors de la génération du certificat
- messages: Array, spécifie le tableau complet des messages
- idx: Array, précise l'index du message utilisé lors de la génération des preuves, l'index est basé sur 1
- opts: Objet, spécifiez les options de preuve
Résultats de retour :
- Buffer, renvoie la preuve générée
opts prend en charge les paramètres suivants :
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
Utilisez la clé publique actuelle pour vérifier le certificat, prenant uniquement en charge la courbe BLS12-381-G2
1
2
3
4Boolean BlsKey.proofVerify(Array messages,
Array idx,
Buffer proof,
Object opts = {}) async;
Paramètres d'appel :
- messages: Array, spécifie un tableau de messages filtrés en fonction de l'index
- idx: Array, précise l'index du message utilisé dans la preuve, l'index est basé sur 1
- proof:Buffer, précisez la preuve générée
- opts: Objet, spécifiez les options de preuve
Résultats de retour :
- Boolean, renvoie le résultat vérifié
opts prend en charge les paramètres suivants :
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
Calculer la clé partagée Elliptic Curve Diffie-Hellman (ECDH) à l'aide de l'algorithme actuel
1Buffer BlsKey.computeSecret(ECKey publicKey) async;
Paramètres d'appel :
- publicKey:ECKey, précisez la clé publique de l'autre partie
Résultats de retour :
- Buffer, renvoie la clé secrète partagée calculée
isPrivate
Demander si la clé actuelle est une clé privée
1Boolean BlsKey.isPrivate();
Résultats de retour :
- Boolean, est True et représente la clé privée
clone
copier la clé actuelle
1PKey BlsKey.clone();
Résultats de retour :
- PKey, l'objet de copie de la clé actuelle
pem
Renvoie l'encodage au format PEM de la clé actuelle
1String BlsKey.pem();
Résultats de retour :
- String, encodage au format PEM de la clé actuelle
der
Renvoie l'encodage au format DER de la clé actuelle
1Buffer BlsKey.der();
Résultats de retour :
- Buffer, l'encodage au format DER de la clé actuelle
json
Renvoie l'encodage au format jwt de la clé actuelle
1Object BlsKey.json(Object opts = {});
Paramètres d'appel :
- opts: Objet, spécifiez les options d'exportation
Résultats de retour :
- Object, l'encodage au format jwt de la clé actuelle
opts prend en charge les paramètres suivants :
1
2
3{
compress: false // specify whether to output public key in compressed form
}
Les courbes prenant en charge la compression sont : secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2.
equals
Comparez deux clés publiques/privées pour voir si elles sont identiques
1Boolean BlsKey.equals(object key);
Paramètres d'appel :
- key:object, précisez la clé publique/privée de l'autre partie
Résultats de retour :
- Boolean, s'ils sont identiques, renvoie vrai
encrypt
Chiffrer les données à l'aide de la clé publique de chiffrement de l'algorithme actuel
1Buffer BlsKey.encrypt(Buffer data) async;
Paramètres d'appel :
- data:Buffer, précisez les données à chiffrer
Résultats de retour :
- Buffer, renvoie les données chiffrées
decrypt
Décrypter les données à l'aide de la clé privée du mot de passe de l'algorithme actuel
1Buffer BlsKey.decrypt(Buffer data) async;
Paramètres d'appel :
- data:Buffer, précisez les données à décrypter
Résultats de retour :
- Buffer, renvoie les données décryptées
sign
Signer les données à l'aide de la clé privée cryptographique de l'algorithme actuel
1
2Buffer BlsKey.sign(Buffer data,
Object opts = {}) async;
Paramètres d'appel :
- data:Buffer, spécifiez les données à signer. Lorsque l'algorithme est RSA, le paramètre d'entrée doit être exécuté avec l'algorithme spécifié par alg.hash
- opts: Objet, spécifiez les options de signature
Résultats de retour :
- Buffer, renvoie les données signées
opts prend en charge les paramètres suivants :
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
Vérifier les données à l'aide de la clé publique cryptographique de l'algorithme actuel
1
2
3Boolean BlsKey.verify(Buffer data,
Buffer sign,
Object opts = {}) async;
Paramètres d'appel :
- data:Buffer, précisez les données à vérifier
- sign:Buffer, précisez la signature à vérifier
- opts: Objet, spécifiez les options de vérification
Résultats de retour :
- Boolean, renvoie le résultat vérifié
opts prend en charge les paramètres suivants :
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
Renvoie la représentation sous forme de chaîne de l'objet. Généralement, "[Native Object]" est renvoyé. L'objet peut être réimplémenté en fonction de ses propres caractéristiques.
1String BlsKey.toString();
Résultats de retour :
- String, renvoie la représentation sous forme de chaîne de l'objet
toJSON
Renvoie une représentation au format JSON de l'objet, renvoyant généralement une collection de propriétés lisibles définies par l'objet.
1Value BlsKey.toJSON(String key = "");
Paramètres d'appel :
- key: Chaîne, non utilisée
Résultats de retour :
- Value, renvoie une valeur contenant du JSON sérialisable