goeleven

package module
v0.0.0-...-64cfe95 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 28, 2024 License: MIT Imports: 14 Imported by: 2

README

goeleven

Go implementation of Python PKCS11 REST Proxy (https://github.com/leifj/pyeleven)

Requirements

  • ubuntu package libltdl-dev
  • Go 1.3.3 or newer (not tested with older versions)

Documentation

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	HSMStatusData []byte
)

Functions

func Decrypt

func Decrypt(data []byte, parms Request, key keyInfo) (plain []byte, err error)
Example
publickey := "MIIEbjCCA1agAwIBAgIRAOpBhouRJl1gj7JWKYJLGbAwDQYJKoZIhvcNAQEFBQAwNjELMAkGA1UEBhMCTkwxDzANBgNVBAoTBlRFUkVOQTEWMBQGA1UEAxMNVEVSRU5BIFNTTCBDQTAeFw0xMzA5MDIwMDAwMDBaFw0xNjA5MjAyMzU5NTlaMD4xITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEZMBcGA1UEAxMQYmV0YXdheWYud2F5Zi5kazCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMI6ZXEBejtl25Uz1r32GrtmyTjhgbNduHDlmMeuGIVFgVOMtwQDUvlvFOG8H9paJ6xRrHuTw+QktZBBcEEkPOdnMekmtvgucc+lPuHdXlUS6gkd+iHdT5WRNnwg+Uwl1X/45LcaUhXAO2zRsYC3aiTaUmjtEz9YHXgdnaMj4pOoCpLCYWp0UkxzUjd2Js3YdMgn6TDYZdk0YTiZ7SvipSoP13hNgo/vP7uziDwmTTP6H4KkOdd98WX08hgmk6z4BeaeYzE82Hp7DnMcW5Mk8SUNSf5E0d5vcWxCr2mUfH/nZlS9SrzE5qBqRUGnLNZOvAlOX00Digxl4lc4xhPKaNcCAwEAAaOCAW0wggFpMB8GA1UdIwQYMBaAFAy9k2gM896ro0lrKzdXR+qQ47ntMB0GA1UdDgQWBBQocIgUSR/fr0wPPkXxQfmSirPr3TAOBgNVHQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwIgYDVR0gBBswGTANBgsrBgEEAbIxAQICHTAIBgZngQwBAgEwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC50Y3MudGVyZW5hLm9yZy9URVJFTkFTU0xDQS5jcmwwbQYIKwYBBQUHAQEEYTBfMDUGCCsGAQUFBzAChilodHRwOi8vY3J0LnRjcy50ZXJlbmEub3JnL1RFUkVOQVNTTENBLmNydDAmBggrBgEFBQcwAYYaaHR0cDovL29jc3AudGNzLnRlcmVuYS5vcmcwGwYDVR0RBBQwEoIQYmV0YXdheWYud2F5Zi5kazANBgkqhkiG9w0BAQUFAAOCAQEAAg7GQxtHHvrksFK3CIb+4F8Aj34GT7H45rfgZPcJO8zpxc5o3kNi+ag4+YUChkNKDRgKuYyspOgJpn2eEhGly2GvD1upFXUEZV28LqbErHxzpUA6U/+VUV1pRlZIrhakAUkzZavxzgbm0W9OxMc2qcJo6aCfl4LT7D6V6r62iYy+iE4xNpKlnP5Yd32vnqlKTiCSvXWWhCDbgIoijZ+EIF9J2V0dYS3PvM2Xj0z9DGNxXLzaVzlsOCAFVo61I4PZDO1YbgWKYn7CrqNjW/XW5hb4W0zayOFfslardt6XR+erSsNB6zxf6vjRpvQNio9CRxwQwFBEHlAq5Ct8csAnNQ=="

block, _ := base64.StdEncoding.DecodeString(publickey)
pk, err := x509.ParseCertificate(block)
if err != nil {
	panic(err)
}

ciphertext, err := rsa.EncryptOAEP(sha1.New(), rand.Reader, pk.PublicKey.(*rsa.PublicKey), []byte("anton banton"), nil)
if err != nil {
	panic(err)
}

cipher := base64.StdEncoding.EncodeToString(ciphertext)

params := Request{
	cipher,
	"CKM_RSA_PKCS_OAEP",
	"CKM_SHA_1",
	"decrypt",
	keymap["betawayf.wayf.dk.key"].sharedsecret,
}

payloadjson, _ := json.Marshal(params)

payload := bytes.NewReader(payloadjson)

r, _ := http.NewRequest("POST", "/wayf/betawayf.wayf.dk.key", payload)
r.RemoteAddr = "127.0.0.1"
w := httptest.NewRecorder()

time.Sleep(1 * time.Second) // wait for async init of service
Log(http.DefaultServeMux).ServeHTTP(w, r)
type Res struct {
	Result string `json:"signed"`
}
b := Res{}
err = json.Unmarshal(w.Body.Bytes(), &b)
res, _ := base64.StdEncoding.DecodeString(b.Result)
fmt.Printf("%s\n", res)
Output:

anton banton

func Dispatch

func Dispatch(req string, params Request) (res []byte, err error)

func Encrypt

func Encrypt(data []byte, parms Request, key keyInfo) (ciphertext []byte, err error)

func HSMStatus

func HSMStatus() (err error)

func HSMStatus2

func HSMStatus2() (err error)

func Init

func Init(conf config.GoElevenConfig)

func Sign

func Sign(data []byte, parms Request, key keyInfo) (sig []byte, err error)

TODO: Cleanup TODO: Documentation

Example
params := Request{
	"aGVqbWVkZGlnCg==",
	"CKM_RSA_PKCS",
	"",
	"sign",
	keymap["wildcard.test.lan.key"].sharedsecret,
}

payloadjson, _ := json.Marshal(params)

payload := bytes.NewReader(payloadjson)

r, _ := http.NewRequest("POST", "/wayf/wildcard.test.lan.key", payload)
r.RemoteAddr = "127.0.0.1"
w := httptest.NewRecorder()

time.Sleep(1 * time.Second) // wait for async init of service
Log(http.DefaultServeMux).ServeHTTP(w, r)
fmt.Printf("%d - %s", w.Code, w.Body.String())
Output:

200 - {"signed":"PTwWtTP3PbIY4N6ss3iOHOcRS7xV+7mrkDKPXrkEpscyZhH6eGnSkljhJCpxhsIrtVnEjQ4VOI5AlMuf9cvwwG2XPeze18Is99E5XwwzynREt+rFiL9dpKoibYYuGMjTxr+qF44SDzzJP8sAwE42j7xBj81etxvN07s5TPV46BUGTGo87c2xiPLJ11n4r/6vUTGWFGdViAO5tnq5heKF0GcVDU3n6r3JXbfHe0sP+3AfJsVuWqayC2C1N49jmJgZLbhplRmhNabTRpEHzZHyaBkioQZ0Yf31kzuYSBemHnGpZv9MGwtjzUw7DsxwaZ9z/RNs7H5OhSoTdcGH1H4clg=="}

Types

type Request

type Request struct {
	Data      string `json:"data"`
	Mech      string `json:"mech"`
	Digest    string `json:"digest"`
	Function  string `json:"function"`
	Sharedkey string `json:"sharedkey"`
}

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL