Skip to content

Commit c879d0e

Browse files
fix: use node-rsa for decryption for higher node compatibility (#1319)
Co-authored-by: extremeheat <[email protected]>
1 parent 556b9dd commit c879d0e

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
const nbt = require('prismarine-nbt')
1112

1213
/**
@@ -112,6 +113,9 @@ module.exports = function (client, server, options) {
112113
}
113114
}
114115

116+
const keyRsa = new NodeRSA(server.serverKey.exportKey('pkcs1'), 'private', { encryptionScheme: 'pkcs1' })
117+
keyRsa.setOptions({ environment: 'browser' })
118+
115119
if (packet.hasVerifyToken === false) {
116120
// 1.19, hasVerifyToken is set and equal to false IF chat signing is enabled
117121
// This is the default action starting in 1.19.1.
@@ -123,10 +127,7 @@ module.exports = function (client, server, options) {
123127
} else {
124128
const encryptedToken = packet.hasVerifyToken ? packet.crypto.verifyToken : packet.verifyToken
125129
try {
126-
const decryptedToken = crypto.privateDecrypt({
127-
key: server.serverKey.exportKey(),
128-
padding: crypto.constants.RSA_PKCS1_PADDING
129-
}, encryptedToken)
130+
const decryptedToken = keyRsa.decrypt(encryptedToken)
130131

131132
if (!client.verifyToken.equals(decryptedToken)) {
132133
client.end('DidNotEncryptVerifyTokenProperly')
@@ -137,13 +138,9 @@ module.exports = function (client, server, options) {
137138
return
138139
}
139140
}
140-
141141
let sharedSecret
142142
try {
143-
sharedSecret = crypto.privateDecrypt({
144-
key: server.serverKey.exportKey(),
145-
padding: crypto.constants.RSA_PKCS1_PADDING
146-
}, packet.sharedSecret)
143+
sharedSecret = keyRsa.decrypt(packet.sharedSecret)
147144
} catch (e) {
148145
client.end('DidNotEncryptVerifyTokenProperly')
149146
return

0 commit comments

Comments
 (0)