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,53 @@
|
||||
package crypto
|
||||
|
||||
import (
|
||||
"crypto/rsa"
|
||||
// #nosec
|
||||
//
|
||||
// Allowing sha1 because it is used in MTProto itself.
|
||||
"crypto/sha1"
|
||||
"math/big"
|
||||
)
|
||||
|
||||
// RSAKeyBits is RSA key size.
|
||||
//
|
||||
// Can be used as rsa.GenerateKey(src, RSAKeyBits).
|
||||
const RSAKeyBits = 2048
|
||||
|
||||
const (
|
||||
rsaLen = 256
|
||||
rsaWithHashLen = 255
|
||||
rsaDataLen = rsaWithHashLen - sha1.Size
|
||||
)
|
||||
|
||||
// RSAPublicDecrypt recovers the message digest from the raw signature
|
||||
// using the signer’s RSA public key.
|
||||
//
|
||||
// See also OpenSSL’s RSA_public_decrypt with RSA_NO_PADDING.
|
||||
func RSAPublicDecrypt(pub *rsa.PublicKey, sig []byte) ([]byte, error) {
|
||||
k := pub.Size()
|
||||
if k < 11 || k != len(sig) {
|
||||
return nil, rsa.ErrVerification
|
||||
}
|
||||
|
||||
c := new(big.Int).SetBytes(sig)
|
||||
e := big.NewInt(int64(pub.E))
|
||||
m := new(big.Int).Exp(c, e, pub.N)
|
||||
|
||||
return m.Bytes(), nil
|
||||
}
|
||||
|
||||
func rsaEncrypt(data []byte, key *rsa.PublicKey) []byte {
|
||||
z := new(big.Int).SetBytes(data)
|
||||
e := big.NewInt(int64(key.E))
|
||||
c := new(big.Int).Exp(z, e, key.N)
|
||||
res := make([]byte, rsaLen)
|
||||
c.FillBytes(res)
|
||||
return res
|
||||
}
|
||||
|
||||
func rsaDecrypt(data []byte, key *rsa.PrivateKey, to []byte) bool {
|
||||
c := new(big.Int).SetBytes(data)
|
||||
m := new(big.Int).Exp(c, key.D, key.N)
|
||||
return FillBytes(m, to)
|
||||
}
|
||||
Reference in New Issue
Block a user