Skip to content

Commit

Permalink
using base64 encoding for private and pubkeys fixes #7
Browse files Browse the repository at this point in the history
  • Loading branch information
adonese committed Jun 26, 2022
1 parent b367fde commit 8e1dea3
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 3 deletions.
24 changes: 22 additions & 2 deletions rsa.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,12 @@ func DecryptNoebs(privkey string, payload string) (string, error) {
// - we used sha256 to sign the hash of the message, instead of the actual message
// WE expect that the client side will abide by this same interface we are designing here
func Sign(privkey string) (string, error) {
block, _ := pem.Decode([]byte(privkey))

data, err := decode(privkey)
if err != nil {
return "", err
}
block, _ := pem.Decode(data)
if block == nil {
panic("failed to parse PEM block containing the private key")
}
Expand Down Expand Up @@ -141,9 +146,16 @@ func Sign(privkey string) (string, error) {
//Verify used by noebs systems to verify the authenticity of the clients.
// We are currently using it to ensure that noebs mobile clients are valid (providing their keys are valid)
// this is a rather very tricky api, but it is the only way we can ensure a simple way of authenticating our users
//
// pubkey is base64 string encoding for the public key!
func Verify(pubkey string, payload string) (bool, error) {

block, _ := pem.Decode([]byte(pubkey))
data, err := decode(pubkey)
if err != nil {
return false, err
}

block, _ := pem.Decode(data)
if block == nil {
panic("failed to parse PEM block containing the private key")
}
Expand Down Expand Up @@ -171,3 +183,11 @@ func Verify(pubkey string, payload string) (bool, error) {

return true, nil
}

func decode(data string) ([]byte, error) {
return base64.StdEncoding.DecodeString(data)
}

func encode(data string) string {
return base64.StdEncoding.EncodeToString([]byte(data))
}
44 changes: 43 additions & 1 deletion rsa_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package crypto

import (
"reflect"
"testing"
)

Expand Down Expand Up @@ -139,6 +140,8 @@ qiJkr3VctmXoxdRvFwIDAQAB
-----END PUBLIC KEY-----`
signature := "388a6e734f7ff2171eb73f4cfc4e08bd30da6381c0083b8c477328842e1a48e00deaf995f2b145c32918c67b11f89e2917dae7b40cd70d89f02975009b291cce6b784acab9b9be54f3e44c5822722fc491d7bd96e15b4e88a43c61124f453cbd76e4aba1d4f95e3ec8c0efcbade7bc6b28fab76cb725a65652d92213c942b08d"
want := true

key := encode(pubKey)
type args struct {
pubkey string
payload string
Expand All @@ -149,7 +152,7 @@ qiJkr3VctmXoxdRvFwIDAQAB
want bool
wantErr bool
}{
{"test-verify", args{pubkey: pubKey, payload: signature}, want, false},
{"test-verify", args{pubkey: key, payload: signature}, want, false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand All @@ -164,3 +167,42 @@ qiJkr3VctmXoxdRvFwIDAQAB
})
}
}

func Test_encode(t *testing.T) {
const myKey = `
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDR0lD1Fyia1GmodfSzKaiwhiZ00OMcHjTy7cxZsENmLxO0i0RQ
0o2PHqz+cMX2CEEpUEDIPatv3xuVln53S7NTMFxYh3RG12VafI3XtMZTNovcLuNp
2CYPLz+/2IVvCktsTp9it3pDqB5MLNTWMSNWyuk3qiJkr3VctmXoxdRvFwIDAQAB
AoGBALLJ57owdaUZAr9NY6mXAesJJJO9uwgmpS+recmi7IuR6dSaJyhHgeBGX1qg
dc7j0cKGY+08v2ygTDz28+RrWO0q4kV0iGZ0N2AbmX34AMQwYWq2wrszokAXAASL
hlekVY2/eFtzdVbb5wqhZNCrPxD/EnJ5cs2kofaG40jDfqVhAkEA7NyBWv4fS1ns
Lgjv61EeB/BohpFk8mfaMNmImrakupXQIH5tT8Sh9+kHIiTjapopIq5WPzWjtw8N
WUxgnkqB7QJBAOLGfZqaJ309DHwPeCn9EG4LkS3OPe6vSDkrEDkLmVJOyT9RqoS7
p131duEQuHImsLgAj/wEnTdVVYCqMUMQpJMCQQDH+adQzopXUNVBTJRaxUKoi0WE
j459xkaFxbM6hAdx7HgqZvMdTLM+nkRChIhogT1HpY71kPDm5dNsWDqeieNFAkEA
wvm75l/h0ejaQhQe0aMWLDdfxE1NrFkiNJzU3ucdFMpOd1Vk0ahx9vPkGRACNYsU
Z698HEdvULLax7wMjMfTZwJAAIrwM2myhTc5it1/dY93FoTiKwHgK7hYmLXr6I8u
QCS3eL4elcKvcS1lhrZiNpK2yGNYdlqH4jku/lnnhW03mg==
-----END RSA PRIVATE KEY-----`
want := "Ci0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS0KTUlJQ1hnSUJBQUtCZ1FEUjBsRDFGeWlhMUdtb2RmU3pLYWl3aGlaMDBPTWNIalR5N2N4WnNFTm1MeE8waTBSUQowbzJQSHF6K2NNWDJDRUVwVUVESVBhdHYzeHVWbG41M1M3TlRNRnhZaDNSRzEyVmFmSTNYdE1aVE5vdmNMdU5wCjJDWVBMeisvMklWdkNrdHNUcDlpdDNwRHFCNU1MTlRXTVNOV3l1azNxaUprcjNWY3RtWG94ZFJ2RndJREFRQUIKQW9HQkFMTEo1N293ZGFVWkFyOU5ZNm1YQWVzSkpKTzl1d2dtcFMrcmVjbWk3SXVSNmRTYUp5aEhnZUJHWDFxZwpkYzdqMGNLR1krMDh2MnlnVER6MjgrUnJXTzBxNGtWMGlHWjBOMkFibVgzNEFNUXdZV3Eyd3Jzem9rQVhBQVNMCmhsZWtWWTIvZUZ0emRWYmI1d3FoWk5DclB4RC9Fbko1Y3Mya29mYUc0MGpEZnFWaEFrRUE3TnlCV3Y0ZlMxbnMKTGdqdjYxRWVCL0JvaHBGazhtZmFNTm1JbXJha3VwWFFJSDV0VDhTaDkra0hJaVRqYXBvcElxNVdQeldqdHc4TgpXVXhnbmtxQjdRSkJBT0xHZlpxYUozMDlESHdQZUNuOUVHNExrUzNPUGU2dlNEa3JFRGtMbVZKT3lUOVJxb1M3CnAxMzFkdUVRdUhJbXNMZ0FqL3dFblRkVlZZQ3FNVU1RcEpNQ1FRREgrYWRRem9wWFVOVkJUSlJheFVLb2kwV0UKajQ1OXhrYUZ4Yk02aEFkeDdIZ3Fadk1kVExNK25rUkNoSWhvZ1QxSHBZNzFrUERtNWROc1dEcWVpZU5GQWtFQQp3dm03NWwvaDBlamFRaFFlMGFNV0xEZGZ4RTFOckZraU5KelUzdWNkRk1wT2QxVmswYWh4OXZQa0dSQUNOWXNVClo2OThIRWR2VUxMYXg3d01qTWZUWndKQUFJcndNMm15aFRjNWl0MS9kWTkzRm9UaUt3SGdLN2hZbUxYcjZJOHUKUUNTM2VMNGVsY0t2Y1MxbGhyWmlOcEsyeUdOWWRscUg0amt1L2xubmhXMDNtZz09Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t"
type args struct {
data string
}
tests := []struct {
name string
args args
want string
wantErr bool
}{
{"test-encoding", args{data: myKey}, want, false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := encode(tt.args.data)
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("encode() = %v, want %v", got, tt.want)
}
})
}
}

0 comments on commit 8e1dea3

Please sign in to comment.