move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
package crypto
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"crypto/rsa"
|
||||
"encoding/hex"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"go.mau.fi/mautrix-telegram/pkg/gotd/testutil"
|
||||
)
|
||||
|
||||
func TestRSAPad(t *testing.T) {
|
||||
a := require.New(t)
|
||||
|
||||
keys, err := ParseRSAPublicKeys([]byte(`
|
||||
-----BEGIN RSA PUBLIC KEY-----
|
||||
MIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g
|
||||
5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO
|
||||
62cECs5HKhT5DZ98K33vmWiLowc621dQuwKWSQKjWf50XYFw42h21P2KXUGyp2y/
|
||||
+aEyZ+uVgLLQbRA1dEjSDZ2iGRy12Mk5gpYc397aYp438fsJoHIgJ2lgMv5h7WY9
|
||||
t6N/byY9Nw9p21Og3AoXSL2q/2IJ1WRUhebgAdGVMlV1fkuOQoEzR7EdpqtQD9Cs
|
||||
5+bfo3Nhmcyvk5ftB0WkJ9z6bNZ7yxrP8wIDAQAB
|
||||
-----END RSA PUBLIC KEY-----`))
|
||||
a.NoError(err)
|
||||
data := bytes.Repeat([]byte{'a'}, 144)
|
||||
|
||||
encrypted, err := RSAPad(data, keys[0], testutil.ZeroRand{})
|
||||
a.NoError(err)
|
||||
a.Len(encrypted, 256)
|
||||
|
||||
hexResult := "bf68719e836806b040cd261ecaf66eb3c4ba19f3bbea3031b2e6cf29167bab647201d101b291dc" +
|
||||
"5b716a42e789a38d947fe59e9bcce8f30ef46a946743ea8b6babbce7fc0afc46b802aa453e83471d82a4dfad83f971f35" +
|
||||
"0b4b4fb474cd1c48fdf427e4b5fecce9ec3178ae7dac3985856fdefa21d6fdc5e0e0fd8a57bc4f51580d637d372be8d87" +
|
||||
"c9aa3fde8e6f8287bcb3be846aadcdd59465375479e248f62ed438f9804fbe36d41ca906243a5f740f3937949aa149ba8" +
|
||||
"a8b8e68b3f3e1e3cd3f946387520e21eee55845e1f015a919a22f6a72bfaecd2cae946c91983b41f9ffabe97963bbde8f" +
|
||||
"30eaf5fd3c5b8cecab8711bd269e441b6084f385726ff0"
|
||||
expected, err := hex.DecodeString(hexResult)
|
||||
a.NoError(err)
|
||||
a.Equal(expected, encrypted)
|
||||
}
|
||||
|
||||
func TestDecodeRSAPad(t *testing.T) {
|
||||
a := require.New(t)
|
||||
r := rand.Reader
|
||||
|
||||
key, err := rsa.GenerateKey(r, RSAKeyBits)
|
||||
a.NoError(err)
|
||||
size := 144
|
||||
|
||||
data := make([]byte, size)
|
||||
_, err = io.ReadFull(r, data)
|
||||
a.NoError(err)
|
||||
|
||||
encrypted, err := RSAPad(data, &key.PublicKey, r)
|
||||
a.NoError(err)
|
||||
a.Len(encrypted, 256)
|
||||
|
||||
decrypted, err := DecodeRSAPad(encrypted, key)
|
||||
a.NoError(err)
|
||||
a.Equal(data, decrypted[:size])
|
||||
}
|
||||
|
||||
func BenchmarkRSAPad(b *testing.B) {
|
||||
key := testutil.RSAPrivateKey()
|
||||
|
||||
data := make([]byte, 144)
|
||||
if _, err := io.ReadFull(rand.Reader, data); err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
|
||||
b.SetBytes(int64(len(data)))
|
||||
b.ReportAllocs()
|
||||
b.ResetTimer()
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
if _, err := RSAPad(data, &key.PublicKey, rand.Reader); err != nil {
|
||||
b.Fatal(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user