11package password
22
33import (
4+ "bytes"
45 "crypto/rand"
56 "crypto/rsa"
67 "encoding/hex"
@@ -11,7 +12,10 @@ import (
1112// EncryptPassword constructs the payload and encrypts it using RSA-PKCS1v15.
1213func EncryptPassword (email , password , sessionKey , nHex , eHex string ) (string , error ) {
1314 // 1. Construct the payload: [len + val]...
14- payload := createPayload (email , password , sessionKey )
15+ payload , err := createPayload (email , password , sessionKey )
16+ if err != nil {
17+ return "" , fmt .Errorf ("failed to create password payload: %w" , err )
18+ }
1519
1620 // 2. Parse Public Key from Hex
1721 pubKey , err := parseRSAPublicKey (nHex , eHex )
@@ -20,7 +24,7 @@ func EncryptPassword(email, password, sessionKey, nHex, eHex string) (string, er
2024 }
2125
2226 // 3. Encrypt using RSA-PKCS1-v1.5
23- encryptedBytes , err := rsa .EncryptPKCS1v15 (rand .Reader , pubKey , [] byte ( payload ) )
27+ encryptedBytes , err := rsa .EncryptPKCS1v15 (rand .Reader , pubKey , payload )
2428 if err != nil {
2529 return "" , fmt .Errorf ("failed to encrypt payload: %w" , err )
2630 }
@@ -30,12 +34,16 @@ func EncryptPassword(email, password, sessionKey, nHex, eHex string) (string, er
3034}
3135
3236// Format: [len(sessionKey) + sessionKey + len(email) + email + len(password) + password]
33- func createPayload (email , password , sessionKey string ) string {
34- return fmt .Sprintf ("%c%s%c%s%c%s" ,
35- len (sessionKey ), sessionKey ,
36- len (email ), email ,
37- len (password ), password ,
38- )
37+ func createPayload (email , password , sessionKey string ) ([]byte , error ) {
38+ var payload bytes.Buffer
39+ for _ , field := range []string {sessionKey , email , password } {
40+ if len (field ) > 255 {
41+ return nil , fmt .Errorf ("field is too long: %d bytes" , len (field ))
42+ }
43+ payload .WriteByte (byte (len (field )))
44+ payload .WriteString (field )
45+ }
46+ return payload .Bytes (), nil
3947}
4048
4149// parseRSAPublicKey converts hex modulus and exponent into *rsa.PublicKey.
0 commit comments