33 lines
943 B
Go
33 lines
943 B
Go
|
package crypto
|
||
|
|
||
|
import (
|
||
|
"crypto/rsa"
|
||
|
"encoding/base64"
|
||
|
"math/big"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func KeysToBase64(privateKey *rsa.PrivateKey) (RSAKey, RSAKey) {
|
||
|
pub := base64.StdEncoding.EncodeToString(privateKey.PublicKey.N.Bytes())
|
||
|
privBytes := privateKey.D.Bytes()[:]
|
||
|
privBytes = append(privBytes, '\n', '\n')
|
||
|
privBytes = append(privBytes, privateKey.PublicKey.N.Bytes()[:]...)
|
||
|
priv := base64.StdEncoding.EncodeToString(privBytes)
|
||
|
return RSAKey(priv), RSAKey(pub)
|
||
|
}
|
||
|
|
||
|
func Base64ToKeys(privateKeyBase64 string) (*rsa.PrivateKey, error) {
|
||
|
privateKeyStore, err := base64.StdEncoding.DecodeString(privateKeyBase64)
|
||
|
throw(err)
|
||
|
store := strings.Split(string(privateKeyStore), "\n\n")
|
||
|
privateKey := []byte(store[0])
|
||
|
publicKey := []byte(store[1])
|
||
|
return &rsa.PrivateKey{D: new(big.Int).SetBytes(privateKey), PublicKey: rsa.PublicKey{N: new(big.Int).SetBytes(publicKey), E: 65537}}, nil
|
||
|
}
|
||
|
|
||
|
func throw(err error) {
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
}
|