@@ -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
const nbt = require ( 'prismarine-nbt' )
11
12
12
13
/**
@@ -112,6 +113,9 @@ module.exports = function (client, server, options) {
112
113
}
113
114
}
114
115
116
+ const keyRsa = new NodeRSA ( server . serverKey . exportKey ( 'pkcs1' ) , 'private' , { encryptionScheme : 'pkcs1' } )
117
+ keyRsa . setOptions ( { environment : 'browser' } )
118
+
115
119
if ( packet . hasVerifyToken === false ) {
116
120
// 1.19, hasVerifyToken is set and equal to false IF chat signing is enabled
117
121
// This is the default action starting in 1.19.1.
@@ -123,10 +127,7 @@ module.exports = function (client, server, options) {
123
127
} else {
124
128
const encryptedToken = packet . hasVerifyToken ? packet . crypto . verifyToken : packet . verifyToken
125
129
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 )
130
131
131
132
if ( ! client . verifyToken . equals ( decryptedToken ) ) {
132
133
client . end ( 'DidNotEncryptVerifyTokenProperly' )
@@ -137,13 +138,9 @@ module.exports = function (client, server, options) {
137
138
return
138
139
}
139
140
}
140
-
141
141
let sharedSecret
142
142
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 )
147
144
} catch ( e ) {
148
145
client . end ( 'DidNotEncryptVerifyTokenProperly' )
149
146
return
0 commit comments