Objekt BlsKey
Elliptische-Kurven-Kryptographie-Objekt
Das BlsKey-Objekt ist das Objekt, das verwendet wird, um den BLS-Schlüssel in fibjs darzustellen. Es kann zum Erstellen, Importieren, Exportieren und Bearbeiten von BLS-Schlüsseln verwendet werden. Der BLS-Schlüssel ist eine Verschlüsselungsmethode mit öffentlichem Schlüssel, die normalerweise zur Identitätsprüfung und Datensignatur verwendet wird und die Eigenschaften hat, eine hohe Ausführungsgeschwindigkeit bereitzustellen und gleichzeitig die Sicherheit zu gewährleisten.
Das BlsKey-Objekt bietet mehrere Konstruktionsmethoden zum Laden von Schlüsseln aus verschiedenen Schlüsselformaten. Es bietet auch einige öffentliche Eigenschaften und Methoden wie toString(), clone(), name, publicKey() usw. sowie einige statische Methoden wie from() usw. Sie können diese Methoden verwenden, um das BlsKey-Objekt zu manipulieren.
Darüber hinaus verfügt das BlsKey-Objekt über Mitgliedsattribute wie isPrivate() und toJSON(key = ""), mit denen abgefragt werden kann, ob der Schlüssel ein privater Schlüssel ist, und die Darstellung des Objekts im JSON-Format exportiert werden kann.
Das BlsKey-Objekt bietet eine Reihe flexibler und leistungsstarker APIs, mit denen BLS-Schlüssel einfach verwaltet und Sicherheitsanforderungen wie Identitätsprüfung und Datensignatur umgesetzt werden können.
Im Folgenden verwenden wir ein einfaches Beispiel, um zu demonstrieren, wie das BlsKey-Objekt zum Signieren und Verifizieren verwendet wird:
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);
Erbverhältnis
Konstrukteur
BlsKey
Erstellen Sie BlsKey aus einem Schlüssel im JSON-Format
1new BlsKey(Object jsonKey);
Aufrufparameter:
- jsonKey: Objekt, Schlüssel im JSON-Format
Das Format von jsonKey unterstützt die folgenden zwei Arten von privaten Schlüsseln:
1
2
3
4
5
6{
"kty": "EC",
"crv": "BLS12381_G1",
"x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i",
"d": "TXNvJBBG3h23H5hFJcnRZmYd_j1TqpwtJOllYGU3yyw"
}
Öffentlicher Bls-Schlüssel:
1
2
3
4
5{
"kty": "EC",
"crv": "BLS12381_G1",
"x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i"
}
statische Funktion
aggregateSignature
Führen Sie eine Reihe von Signaturen zu einer einzigen Signatur zusammen
1static Buffer BlsKey.aggregateSignature(Array sigs);
Aufrufparameter:
- sigs: Array, ein Satz von Signaturen, die zusammengeführt werden sollen
Rückgabeergebnis:
- Buffer, gibt die zusammengeführte Einzelsignatur zurück
aggregatePublicKey
Führen Sie einen Satz öffentlicher Schlüssel zu einem einzigen öffentlichen Schlüssel zusammen
1static BlsKey BlsKey.aggregatePublicKey(Array sigs);
Aufrufparameter:
- sigs: Array, ein Satz öffentlicher Schlüssel, die zusammengeführt werden sollen
Rückgabeergebnis:
- BlsKey, gibt den kombinierten einzelnen öffentlichen Schlüssel zurück
recover
Stellen Sie den öffentlichen Schlüssel aus einer wiederherstellbaren Signatur wieder her, nur secp256k1 wird unterstützt
1
2static ECKey BlsKey.recover(Buffer data,
Buffer sig) async;
Aufrufparameter:
Rückgabeergebnis:
- ECKey, gibt ein Objekt zurück, das den öffentlichen Schlüssel enthält
from
Laden Sie einen Schlüssel im DER-Format
1
2static PKey BlsKey.from(Buffer DerKey,
String password = "");
Aufrufparameter:
- DerKey:Buffer, der Schlüssel im DER-Format
- password: String, entschlüsseltes Passwort
Rückgabeergebnis:
- PKey, gibt ein Objekt zurück, das den Schlüssel enthält
Laden Sie einen Schlüssel im PEM-Format
1
2static PKey BlsKey.from(String pemKey,
String password = "");
Aufrufparameter:
- pemKey: String, Schlüssel im PEM-Format
- password: String, entschlüsseltes Passwort
Rückgabeergebnis:
- PKey, gibt ein Objekt zurück, das den Schlüssel enthält
Laden Sie einen Schlüssel im JSON-Format
1static PKey BlsKey.from(Object jsonKey);
Aufrufparameter:
- jsonKey: Objekt, Schlüssel im JSON-Format
Rückgabeergebnis:
- PKey, gibt ein Objekt zurück, das den Schlüssel enthält
Das Format von jsonKey unterstützt die folgenden vier Arten von privaten RSA-Schlüsseln:
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=="
}
Öffentlicher RSA-Schlüssel:
1
2
3
4
5{
"kty": "RSA",
"n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=",
"e": "AQAB"
}
Privater EC-Schlüssel:
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"
}
Öffentlicher EC-Schlüssel:
1
2
3
4
5
6{
"kty": "EC",
"crv": "P-521",
"x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL",
"y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU"
}
Mitgliedsattribut
curve
String, gibt den Namen der elliptischen Kurve des aktuellen Algorithmus zurück
1readonly String BlsKey.curve;
name
String, gibt den aktuellen Algorithmusnamen zurück
1readonly String BlsKey.name;
keySize
Ganzzahl, gibt die aktuelle Passwortlänge des Algorithmus in Bits zurück
1readonly Integer BlsKey.keySize;
alg
String, gibt den Signaturalgorithmus des aktuellen Objekts zurück und legt ihn fest
1String BlsKey.alg;
publicKey
PKey, gibt den öffentlichen Schlüssel des aktuellen Schlüssels zurück
1readonly PKey BlsKey.publicKey;
Rückgabeergebnis:
- der öffentliche Schlüssel des aktuellen Schlüssels
Mitgliedsfunktion
computeSecret
Berechnet ein Elliptic Curve Diffie-Hellman (ECDH) Shared Secret unter Verwendung des aktuellen Algorithmus
1Buffer BlsKey.computeSecret(ECKey publicKey) async;
Aufrufparameter:
- publicKey:ECKey, der den öffentlichen Schlüssel der Gegenpartei angibt
Rückgabeergebnis:
- Buffer, gibt das berechnete gemeinsame Geheimnis zurück
isPrivate
Abfrage, ob der aktuelle Schlüssel ein privater Schlüssel ist
1Boolean BlsKey.isPrivate();
Rückgabeergebnis:
- Boolean, wenn True privater Schlüssel bedeutet
clone
aktuellen Schlüssel kopieren
1PKey BlsKey.clone();
Rückgabeergebnis:
- PKey, das Kopierobjekt des aktuellen Schlüssels
pem
Gibt die PEM-Formatcodierung des aktuellen Schlüssels zurück
1String BlsKey.pem();
Rückgabeergebnis:
- String, die PEM-Formatcodierung des aktuellen Schlüssels
der
Gibt die DER-Formatcodierung des aktuellen Schlüssels zurück
1Buffer BlsKey.der();
Rückgabeergebnis:
- Buffer, die DER-Formatcodierung des aktuellen Schlüssels
json
Gibt die Codierung im jwt-Format des aktuellen Schlüssels zurück
1Object BlsKey.json(Object opts = {});
Aufrufparameter:
- opts: Objekt, gibt Exportoptionen an
Rückgabeergebnis:
- Object, die jwt-Formatcodierung des aktuellen Schlüssels
opts unterstützt die folgenden Parameter:
1
2
3{
compress: false, 指定签名以压缩方式输出公钥
}
Die Kurven, die die Komprimierung unterstützen, sind: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2
equals
Vergleichen Sie, ob zwei öffentliche/private Schlüssel gleich sind
1Boolean BlsKey.equals(PKey key);
Aufrufparameter:
- key:PKey, geben Sie den öffentlichen/privaten Schlüssel der anderen Partei an
Rückgabeergebnis:
- Boolean, geben Sie true zurück, wenn es dasselbe ist
encrypt
Verschlüsseln Sie Daten mit dem aktuellen kryptografischen öffentlichen Schlüssel des Algorithmus
1Buffer BlsKey.encrypt(Buffer data) async;
Aufrufparameter:
- data:Buffer, gibt die zu verschlüsselnden Daten an
Rückgabeergebnis:
- Buffer, gibt die verschlüsselten Daten zurück
decrypt
Entschlüsseln Sie die Daten mit dem kryptografischen privaten Schlüssel des aktuellen Algorithmus
1Buffer BlsKey.decrypt(Buffer data) async;
Aufrufparameter:
- data:Buffer, gibt die zu entschlüsselnden Daten an
Rückgabeergebnis:
- Buffer, gibt die entschlüsselten Daten zurück
sign
Signieren Sie Daten mit dem kryptografischen privaten Schlüssel des aktuellen Algorithmus
1
2Buffer BlsKey.sign(Buffer data,
Object opts = {}) async;
Aufrufparameter:
- data:Buffer, gibt die zu signierenden Daten an
- opts: Objekt, gibt Signaturoptionen an
Rückgabeergebnis:
- Buffer, gibt die signierten Daten zurück
opts unterstützt die folgenden Parameter:
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
Verifizieren Sie Daten mit dem kryptografischen öffentlichen Schlüssel des aktuellen Algorithmus
1
2
3Boolean BlsKey.verify(Buffer data,
Buffer sign,
Object opts = {}) async;
Aufrufparameter:
- data:Buffer, wobei die zu validierenden Daten angegeben werden
- sign:Buffer, wobei die zu überprüfende Signatur angegeben wird
- opts: Objekt, gibt die Authentifizierungsoptionen an
Rückgabeergebnis:
- Boolean, gibt das verifizierte Ergebnis zurück
opts unterstützt die folgenden Parameter:
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
Geben Sie die Zeichenfolgendarstellung des Objekts zurück, geben Sie im Allgemeinen "[Native Object]" zurück, das Objekt kann gemäß seinen eigenen Eigenschaften neu implementiert werden
1String BlsKey.toString();
Rückgabeergebnis:
- String, gibt eine Zeichenfolgendarstellung des Objekts zurück
toJSON
Gibt die Darstellung des Objekts im JSON-Format zurück, gibt im Allgemeinen eine Sammlung lesbarer Eigenschaften zurück, die durch das Objekt definiert sind
1Value BlsKey.toJSON(String key = "");
Aufrufparameter:
- key: Zeichenfolge, nicht verwendet
Rückgabeergebnis:
- Value, die einen JSON-serialisierbaren Wert zurückgibt