parent
5d00d1987b
commit
e9288ee253
@ -0,0 +1,76 @@ |
||||
package main |
||||
|
||||
import ( |
||||
"crypto/rand" |
||||
"crypto/rsa" |
||||
"crypto/x509" |
||||
"encoding/asn1" |
||||
"encoding/gob" |
||||
"encoding/pem" |
||||
"fmt" |
||||
"os" |
||||
) |
||||
|
||||
func main() { |
||||
reader := rand.Reader |
||||
bitSize := 2048 |
||||
|
||||
key, err := rsa.GenerateKey(reader, bitSize) |
||||
checkError(err) |
||||
|
||||
publicKey := key.PublicKey |
||||
|
||||
saveGobKey("private.key", key) |
||||
savePEMKey("private.pem", key) |
||||
|
||||
saveGobKey("public.key", publicKey) |
||||
savePublicPEMKey("public.pem", publicKey) |
||||
} |
||||
|
||||
func saveGobKey(fileName string, key interface{}) { |
||||
outFile, err := os.Create(fileName) |
||||
checkError(err) |
||||
defer outFile.Close() |
||||
|
||||
encoder := gob.NewEncoder(outFile) |
||||
err = encoder.Encode(key) |
||||
checkError(err) |
||||
} |
||||
|
||||
func savePEMKey(fileName string, key *rsa.PrivateKey) { |
||||
outFile, err := os.Create(fileName) |
||||
checkError(err) |
||||
defer outFile.Close() |
||||
|
||||
var privateKey = &pem.Block{ |
||||
Type: "PRIVATE KEY", |
||||
Bytes: x509.MarshalPKCS1PrivateKey(key), |
||||
} |
||||
|
||||
err = pem.Encode(outFile, privateKey) |
||||
checkError(err) |
||||
} |
||||
|
||||
func savePublicPEMKey(fileName string, pubkey rsa.PublicKey) { |
||||
asn1Bytes, err := asn1.Marshal(pubkey) |
||||
checkError(err) |
||||
|
||||
var pemkey = &pem.Block{ |
||||
Type: "PUBLIC KEY", |
||||
Bytes: asn1Bytes, |
||||
} |
||||
|
||||
pemfile, err := os.Create(fileName) |
||||
checkError(err) |
||||
defer pemfile.Close() |
||||
|
||||
err = pem.Encode(pemfile, pemkey) |
||||
checkError(err) |
||||
} |
||||
|
||||
func checkError(err error) { |
||||
if err != nil { |
||||
fmt.Println("Fatal error ", err.Error()) |
||||
os.Exit(1) |
||||
} |
||||
} |
Loading…
Reference in new issue