Skip to content

Commit cd8f06e

Browse files
committed
fix: use node-rsa for decryption for higher node compatibility
1 parent 7057ad9 commit cd8f06e

File tree

1 file changed

+6
-9
lines changed

1 file changed

+6
-9
lines changed

src/server/login.js

+6-9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const chatPlugin = require('./chat')
77
const { concat } = require('../transforms/binaryStream')
88
const { mojangPublicKeyPem } = require('./constants')
99
const debug = require('debug')('minecraft-protocol')
10+
const NodeRSA = require('node-rsa')
1011

1112
module.exports = function (client, server, options) {
1213
const mojangPubKey = crypto.createPublicKey(mojangPublicKeyPem)
@@ -106,6 +107,9 @@ module.exports = function (client, server, options) {
106107
}
107108
}
108109

110+
const keyRsa = new NodeRSA(server.serverKey.exportKey('pkcs1'), 'private', { encryptionScheme: 'pkcs1' })
111+
keyRsa.setOptions({ environment: 'browser' })
112+
109113
if (packet.hasVerifyToken === false) {
110114
// 1.19, hasVerifyToken is set and equal to false IF chat signing is enabled
111115
// This is the default action starting in 1.19.1.
@@ -117,10 +121,7 @@ module.exports = function (client, server, options) {
117121
} else {
118122
const encryptedToken = packet.hasVerifyToken ? packet.crypto.verifyToken : packet.verifyToken
119123
try {
120-
const decryptedToken = crypto.privateDecrypt({
121-
key: server.serverKey.exportKey(),
122-
padding: crypto.constants.RSA_PKCS1_PADDING
123-
}, encryptedToken)
124+
const decryptedToken = keyRsa.decrypt(encryptedToken)
124125

125126
if (!client.verifyToken.equals(decryptedToken)) {
126127
client.end('DidNotEncryptVerifyTokenProperly')
@@ -131,13 +132,9 @@ module.exports = function (client, server, options) {
131132
return
132133
}
133134
}
134-
135135
let sharedSecret
136136
try {
137-
sharedSecret = crypto.privateDecrypt({
138-
key: server.serverKey.exportKey(),
139-
padding: crypto.constants.RSA_PKCS1_PADDING
140-
}, packet.sharedSecret)
137+
sharedSecret = keyRsa.decrypt(packet.sharedSecret)
141138
} catch (e) {
142139
client.end('DidNotEncryptVerifyTokenProperly')
143140
return

0 commit comments

Comments
 (0)