wallet/pkg/crypto/rsa.go
Anton Nesterov b19bf34e5f
[init]
2024-08-31 16:54:43 +02:00

51 lines
1.1 KiB
Go

package crypto
import (
"crypto/rand"
"crypto/rsa"
"crypto/sha512"
"encoding/base64"
"math/big"
)
type RSAKey string
func (key *RSAKey) Encrypt(data []byte) []byte {
pk := key.PubFromBase64()
encrypted, err := rsa.EncryptOAEP(sha512.New(), rand.Reader, &pk, data, nil)
throw(err)
return encrypted
}
func (key *RSAKey) Decrypt(data []byte) []byte {
pk := key.PKFromBase64()
decrypted, err := rsa.DecryptOAEP(sha512.New(), rand.Reader, &pk, data, nil)
throw(err)
return decrypted
}
func (key *RSAKey) EncryptToString(str string) string {
return base64.StdEncoding.EncodeToString(key.Encrypt([]byte(str)))
}
func (key *RSAKey) DecryptToString(b64 string) string {
raw, _ := base64.StdEncoding.DecodeString(b64)
return string(key.Decrypt(raw))
}
func (key *RSAKey) PubFromBase64() rsa.PublicKey {
raw, err := base64.StdEncoding.DecodeString(string(*key))
throw(err)
pk := rsa.PublicKey{
N: new(big.Int).SetBytes(raw),
E: 65537,
}
return pk
}
func (key *RSAKey) PKFromBase64() rsa.PrivateKey {
pk, err := Base64ToKeys(string(*key))
throw(err)
return *pk
}