@@ -7,6 +7,7 @@ const chatPlugin = require('./chat')
7
7
const { concat } = require ( '../transforms/binaryStream' )
8
8
const { mojangPublicKeyPem } = require ( './constants' )
9
9
const debug = require ( 'debug' ) ( 'minecraft-protocol' )
10
+ const NodeRSA = require ( 'node-rsa' )
10
11
11
12
module . exports = function ( client , server , options ) {
12
13
const mojangPubKey = crypto . createPublicKey ( mojangPublicKeyPem )
@@ -106,6 +107,9 @@ module.exports = function (client, server, options) {
106
107
}
107
108
}
108
109
110
+ const keyRsa = new NodeRSA ( server . serverKey . exportKey ( 'pkcs1' ) , 'private' , { encryptionScheme : 'pkcs1' } )
111
+ keyRsa . setOptions ( { environment : 'browser' } )
112
+
109
113
if ( packet . hasVerifyToken === false ) {
110
114
// 1.19, hasVerifyToken is set and equal to false IF chat signing is enabled
111
115
// This is the default action starting in 1.19.1.
@@ -117,10 +121,7 @@ module.exports = function (client, server, options) {
117
121
} else {
118
122
const encryptedToken = packet . hasVerifyToken ? packet . crypto . verifyToken : packet . verifyToken
119
123
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 )
124
125
125
126
if ( ! client . verifyToken . equals ( decryptedToken ) ) {
126
127
client . end ( 'DidNotEncryptVerifyTokenProperly' )
@@ -131,13 +132,9 @@ module.exports = function (client, server, options) {
131
132
return
132
133
}
133
134
}
134
-
135
135
let sharedSecret
136
136
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 )
141
138
} catch ( e ) {
142
139
client . end ( 'DidNotEncryptVerifyTokenProperly' )
143
140
return
0 commit comments