56 lines
1.0 KiB
Go
56 lines
1.0 KiB
Go
package jwt
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"crypto/rsa"
|
|
"crypto/x509"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
func NewHMACKey(n int) []byte {
|
|
res := make([]byte, n)
|
|
rand.Reader.Read(res)
|
|
return res
|
|
}
|
|
|
|
func CachedRSAkey() (*rsa.PrivateKey, error) {
|
|
keyPath := filepath.Join(os.TempDir(), "narco-jwt-test.key")
|
|
f, err := os.Open(keyPath)
|
|
if err != nil {
|
|
if os.IsNotExist(err) == false {
|
|
return nil, err
|
|
}
|
|
// generate a key
|
|
log.Printf("Generating a new key")
|
|
key, err := rsa.GenerateKey(rand.Reader, 1024)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
f, err := os.Create(keyPath)
|
|
if err != nil {
|
|
log.Printf("Could not cache the generated key: %s", err)
|
|
return key, nil
|
|
}
|
|
|
|
data := x509.MarshalPKCS1PrivateKey(key)
|
|
_, err = f.Write(data)
|
|
if err != nil {
|
|
log.Printf("Could not cache the generated key: %s", err)
|
|
}
|
|
|
|
return key, nil
|
|
}
|
|
|
|
keydata, err := ioutil.ReadAll(f)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("Could not read %s: %s", keyPath, err)
|
|
}
|
|
|
|
return x509.ParsePKCS1PrivateKey(keydata)
|
|
}
|